Time::Verbal 模組於 CPAN 上釋出
作者:gugod 發佈於: ,更新於: #perl #cpanTime::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 語的翻譯檔,依普通方法以 cpan
或 cpanm
或 cpm
來安裝就行了。但若有一天你碰到狀況,得提供良好使用體驗給在瓦肯星上的克林貢人之時,你得要建立翻譯檔,檔名必須為語言碼,基上本自訂的就行了,就用 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.》之中文版。