JSF 2国際化の例

JSF 2国際化の例

JSFアプリケーションでは、次のようにプログラムでアプリケーションのロケールを変更できます。

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

JSFは、国際化または複数言語を簡単にサポートします。

完全なJSF国際化の例

このチュートリアルでは、ウェルカムページを表示し、プロパティファイルからウェルカムメッセージを取得し、選択した言語に基づいてウェルカムメッセージを動的に変更するJSF 2.0 Webアプリケーションを紹介します。

1. プロジェクトフォルダ

この例のディレクトリ構造。

jsf2-internationalization-folder

2. プロパティファイル

以下に、英語と中国語のメッセージを保存する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. マネージドBean

言語選択リストを提供するマネージドBeanと、プログラムでロケールを変更する値変更イベントリスナー。

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(11KB)