jsf-国際化情報


JSFの国際化(Internnation alization)情報処理はJavaの国際化支援に基づいています。メッセージリソースを情報リソースモードで統一的に管理することができます。リソースファイルの名前は。propertiesです。コンテンツは名前と値のペアです。例えば:
  • messages.properties
  •  
    titleText=JSF Demo
    hintText=Please input your name and password
    nameText=name
    passText=password
    commandText=Submit

      リソースファイル名はbasenameに言語と地域を加えて構成されています。例えば、
  • 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
  •  
    titleText=JSF
    hintText=
    nameText=
    passText=
    commandText=

      その後、JDKのツールプログラムを使用して、例えば、native 2 asciiを変換します。
     
    native 2 ascii-encoding Big 5 messages_zhTW.txtメッセージ_zhTW.properties
      変換後の内容は以下の通りです。
  • メッセージzhTW.properties
  •  
    titleText=JSF\u793a\u7bc4
    hintText=\u8acb\u8f38\u5165\u540d\u7a31\u8207\u5bc6\u78bc
    nameText=\u540d\u7a31
    passText=\u5bc6\u78bc
    commandText=\u9001\u51fa

      次にタグを使用してメッセージリソースをロードすることを指定します。一例は以下の通りです。
  • index.jsp
  •  
    <%@ 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に设定します。
      local属性を設定し、使用する語族を直接指定します。例えば、
     
    <f:view locale="zh_TW">
    <f:loadBundle basename="messages" var="msgs"/>

      以上を直接指定すると、繁体字中国語で表示されますが、JSFは<f:loadBundle>のbasename属性にのlocall属性を加えてどのメッセージリソースファイルを使うかを決定します。zhTW.propertiesは、以下のように設定すると、messages(u)を使います。はい、properties:
     
    <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>