Локализация приложения

Локализация интерфейса JSF касается как интерфейса, так и собственных сообщений и сообщений валидаторов. В разделе "Основы Java" вопросу локализации интерфейса и подготовки ресурсных файлов посвящена отдельная страница.

Локализация сообщений валидатора

Сообщения валидатора для различных локалей (locale) располагаются в ресурсных файлах Messages_xx.properties (javax.faces-xxx.jar). К сожалению в JSF отсутствует ресурсный файл Messages_ru.properties с русским языком.

Собственные ресурсные файлы можно создать на основе Messages.properties, используемого по умолчанию, в который включить локализованные сообщения, и добавить его в архивный файл javax.faces-xxx. Но правильнее, конечно, научиться подключать собственный ресурсный файл к приложению. Чем мы и займемся в данной статье.

Для подключения ресурсного файла локализации сообщений валидатора необходимо в файле конфигурации faces-config.xml добавить следующие строки кода :

<application>
    <message-bundle>common.i10n.Messages</message-bundle>

    <locale-config>
        <default-locale>ru_RU</default-locale>
        <supported-locale>en_US</supported-locale>
    </locale-config>
	
</application>

В данном файле конфигурации к приложению подключаются ресурсные файлы (common.i10n.Messages.properties, common.i10n.Messages_en.properties, common.i10n.Messages_ru.properties). Наименование ресурсных файлов может быть другим.

В тегах <locale-config> определяются поддерживаемая и используемая по умолчанию локаль. Можно сократить наименование locale, т.е. не указывать страну ru, en.

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

FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale("ru"));

Можно было бы, конечно, и в файле конфигурации указать поддерживаемую локаль и локаль по умолчанию как 'ru'. Это тоже срабатывало.

Локализация интерфейса - f:view, f:loadBundle

Для локализации интерфейса страниц также, как и для сообщений валидаторов, необходимо создать ресурсные файлы и загрузить их в приложение. Для загрузки ресурсного файла и определения переменной, через которую можно обращаться к свойства файла, необходимо использовать тег <f:loadBundle> :

<f:loadBundle basename="common.i10n.resources" var="resources"/>

Определение же локали выполняется в теге <f:view> :

<f:view locale="#{configManager.locale}">
    <f:loadBundle basename="common.i10n.resources" var="resources" />
    <h:outputText value="#{resources.['text.login']}" />
    <h:commandButton value="#{resources.button}" />
</f:view>

Определенную locale можно указать и следующим образом

<f:view locale="ru">
 ...
</f:view>

Локализация в настройках приложения, resource-bundle

В представленным выше коде через тег <f:loadBundle> ресурсный файл загружается для отдельной страницы. Но можно определить ресурсный файл и в настройках приложения faces-config.xml :

<application>
    <resource-bundle>
        <base-name>common.i10n.resources</base-name>
        <var>resources</var>
    </resource-bundle>
</application>

При обращении к ресурсному файлу необходимо использовать его alias, определенный в теге <var>

<h:outputText value="#{resources.['text.login']}" />
<h:commandButton value="#{resources.buttonAdd}" action="#{registrationBean.addUser}" />
  Рейтинг@Mail.ru