2011-04-22 55 views
12

使用國際插件,是否有一種「適當」的方式來動態複用單詞,或選擇複數版本的屬性?Grails中是否有標準的方法來管理屬性文件中國際字符串的複數形式?

+1

只是一個簡單的說明:並非所有的語言都有[只有兩個數量標識符](http://en.wikipedia.org/wiki/Plural#Other_languages),所以這可能比你想象的要困難得多,取決於你的自然語言要求。 – OverZealous 2011-08-11 05:43:06

回答

19

您可以在i18n消息中使用嵌入的ChoiceFormat。在GSP

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

然後:使用從the java.text.MessageFormat Javadocs一個例子,你可以定義類似

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

numfiles是一個整數值。

1

作爲@overzealous在評論中已經注意到,並非所有語言都有與英語相同的簡單複數規則。英語只有兩種形式:one(數量爲1,例如1輛車,1小時)和other(數量大於1,例如3輛車,11小時)。在這種情況下,在Grails中使用ChoiseFormat可以非常簡單地處理複數化。然而,一些語言具有兩種以上形式,例如波蘭語具有4種形式:one(例如1汽車),few(例如2汽車),many(例如6汽車)和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

相關問題