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

…​.//this example change locale to france
FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(‘fr’);

国際化や複数言語のJSFサポートを容易にします。

===  JSF国際化の例の完成

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

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

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

image://wp-content/uploads/2010/11/jsf2-internationalization-folder.png[jsf2-internationalization-folder、title = "jsf2-internationalization-folder"、width = 327、height = 437]

===  2.プロパティファイル

英語と中国語のメッセージを格納する2つのプロパティファイルがあります。

__welcome.properties__

welcome.jsf = Happy learning JSF 2.0

__welcome__zh__CN.properties__

welcome.jsf = \u5feb\u4e50\u5b66\u4e60 JSF 2.0

** 注意**  UTF-8や英語以外の文字(中国語など)の場合は、link://java/java-convert-chinese-character-to-unicode-with-native2ascii/[native2ascii]ツールを使用してエンコードする必要があります。

===  3. faces-config.xml

上記のプロパティファイルをJSFアプリケーションに組み込み、デフォルトのアプリケーションロケールとして "en"を宣言します。

__faces-config.xml__

<?xml version=”1.0″ encoding=”UTF-8″?>
<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>
<locale-config>
<default-locale>en</default-locale>
</locale-config>
<resource-bundle>
<base-name>com.mkyong.welcome</base-name>
<var>msg</var>
</resource-bundle>
</application>
</faces-config>

===  4.マネージドBean

言語選択リストを提供するマネージドBean、およびプログラムによってロケールを変更するための値変更イベントリスナー。

__LanguageBean .java__

package com.mkyong;

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<String,Object> countries;
static{
    countries = new LinkedHashMap<String,Object>();
    countries.put("English", Locale.ENGLISH);//label, value
    countries.put("Chinese", Locale.SIMPLIFIED__CHINESE);
}

public Map<String, Object> 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<String, Object> entry : countries.entrySet()) {

if(entry.getValue().toString().equals(newLocaleValue)){

FacesContext.getCurrentInstance()
    .getViewRoot().setLocale((Locale)entry.getValue());

          }
           }
}

}

===  5. JSFページ

プロパティー・ファイルからウェルカム・メッセージを表示し、値変更イベント・リスナーをドロップダウン・ボックスに添付するJSFページ。

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”
xmlns:h=”http://java.sun.com/jsf/html”
xmlns:f=”http://java.sun.com/jsf/core”
xmlns:ui=”http://java.sun.com/jsf/facelets”
>

<h:body>

<h1>JSF 2 internationalization example</h1>

<h:form>

<h2>
    <h:outputText value="#{msg['welcome.jsf']}"/>
</h2>

<h:panelGrid columns="2">

Language :
<h:selectOneMenu value="#{language.localeCode}" onchange="submit()"
    valueChangeListener="#{language.countryLocaleCodeChanged}">
    <f:selectItems value="#{language.countriesInMap}"/>
</h:selectOneMenu>

</h:panelGrid>

</h:form>

    </h:body>
</html>

===  6.デモ

URL:__http://localhost:8080/JavaServerFaces/faces/default.xhtml__

デフォルトでは、ロケール英語が表示されます。

image://wp-content/uploads/2010/11/jsf2-internationalization-example-1.png[jsf2-internationalization-example-1、title = "jsf2-internationalization-example-1"、width = 640、height = 302]

ユーザーがドロップダウンボックス言語を変更すると、値変更イベントリスナーが起動し、それに従ってアプリケーションロケールが変更されます。

image://wp-content/uploads/2010/11/jsf2-internationalization-example-2.png[jsf2-internationalization-example-2、title = "jsf2-internationalization-example-2"、width = 639、height = 313]

=== ソースコードをダウンロードする

ダウンロード - リンク://wp-content/uploads/2010/11/JSF-2-Internationalization-Example.zip[JSF-2-国際化 - サンプル.zip](11KB)

=== リファレンス

.  link://jsf2/jsf-2-0-and-resource-bundles-example/[リソースバンドルin

JSF 2.0]。 http://download.oracle.com/javase/tutorial/i18n/locale/create.html[Create

ロケール(Oracleチュートリアル)]。 link://spring-mvc/spring-mvc-internationalization-example/[Spring MVC

国際化の例]。 http://www.w3.org/International/O-HTTP-charset[W3C charset]

link://tag/jsf2/[jsf2]link://タグ/複数言語/[multiple
言語]