Пример интернационализации JSF 2

Пример интернационализации JSF 2

В приложении JSF вы можете программно изменить локаль приложения следующим образом:

//this example change locale to france
FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale('fr');

Это делает поддержку JSF для интернационализации или нескольких языков легко.

Полный пример интернационализации JSF

В этом руководстве мы покажем вам веб-приложение JSF 2.0, которое отображает страницу приветствия, получает приветственное сообщение из файла свойств и динамически изменяет приветственное сообщение в зависимости от выбранного языка.

1. Папка проекта

Структура каталогов для этого примера.

jsf2-internationalization-folder

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

По умолчанию языковой стандарт - английский.

jsf2-internationalization-example-1

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

jsf2-internationalization-example-2

Скачать исходный код

Скачать -JSF-2-Internationalization-Example.zip (11 КБ)