Язык JSF: язык, определенный браузером, кажется, игнорируется - PullRequest
3 голосов
/ 17 декабря 2010

В настоящее время моя команда разрабатывает приложение Web 2.0 на Java, и мы используем JSF для уровня представления. Мы начинаем с уровня представления, поэтому нам еще предстоит добавить уровень бизнеса и данных.

Технологии, которые мы используем: - JSF (Мохарра 2.0.3) - Primefaces 2.1 (библиотека компонентов JSF) - Spring Security 3.0.5 - jBoss 5.1

Меня попросили добавить поддержку локали в приложение. Поэтому я настроил файл Face-config.xml следующим образом:

<application>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>pt</supported-locale>
        <supported-locale>en</supported-locale>
        <supported-locale>es</supported-locale>
    </locale-config>
    <message-bundle>
        com.<company>.<product>.i18n.MessageBundle
    </message-bundle>
</application>

Я создал файлы с суффиксом MessageBundle и развернул приложение. Я прочитал, что есть 3 критерия, которые JSF использует для выбора локали: 1) соответствие между локалями запроса (заголовок запроса Accept-Language) и поддерживаемыми локалями 2) языковой стандарт приложения, определенный в файле конфигурации лиц 3) Язык по умолчанию JVM

Когда я пытаюсь изменить язык в настройках своего браузера, приложение не меняет локаль. Даже если я настрою только один язык, отличный от языка по умолчанию. Я что-то здесь упускаю? Это то, что ожидать или на самом деле это должно изменить содержание, когда я изменяю язык браузера (при условии, что это поддерживаемый язык)?

Я был бы очень признателен за любые подсказки или хотя бы указатель на то, где я мог найти ответ, увиденный, поскольку я уже гуглил его безуспешно.

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 17 декабря 2010

Вам необходимо обновить страницу в браузере после того, как вы измените локали, определенные браузером.Вы также должны понимать, что <message-bundle> предназначен для локализованных сообщений преобразования / проверки, а не для локализованного контента.Там вы должны использовать <resource-bundle> в faces-config.xml и / или <f:loadBundle> в XHTML для.

1 голос
/ 06 сентября 2011

В конце концов я выяснил, в чем проблема. Где-то внутри кода было объявление локали, по этой причине, независимо от того, какой язык я выбрал в своем браузере, представленный язык всегда будет одинаковым. Как только я удалил эту декларацию, все начало работать как положено.

Прошу прощения, что не опубликовал это раньше.

Также я хотел бы поблагодарить вас всех за ваши советы. Хотя ответа не было в них, я многому научился.

1 голос
/ 08 августа 2011

В дополнение к другим ответам я могу добавить следующее замечание: вам нужно создать столько языковых файлов, сколько существует определенных языков.Если у вас com.<company>.<product>.i18n.MessageBundle.properties без _xx расширения, сообщения внутри будут значениями по умолчанию для существующих файлов, но не для несуществующих файлов.Пример:

messages.properties (containing English)
messages_fr.properties (containing French)

Если вы объявите язык "en", сообщение на английском языке не будет отображаться!Вы должны создать:

messages.properties (containing default values not found in other files)
messages_en.properties (containing English)
messages_fr.properties (containing French)
0 голосов
/ 18 декабря 2010

Вы уверены, что у вас есть отдельные пакеты сообщений с именем:

com.<company>.<product>.i18n.MessageBundle_es and  com.<company>.<product>.i18n.MessageBundle_pt?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...