3
當我讀到Gettext和ICU MessageFormat時,兩者都被描述爲反對本地化的方法。將Gettext和ICU MessageFormat結合使用是個好主意嗎?
但我認爲,兩者的結合將是一個有趣的想法:使用MessageFormat進行格式設置,使用Gettext根據語言選擇合適的模板。沿線:
setlocale(LC_ALL, lang)
output = MessageFormat(lang, gettext("There is {number 1} Foo in bar."), [1])
這種方法是否有明顯的(或不是那麼明顯)的缺點?我是否缺少MessageFormat的核心部分,關於如何選擇已翻譯的模板?
我在你的字符串中有多個參數的情況下質疑斷言:'X猴子(s)剝Y香蕉(s)'。這正是這種情況,當Gettext結果在'if' /'else'地獄,而MessageFormat可能提供一個單一的解決方案:http://pastebin.com/yBf6AR8M – Boldewyn
@Boldewyn:嗯,使用MessageFormat和ICU是,這些規則是完全不可讀的。更糟的是,大多數翻譯人員並不熟悉他們,解釋它的工作原理並不容易。也沒有可能修改複數規則(他們給出),而你可以用Gettext來完成。最後但並非最不重要的一點,你提到的情況是一個很好的例子。不僅僅是因爲複數形式,而且還因爲語法情況的困難問題。通常有寫信息的方法來避免這種情況。 –
謝謝你的回答!我要求一個目的。基本上,我現在的基於Gettext的代碼看起來就像這樣:https://github.com/Boldewyn/Codepoints.net/blob/master/codepoints.net/views/codepoint/info.php,這一切都很好本地化。 (甚至不可能用任何非英語的語言進行本地化。)我正在尋找一種方法來解決*在本地化工具中,例如通過利用MessageFormat的選擇機制。我也很想嘗試Mozilla的新L20n方法,但目前沒有PHP實現。 (順便說一下,我是一個巨大的Gettext粉絲。) – Boldewyn