2012-08-16 84 views
1

我正在使用消息包来本地化我的应用程序的输出。现在我想添加多元化,我想知道是否有一种方法可以通过使用消息属性文件和消息参数来实现这一点?使用消息包的JSF本地化和多元化

类似的东西:

<h:outputFormat value="#{msg['label.bean']}"> 
    <f:param value="#{someBean.someProp.size()}" /> 
</h:outputFormat> 

导致:

0豆,豆1,2种豆类,...

格式label.bean={0} bean作品计数当然,但我怎么得到复数“S”取决于{0}的值?

回答

1

你可以做这样的事情

<ui:param name="plu" value="#{(someBean.someProp.size() eq 1)?'single_key':'multi_key'}"/> 

<h:outputFormat value="#{msg[plu]}"> 
    <f:param value="#{someBean.someProp.size()}" /> 
</h:outputFormat> 

在标签看起来像这样

single_key= {0} bean 

multi_key= {0} beans 
+0

是的,这就是我此刻在做什么。只是想知道,如果没有更好的方法来实现这一目标。像调用 #msg [key,param]和定义key =(param == 1)?singular:复数 – dognose 2012-08-16 12:46:46

+0

这太笨拙了。 – BalusC 2012-08-16 14:12:55

2

<h:outputFormat>底层使用MessageFormat。根据它的javadoc,你可以使用ChoiceFormat这个。其他用法在javadoc中有详细说明。

在你的情况,下面的消息格式模式应该这样做:

label.bean = {0} bean{0,choice,0#s|1#|1<s}