2011-03-06 42 views
3

比方說,我有一個DateInterval,像「P10DT1H53S」,我想它格式化爲人類可讀的字符串,如:如何格式化日期間隔爲文本(國際化)

10 days, 1 hour and 53 seconds 

現在,如果你只打算用英語來做,這很容易。但我正在尋找一種乾淨和國際化的方式來使用gettext。

不幸的是,它是gettext只處理的時間,而不是多個(年,日,小時等)的一個複數,所以我不能用ngettext達到我想要的。複數與語言差別很大,所以它不像迭代和在需要的地方添加「s」那麼簡單。另外,我必須把它作爲一個整體來構建,因爲我不確定每種語言都會使用逗號(用「和」而不是最後一個逗號)來區分日期,時間等。

+0

我知道,接近處理這種情況下,以及唯一的機制是Perl的[地點:: MakeText(http://search.cpan.org/~toddr/Locale-Maketext-1.17/lib/Locale/Maketext/ TPJ13.pod)模塊,您可能無法輕鬆訪問翻譯。祝你好運,我不能等待答案。 – sarnold 2011-03-06 11:30:55

回答

0

您可以使用多個調用的gettext,而不是隻在一個這樣做。這應該繞過複數限制。

+0

究竟如何?並非所有的語言都會使用逗號分隔名詞,並使用'_('和')'作爲最後一個名字(或者我錯了嗎?) – Artefact2 2011-03-06 11:13:55

+0

您也可以使用gettext作爲分隔符。但爲了簡單起見,我會簡單地做一些事情,比如「10天(s),1小時(s)和53秒(s)」我認爲人們不會介意,並且將更容易國際化 – krtek 2011-03-06 11:18:06

+0

'gettext )'對於這種情況確實失敗了,因爲正確的複數取決於確切的數字。 [用俄語](http://www.russianlessons.net/lessons/lesson11_main.php),如果數字以1結尾,則複數變化; 2,3,4; 5,6,7,8,9,0;或者在11和19之間。根據具體的數字,可能有不同的可能的詞的複數化。 – sarnold 2011-03-06 11:28:11

1

最多最新的國際數據的最佳資料庫是CLDR project,由Unicode Consortium主辦。區域特定的多元化規則是數據集的一部分。

的庫數據是在一堆的XML文件可用。有幾種操作數據的工具,包括用於生成兼容POSIX的語言環境文件的代碼。

我不知道你需要多少工作要做在PHP(不是我的專長)使用的數據,但它很可能是值得的,從長遠來看。

+0

謝謝你的鏈接,這絕對值得使用,但它似乎並不是我正在尋找的;我只需要一種格式化時間間隔的方法,而不是翻譯數據(我打算使用.po文件)。 – Artefact2 2011-03-06 13:24:21

+0

使用.po文件可能適用於文本片段,但您需要使用存儲庫的複數規則來選擇要使用的文件。 http://www.unicode.org/cldr/data/charts/supplemental/language_plural_rules.html – devstuff 2011-03-08 00:43:16