Пример интернационализации JSF 2
В приложении JSF вы можете программно изменить локаль приложения следующим образом:
//this example change locale to france
FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale('fr');
Это делает поддержку JSF для интернационализации или нескольких языков легко.
Полный пример интернационализации JSF
В этом руководстве мы покажем вам веб-приложение JSF 2.0, которое отображает страницу приветствия, получает приветственное сообщение из файла свойств и динамически изменяет приветственное сообщение в зависимости от выбранного языка.
1. Папка проекта
Структура каталогов для этого примера.

2. Файл свойств
Вот два файла свойств для хранения сообщений на английском и китайском языках.
welcome.properties
welcome.jsf = Happy learning JSF 2.0
welcome_zh_CN.properties
welcome.jsf = \u5feb\u4e50\u5b66\u4e60 JSF 2.0
Note
Для UTF-8 или неанглийских символов, например китайских, вы должны кодировать их с помощью инструментаnative2ascii.
3. faces-config.xml
Включите указанный выше файл свойств в приложение JSF и объявите «en» в качестве локали приложения по умолчанию.
faces-config.xml
en com.example.welcome msg
4. Управляемый Боб
Управляемый компонент, предоставляющий список выбора языка и прослушиватель события изменения значения для программного изменения языка.
LanguageBean .java
package com.example;
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
@ManagedBean(name="language")
@SessionScoped
public class LanguageBean implements Serializable{
private static final long serialVersionUID = 1L;
private String localeCode;
private static Map countries;
static{
countries = new LinkedHashMap();
countries.put("English", Locale.ENGLISH); //label, value
countries.put("Chinese", Locale.SIMPLIFIED_CHINESE);
}
public Map getCountriesInMap() {
return countries;
}
public String getLocaleCode() {
return localeCode;
}
public void setLocaleCode(String localeCode) {
this.localeCode = localeCode;
}
//value change event listener
public void countryLocaleCodeChanged(ValueChangeEvent e){
String newLocaleValue = e.getNewValue().toString();
//loop country map to compare the locale code
for (Map.Entry entry : countries.entrySet()) {
if(entry.getValue().toString().equals(newLocaleValue)){
FacesContext.getCurrentInstance()
.getViewRoot().setLocale((Locale)entry.getValue());
}
}
}
}
5. Страница JSF
Страница JSF для отображения приветственного сообщения из файла свойств и добавления прослушивателя события изменения значения в раскрывающийся список.
JSF 2 internationalization example
Language :
6. Demo
По умолчанию языковой стандарт - английский.

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

Скачать исходный код
Скачать -JSF-2-Internationalization-Example.zip (11 КБ)