有条件地将JSF组件添加到翻译字符串中

时间:2014-02-19 04:39:01

标签: java jsf jsf-2

我有这个字符串

The [inputText 1] is using for [inputText 2] days

两个inputText都是h:inputTextvalidatoronfocus ......

的JSF组件value

问题在于翻译。所以说,我想翻译上面的字符串,它会做这样的事情

#{ifn:translate('The')}
<h:inputText value="#{myBean.val1}" validator="#{myBean.validator1}" />
#{ifn:translate('is.using.for')}
<h:inputText value="#{myBean.val2}" validator="#{myBean.validator2}" />
#{ifn:translate('days')}

然而,这些并不适用于日语翻译。首先,在日语中,没有The。其次,inputText的位置仅对英语有意义,但对于日语,inputText需要是其他位置。我看到的一个解决方案是将html组件嵌入.properties文件中的翻译字符串中,就像这样

label_en.properties

my.String=The <input >{0}</input> is using for <input >{1}</input> days

label_jp.properties

my.String=<input >{0}</input> XXX XXX XXX <input >{1}</input> XXX XXX XXX

但是,此解决方案不适用于h:inputText等JSF组件,因此任何人都可以为此提出另一种解决方案。谢谢

1 个答案:

答案 0 :(得分:3)

我认为只有使用JSF的简单方法(除了创建自己的组件之外)。

在这种情况下,我会使用OmniFaces来解决问题:

<h:outputFormat value="#{label['my.String']}" escape="false">
    <o:param><h:inputText value="#{myBean.val1}" validator="#{myBean.validator1}" /></o:param>
    <o:param><h:inputText value="#{myBean.val2}" validator="#{myBean.validator2}" /></o:param>
</h:outputFormat>

label_en.properties:

my.String = The {0} is using for {1} days