internationalization - 结合使用 Gettext 和 ICU MessageFormat 是个好主意吗?

标签 internationalization gettext icu

当我读到 GettextICU 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/

相关文章:

java - 如何获取本地化的日期模式字符串?

javascript - 使用 Babel CLI 提取器提取 Javascript gettext 消息

c++ - ICU Unicode 正常与全角

string - ICU 中正确的标题大小写 [ICU 有非大写单词列表吗?]

php - 日期格式中的波兰月份

javascript - 在 vue.js 中使用语言环境前缀路由(使用 vue-i18n)

java - Apache struts国际化和本地化问题

java - Android Studio 错误 : "Method getText must be called from the UI Thread, 当前推断线程为工作线程

php - 如何在 Dreamweaver 或 Notepad++ 中创建宏/快捷方式

ubuntu - 在 Linux 中使用 Boost 1.50 语言环境编译的 ICU 问题