Time::Verbal 模組於 CPAN 上釋出

作者:   發佈於: ,更新於:   #perl #cpan

Time::Verbal 1.1.1 版已上 CPAN。

這模組所提供的功能只有一項,它能將一段時間上的距離轉換為口語格式,且把小單位的部分省略,讓結果讀來通順自然,就像是人類說的一樣。

# English
my $en = Time::Verbal->new();
say $o->distance( time(), time() - 4567 );
#=> about 1 hour

# 台灣漢語
my $zh = Time::Verbal->new( "locale" => "zh-TW" );
say $o->distance( time(), time() - 4567 );
#=> 大約一小時

除了英語及台灣漢語以外,尚支援其他 66 種不同語言,以 ISO 語言碼列出如下:

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

我並非能通曉這所有語言之人(連這些 ISO 語言碼都背不起來了),但 Locale::Wolowiz 能。它是個提供多語翻譯的模組,只要將翻譯好的文句放在 JSON 檔內提供給它便可。

例如,這是「大約一小時」在越南語中的說法:

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

Time::Verbal 模組正確安裝了後就會附有前述 68 語的翻譯檔,依普通方法以 cpancpanmcpm 來安裝就行了。但若有一天你碰到狀況,得提供良好使用體驗給在瓦肯星上的克林貢人之時,你得要建立翻譯檔,檔名必須為語言碼,基上本自訂的就行了​,就用 tlh-Vulcan 吧。這翻譯檔 tlh-Vulcan.json 得放在 /app/i18n 或何指定路徑​,接著:

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

揭露事項:我其實並不知道瓦肯星上的克林貢族群是否真的這麼說話,此範例沒有任何可信度。

至於翻譯檔的格式與準備,請自行參考預設 i18n_dir 路徑底下的 JSON 檔內容。執行此行指令後會將路徑給顯示出來:

perl -MTime::Verbal -E 'say Time::Verbal->new()->i18n_dir'

略讀一下,就能讀懂那些翻譯檔的格式,應該不難。不過,要妥善在此解釋那些 JSON 檔案的型義,對於一位呆惰的程式設計師而言真是困難重重。

內付的翻譯是取自於 rails-i18n 計劃,那模組算是這類功能的起點吧。


本文為《CPAN Release of Time::Verbal module.》之中文版。