Internationalization 用两个复数词使句子国际化
使用gettext如何使包含多个数值变量的句子可翻译?ngettext只接受一个数字作为复数参数 以下句子中应允许的排列是成人和儿童、成人和儿童、成人和儿童以及成人和儿童Internationalization 用两个复数词使句子国际化,internationalization,gettext,plural,Internationalization,Gettext,Plural,使用gettext如何使包含多个数值变量的句子可翻译?ngettext只接受一个数字作为复数参数 以下句子中应允许的排列是成人和儿童、成人和儿童、成人和儿童以及成人和儿童 从可用性from to availability to for NUMADULTS成人和儿童的语法在英语以外的其他一些语言中可能非常复杂,您应该知道,使用您的方法生成正确的复杂句子实际上是不可能的 记住,多个变量和类型男性/女性也会增加很多复杂性 解决方案是只生成只有一个变量的简单句子。ngettext支持这种情况 要明白ng
从可用性from to availability to for NUMADULTS成人和儿童的语法在英语以外的其他一些语言中可能非常复杂,您应该知道,使用您的方法生成正确的复杂句子实际上是不可能的 记住,多个变量和类型男性/女性也会增加很多复杂性 解决方案是只生成只有一个变量的简单句子。ngettext支持这种情况
要明白ngettext是一个伟大的东西,而这是bug软件公司的大多数商业i18n框架甚至都不支持的东西。尽管如此,它也有他的局限性,所以很快你的问题的解决方案就是将你的复杂句子分成几个简单的句子,这些句子只能用一个变量来翻译。我只想补充一点,即使只有一个复数形式,这样做也需要4个字符串。一个代表两个部分的单数,一个代表两个部分的复数,一个代表第一个单数和第二个复数,另一个代表另一个。Gettext甚至不支持这一点,而且制作这样的东西会太复杂而无法使用。我希望这不是答案,但认为可能是:这不是不可能的,它可以通过在消息中使用多层嵌套轻松完成,这是ICU使用的方法。ngettext不是很好,它是有缺陷的,因为它只允许一级嵌套,所以它只能处理一个变量的选择。把句子分成几个句子的建议是不好的,但这是gettext唯一可能的建议。您在代码中以A+B+C的形式加入部分,但在目标语言中这是不正确的,必须是C+A+B或C的一部分,应该先加入,依此类推。有人对这方面有什么建议吗?我喜欢Zend_Translate让我使用有序变量的方式,这非常重要,因为语言的顺序不同,正如Basel所指出的。我正在将我的站点从array转换为gettext,不想在整个站点中添加四重嵌套。我只是想弄清楚如何使gettext成为有序变量。思想?