Локализация JSF и плюрализация с использованием пакетов сообщений
Я использую пакет сообщений, чтобы локализовать вывод моего приложения. Теперь я хочу добавить множественное число, и мне интересно, есть ли способ добиться этого, используя файлы свойств сообщения вместе с параметрами сообщения?
Что-то вроде того:
<h:outputFormat value="#{msg['label.bean']}">
<f:param value="#{someBean.someProp.size()}" />
</h:outputFormat>
в результате:
0 бобов, 1 боб, 2 бобы, ...
Формат label.bean={0} bean
работает для подсчета, конечно, но как я могу получить множественное число "s" в зависимости от значения {0}
?
2 ответа
<h:outputFormat>
использования MessageFormat
под одеялом. Согласно его Javadoc, вы можете использовать ChoiceFormat
за это. Дальнейшее использование подробно объясняется в его Javadoc.
В вашем случае, следующий шаблон формата сообщения должен сделать это:
label.bean = {0} bean{0,choice,0#s|1#|1<s}
Вы можете сделать что-то вроде этого
<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