Допустим, у вас есть следующие два файла сообщений
messages.properties
messages_de.properties
Настройка локали приложения
Существует три способа установки локали приложения, и я думаю, вам нужен первый здесь.
1-Вы можете разрешить браузеру выбирать язык.
Установить стандартные и поддерживаемые локали в WEB-INF/faces-config.xml:
<faces-config>
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>de</supported-locale>
</locale-config>
</application>
</faces-config>
Когда браузер подключается к вашему приложению, он обычно включает значение Accept-Language в заголовке HTTP
2 - Вы можете установить локаль программно.
Вызовите метод setLocale объекта UIViewRoot:
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
viewRoot.setLocale(new Locale("de"));
3-Вы можете установить локаль для отдельной страницы
Используя элемент f:view
с атрибутом locale, например:
<f:view locale="de">
Локаль может быть установлена динамически:
<f:view locale="#{user.locale}"/>
Объявление пакетов сообщений
Теперь, когда языковой стандарт установлен, вы можете использовать один из следующих двух способов объявления пакетов сообщений
1-Via Face-Config
Самый простой способ - предоставить файл с именемface-config.xml в каталог WEB-INF вашего приложения со следующим содержимым:
<?xml version="1.0"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<application>
<resource-bundle>
<base-name>com.corejsf.messages</base-name>
<var>msgs</var>
</resource-bundle>
</application>
</faces-config>
2-На каждой странице JSF, к которой требуется доступ.
Вместо того чтобы использовать глобальное объявление пакета ресурсов, вы можете добавить элемент f: loadBundle к каждой странице JSF, для которой требуется доступ к пакету, например:
<f:loadBundle basename="com.corejsf.messages" var="msgs"/>
В любом случае сообщения в комплекте доступны через переменную карты с именем msgs.
Отображение соответствующей метки на кнопке
Теперь допустим, что файл свойств по умолчанию, т.е. в английском есть свойство
next=Next
и у немца есть эквивалент, т.е.
next=Weiter
И вы установили локаль и объявили пакет сообщений, к которому вы можете получить доступ, чтобы поставить метку на командную кнопку, например
<h:commandButton value="#{msgs.next}"/>
Вышеуказанный ответ извлечен и изменен из Книга Hortsmen Core Java Server Faces .