使用国际插件,是否有“正确”的方式动态复数字,或选择属性的复数形式?
答案 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)和other
。 Here 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
。