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

grails中是否有标准的方法来管理属性文件中国际字符串中的复数?,grails,internationalization,Grails,Internationalization,使用国际插件,是否有合适的方法动态地将单词复数化,或选择属性的复数版本?您可以在i18n消息中使用嵌入式ChoiceFormat。使用中的示例,您可以定义如下内容: numfiles.message = "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}." 那么在普惠制中: <g:message code="numfiles.message" args="[numfiles]"

使用国际插件,是否有合适的方法动态地将单词复数化,或选择属性的复数版本?

您可以在i18n消息中使用嵌入式ChoiceFormat。使用中的示例,您可以定义如下内容:

numfiles.message = "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}."
那么在普惠制中:

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

其中numfiles是一个整数值。

正如@Overzeous在评论中所注意到的,并非所有语言都有与英语相同的简单复数规则。英语只有两种形式:一种数量是1,例如1辆车,1小时;另一种数量超过1,例如3辆车,11小时。在这种情况下,可以使用ChoiseFormat在Grails中非常简单地处理多重化。然而,有些语言有两种以上的形式,例如波兰语有4种形式:一种如1自动,少数如2 auta,许多如6 aut和其他。到描述所有语言复数规则的表格

我还写了一篇文章,使用上表添加了丰富的多元化能力。使用它,您只需在messages.properties中编写即可

然后使用它:

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

将打印3 auta。

仅供参考:并非所有语言都有,因此根据您的自然语言要求,这可能比您最初想象的困难得多。
<g:message code="msgcode" args="[3]"/>