Internationalization 用两个复数词使句子国际化

Internationalization 用两个复数词使句子国际化,internationalization,gettext,plural,Internationalization,Gettext,Plural,使用gettext如何使包含多个数值变量的句子可翻译?ngettext只接受一个数字作为复数参数 以下句子中应允许的排列为“成人与儿童”、“成人与儿童”、“成人与儿童”和“成人与儿童” “from#availability from to#availability to for#NUMADULTS成人和#NUMCHILDREN儿童”语法在英语以外的一些其他语言中可能非常复杂,您应该意识到,使用您的方法生成正确的复杂句子实际上是不可能的 记住,多变量和类型(男性/女性)也会增加很多复杂性 解决方案

使用gettext如何使包含多个数值变量的句子可翻译?ngettext只接受一个数字作为复数参数

以下句子中应允许的排列为“成人与儿童”、“成人与儿童”、“成人与儿童”和“成人与儿童”


“from#availability from to#availability to for#NUMADULTS成人和#NUMCHILDREN儿童”

语法在英语以外的一些其他语言中可能非常复杂,您应该意识到,使用您的方法生成正确的复杂句子实际上是不可能的

记住,多变量和类型(男性/女性)也会增加很多复杂性

解决方案是只生成只有一个变量的简单句子。
ngettext
支持这种情况


要明白ngettext是一个伟大的东西,而这是bug软件公司的大多数商业i18n框架甚至都不支持的东西。尽管如此,它也有他的局限性,所以很快你的问题的解决方案是把你的复杂句子分成几个简单的句子,这些句子只能用一个变量翻译。

我只想补充一点,即使只有一个复数形式,这种方法也需要4个字符串。一个代表两个部分的单数,一个代表两个部分的复数,一个代表第一个单数和第二个复数,另一个代表另一个。Gettext甚至不支持这一点,而且制作这样的东西会太复杂而无法使用。我希望这不是答案,但认为可能:)这不是不可能的,可以通过在消息中使用多层嵌套轻松完成,这是ICU使用的方法。ngettext不是很好,它是有缺陷的,因为它只允许一级嵌套,所以它只能处理一个变量的选择。把句子分成几个句子的建议是不好的,但这是gettext唯一可能的建议。您在代码中以A+B+C的形式加入部分,但在目标语言中这是不正确的,必须是C+A+B或C的一部分,应该先加入,依此类推。有人对这方面有什么建议吗?我喜欢Zend_Translate让我使用有序变量的方式(正如Basel所指出的,这非常重要,因为语言的顺序不同)。我正在将我的站点从“array”转换为“gettext”,不想在整个站点中添加四重嵌套。我只是想弄清楚如何使gettext成为有序变量。思想?