当我读到 Gettext和 ICU MessageFormat ,两者总是被描述为对立的本地化方法。
但我认为,将两者结合起来会是一个有趣的想法:使用 MessageFormat 进行格式化,使用 Gettext 根据语言选择正确的模板。沿着以下路线:
setlocale(LC_ALL, lang)
output = MessageFormat(lang, gettext("There is {number 1} Foo in bar."), [1])
这种方法有明显(或不那么明显)的缺点吗?我是否缺少 MessageFormat 的核心部分,否则如何选择已翻译的模板?
最佳答案
您的方法的明显问题是如何处理复数形式。尽管 ICU 内置了对 CLDR's plural rules 的支持,它不像 gettext 使用的那样容易和灵活。
基本上,在 gettext 中,翻译人员可以根据需要添加任意数量的复数形式,这由 .po 文件头中的选择规则控制。它比使用 CLDR 规则(根据 CLDR 版本可能不正确)更灵活、更正确。
关于internationalization - 结合使用 Gettext 和 ICU MessageFormat 是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13734622/