在grails中是否有标准的方法来管理属性文件中的国际字符串中的复数?

时间:2011-04-22 19:30:09

标签: grails internationalization

使用国际插件,是否有“正确”的方式动态复数字,或选择属性的复数形式?

2 个答案:

答案 0 :(得分:21)

您可以在i18n消息中使用嵌入式ChoiceFormat。使用the java.text.MessageFormat Javadocs中的示例,您可以定义类似:

numfiles.message = "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}."

然后在你的GSP中:

<g:message code="numfiles.message" args="[numfiles]"/>

numfiles是整数值。

答案 1 :(得分:1)

正如@overzealous在评论中所注意到的,并非所有语言都具有与英语相同的简单复数规则。英语只有两种形式:one(数量为1,例如1辆车,1小时)和other(数量大于1,例如3辆车,11小时)。在这种情况下,使用ChoiseFormat在Grails中可以非常简单地处理复数化。但是,有些语言有两种以上的形式,例如波兰语有4种形式:one(例如1 auto),few(例如2 auta),many(例如6 aut)和otherHere is a link到描述所有语言的复数规则的表格。

我还写了a plugin for Grails,它使用上面的表格增加了丰富的复数能力。使用它,您只需写入messages.properties

msgcode={0} {0, plural, one{auto}few{auta}many{aut}other{aut}}

然后使用它:

<g:message code="msgcode" args="[3]"/>

将打印3 auta