5

当我读到GettextICU MessageFormat时,它们总是被描述为对立的本地化方法。

但我认为,将两者结合起来会是一个有趣的想法:使用 MessageFormat 进行格式化,使用 Gettext 根据语言选择正确的模板。沿着:

setlocale(LC_ALL, lang)
output = MessageFormat(lang, gettext("There is {number 1} Foo in bar."), [1])

这种方法有明显(或不那么明显)的缺点吗?我是否错过了 MessageFormat 关于如何选择翻译模板的核心部分?

4

1 回答 1

4

您的方法的明显问题是如何处理复数形式。虽然 ICU 内置了对CLDR 的复数规则的支持,但它不像 gettext 使用的那样简单和灵活。
基本上,在 gettext 中,翻译者可以根据需要添加尽可能多的复数形式,并且由 .po 文件头中的选择规则控制。它比使用 CLDR 规则(根据 CLDR 版本可能不正确)更灵活、更正确。

于 2012-12-06T10:29:01.727 回答