DEV Community

Kang-min Liu
Kang-min Liu

Posted on • Edited on

CPAN Release of Time::Verbal module

Time::Verbal 1.1.1 made its way to CPAN.

This module does one little thing: converting time durations to verbal formats, rounded to some "sensible" unit. Just as how you would say such thing as a human.

my o = Time::Verbal->new();
say $o->distance( time(), time() - 4567 );
#=> about 1 hour
Enter fullscreen mode Exit fullscreen mode

Besides the default English format, other 67 languages identified by these ISO language codes are supported:

ar bg bn-IN bs ca cy da de-AT de-CH de dsb el en-AU en-GB en-US eo es-AR es-CL es-CO es-MX es-PE es et eu fa fi fr-CA fr-CH fr fur gl-ES gsw-CH he hi-IN hi hr hsb hu id is it ja ko lo lt lv mk mn nb nl nn pl pt-BR pt-PT rm ro ru sk sl sr-Latn sr sv-SE sw tr uk vi zh-CN zh-TW

I don't know all these languages (nor their language codes), but Locale::Wolowiz does. Or, at least it is the library that does the translation, given a bunch of JSON files that contain the body of translations.

So here's how you say "about 1 hour" in Vietnamese:

my o = Time::Verbal->new( "locale" => "vi" );
say $o->distance( time(), time() - 4567 );
#=> khoảng 1 giờ
Enter fullscreen mode Exit fullscreen mode

A default version of translations of all the above-mentioned 68 languages are provided with Time::Verbal itself and is ready to use once installed properly -- a usual cpan or cpanm or cpm command would suffice. However, in case some customize version is need because, say, you wish to provide better UX to whom speak the Vulcan variant of Klingon, you need to create a file named after the language code -- which can be arbitrary such as tlh-Vulcan. You would create tlh-Vulcan.json and put it under /app/i18n, or really any directory of your choice, then do:

my o = Time::Verbal->new(
    "locale" => "tlh-Vulcan",
    "i18n_dir" => "/app/i18n"
);
say $o->distance( time(), time() - 4567 );
#=> Chaq wa' rep
Enter fullscreen mode Exit fullscreen mode

Disclaimer -- I don't know if that's how Vulcanized Klingon speaks. Don't take my example as if it is authentic.

To prepare the translation, take a look of the json files under the default i18n_dir, which can be printed by running this oneliner:

perl -MTime::Verbal -E 'say Time::Verbal->new()->i18n_dir'
Enter fullscreen mode Exit fullscreen mode

It shouldn't be difficult to grasp the structure of those translation files and produce a new one. It is however, very difficult to start describing the schema of thoes json file as an indolent developer.

The translations are accquired from rails-i18n project -- which is one of the first modules that does things like this.


Originally posted at https://gugod.org/2021/09/cpan-release-of-time-verbal/

Top comments (1)

Collapse
 
matthewpersico profile image
Matthew O. Persico

Calm Vulcans speaking gutteral Klingonese. :-) Thank you. That made my day.