У меня есть эта строка

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

Оба inputText являются компонентом JSF h:inputText, у которых есть validator, onfocus, 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

Однако это решение не будет работать для компонента JSF, такого как h:inputText, поэтому кто-нибудь может предложить другое решение для этого. Спасибо

2
Thang Pham 19 Фев 2014 в 08:39
Почему бы вам не использовать атрибут 'render' в теге для его условного рендеринга?
 – 
Krsna Chaitanya
19 Фев 2014 в 18:39
@KrsnaChaitanya: Я думаю, вы неправильно поняли. Пожалуйста, перечитайте пост. Проблема заключается в различии грамматики и структуры предложений на разных языках. Правильное решение - это то, что LaurentG опубликовал ниже
 – 
Thang Pham
19 Фев 2014 в 21:40

1 ответ

Лучший ответ

Я не думаю, что есть простой способ сделать это только с 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
3
LaurentG 19 Фев 2014 в 08:45