当我读到Gettext和ICU MessageFormat时,两者都被描述为反对本地化的方法。
但我认为,两者的结合将是一个有趣的想法:使用MessageFormat进行格式化,使用Gettext根据语言选择正确的模板。沿着:
setlocale(LC_ALL, lang)
output = MessageFormat(lang, gettext("There is {number 1} Foo in bar."), [1])
这种方法有明显的(或不那么明显的)缺点吗?我是否错过了MessageFormat的中心部分,关于如何选择翻译的模板?
答案 0 :(得分:3)
您的方法的明显问题是如何处理复数形式。尽管ICU内置了对CLDR's plural rules的支持,但它并不像gettext正在使用的那样容易和灵活。
基本上,在gettext中,翻译者可以根据需要添加多个复数形式,并且它由.po文件头中的选择规则控制。与使用CLDR规则相比,它更灵活,更正确(根据CLDR版本可能不正确)。