jsf-国際化情報
JSFの国際化(Internnation alization)情報処理はJavaの国際化支援に基づいています。メッセージリソースを情報リソースモードで統一的に管理することができます。リソースファイルの名前は。propertiesです。コンテンツは名前と値のペアです。例えば: messages.properties basename.properties basename_ン.properties basename_zhTW.properties 言語と地域を指定していないbasenameは予め設定されたリソースファイル名です。JSFは、ブラウザから送られてきたAccept-Language headerの内容によって、どのリソースファイル名を使うべきかを決定します。例えば、
Acceept-Language:zh_TW,en-US,en
もしブラウザからこれらのheaderが送られてきたら、繁体字中国語を使って、アメリカ英語に続き、英語で対応する情報リソースファイルが見つからなかったら、予め設定された情報リソースファイルを使います。
情報リソースはISO-859-1コードでなければなりませんので、非西洋語系の処理については、まずJava Unicode Escapeフォーマットに変換しなければなりません。メッセージzhTW.txt
native 2 ascii-encoding Big 5 messages_zhTW.txtメッセージ_zhTW.properties
変換後の内容は以下の通りです。メッセージzhTW.properties タグを使用してメッセージリソースをロードすることを指定します。一例は以下の通りです。 index.jsp
local属性を設定し、使用する語族を直接指定します。例えば、のlocall属性を加えてどのメッセージリソースファイルを使うかを決定します。zhTW.propertiesは、以下のように設定すると、messages(u)を使います。はい、properties:
もちろん、ユーザーに自分の語族を選択させるオプションを提供してもいいです。例えば、userというBeanのlocall属性によってページ語族を決定します。
titleText=JSF Demo
hintText=Please input your name and password
nameText=name
passText=password
commandText=Submit
リソースファイル名はbasenameに言語と地域を加えて構成されています。例えば、Acceept-Language:zh_TW,en-US,en
もしブラウザからこれらのheaderが送られてきたら、繁体字中国語を使って、アメリカ英語に続き、英語で対応する情報リソースファイルが見つからなかったら、予め設定された情報リソースファイルを使います。
情報リソースはISO-859-1コードでなければなりませんので、非西洋語系の処理については、まずJava Unicode Escapeフォーマットに変換しなければなりません。
titleText=JSF
hintText=
nameText=
passText=
commandText=
その後、JDKのツールプログラムを使用して、例えば、native 2 asciiを変換します。native 2 ascii-encoding Big 5 messages_zhTW.txtメッセージ_zhTW.properties
変換後の内容は以下の通りです。
titleText=JSF\u793a\u7bc4
hintText=\u8acb\u8f38\u5165\u540d\u7a31\u8207\u5bc6\u78bc
nameText=\u540d\u7a31
passText=\u5bc6\u78bc
commandText=\u9001\u51fa
次に
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@page contentType="text/html;charset=UTF-8"%>
<f:view>
<f:loadBundle basename="messages" var="msgs"/>
<html>
<head>
<title><h:outputText value="#{msgs.titleText}"/></title>
</head>
<body>
<h:form>
<h3><h:outputText value="#{msgs.hintText}"/></h3>
<h:outputText value="#{msgs.nameText}"/>:
<h:inputText value="#{user.name}"/><p>
<h:outputText value="#{msgs.passText}"/>:
<h:inputSecret value="#{user.password}"/><p>
<h:commandButton value="#{msgs.commandText}"
actionListener="#{user.verify}"
action="#{user.outcome}"/>
</h:form>
</body>
</html>
</f:view>
このようにすると、ブラウザが設定されている場合は、zh_を受け付けます。TW语系なら、ページ上に中国语が表示されます。そうでなければ、设定は英语で表示されます。つまり、messages.propertiesの内容です。多国语系を表示するために、ウェブページのコードをUTF 8に设定します。
<f:view locale="zh_TW">
<f:loadBundle basename="messages" var="msgs"/>
以上を直接指定すると、繁体字中国語で表示されますが、JSFは<f:loadBundle>のbasename属性に
<f:view locale="en">
<f:loadBundle basename="messages" var="msgs"/>
例えば、faces-config.xmlで語族を設定することもできます。
<faces-config>
<application>
<local-config>
<default-locale>en</default-locale>
<supported-locale>zh_TW</supported-locale>
</local-config>
</application>
.....
</faces-config>
「local-config」には必ず「default-local」があります。「supported-locall」はいくつかあります。これはJSFの応用プログラムがどのような語を支援するかを教えてくれます。もちろん、ユーザーに自分の語族を選択させるオプションを提供してもいいです。例えば、userというBeanのlocall属性によってページ語族を決定します。
<f:view locale="#{user.locale}">
<f:loadBundle basename="messages" var="msgs"/>
ページでフォームを設定すると、ユーザーに語族を選択させることができます。例えば、ラジオボタンを設定します。
<h:selectOneRadio value="#{user.locale}">
<f:selectItem itemValue="zh_TW"
itemLabel="#{msgs.zh_TWText}"/>
<f:selectItem itemValue="en"
itemLabel="#{msgs.enText}"/>
</h:selectOneRadio>