JSF 2国際化の例
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 言語]