JSFでのローカライズ・データおよびメッセージの使用について

コードで直接ローカライズ文字列を作成するかわりに、文字列を含んだリソース・バンドルを作成し、対応するキーを使用してバンドル内の文字列を参照できます。アプリケーションでサポートされているロケールは、そのロケールをアプリケーションの構成ファイルに指定することでJSFに通知できます。ローカライズ・リソースを参照するために、JSFでは、現行FacesContextUIViewRootlocaleプロパティの値として格納されているアクティブ・ロケールが使用されます。

ローカライズされた静的メッセージおよびデータ文字列(例: フィールド・ラベルおよびボタン・テキスト)を作成および使用するために、次の処理を実行できます。

ローカライズ・リソース・バンドルの作成

リソース・バンドルには、メッセージおよびデータ文字列に対するキーと値のペアが含まれています。リソース・バンドル(アプリケーションのクラスパスに格納)は、PropertyResourceBundleに基づくテキスト・ファイル、またはListResourceBundleを拡張するクラスです。このトピックの例では、プロパティ・リソース・バンドルが使用されています。

ローカライズ・リソース・バンドルは、適切なロケール文字列表現をベース名に付加することで作成されます。たとえば、ベース・ファイル名がApplicationMessages.propertiesの場合、ローカライズ・バンドルはApplicationMessages_es.propertiesです。リソース・バンドルおよびローカライズの詳細は、java.util.ResourceBundleに関するJavadoc、およびInternationalization(I18N)に関するSun Developer Networkサイトを参照してください。URLは次のとおりです。

http://java.sun.com/j2se/corejava/intl/index.jsp

たとえば、次に示すキーと値のペアをApplicationMessages.propertiesに指定するとします。

com.mycompany.mydivision.INVALID_USER_NAME=Your user name is incorrect. Please try again.
com.mycompany.mydivision.INVALID_LOGIN=Login failure! Please try again.
com.mycompany.mydivision.loginButtonLabel=Login
com.mycompany.mydivision.loginInputLabel=Enter name 
com.mycompany.mydivision.loginPwLabel=Enter password    

ヒント: 名前が競合しないように、キーの接頭辞には逆ドメイン名規則を使用してください。

さらに、次のキーと値のペアをApplicationMessages_es.propertiesに指定します。

javax.faces.component.UIInput.REQUIRED=Some Spanish text.
javax.faces.component.UIInput.REQUIRED_detail=More Spanish text.
com.mycompany.mydivision.INVALID_USER_NAME=Some Spanish text.
com.mycompany.mydivision.INVALID_LOGIN=Some Spanish text.
com.mycompany.mydivision.loginButtonLabel=Conexión
com.mycompany.mydivision.loginInputLabel=Identificacion del usuario 
com.mycompany.mydivision.loginPwLabel=Contraseña    

注意: 変換および検証エラーに対するJSF標準メッセージは英語で提供されています。これらの標準エラー・メッセージのローカライズ・バージョンをリソース・ファイルで提供するには、キーと値のペアに標準メッセージ・キーを使用して、英語のテキストをローカライズ・テキストで置換してください。JSF標準メッセージをオーバーライドする方法の詳細は、「JSF標準メッセージに対するカスタム・メッセージ・テキストについて」を参照してください。

アプリケーションへのサポート・ロケールの登録

アプリケーションに対してサポートされているロケールを登録します。JSF構成エディタを使用して、アプリケーション構成ファイルfaces-config.xmlを開きます。<local-config>要素および<supported-locale>サブ要素を追加します。

次のコード・スニペットは、アプリケーションに対するデフォルト・ロケールおよびサポート・ロケールを宣言する方法を示しています。

<faces-config>
  <application>
    ...
    <locale-config>
      <default-locale>en</default-locale>
      <supported-locale>en-us</supported-locale>
      <supported-locale>fr</supported-locale>
      <supported-locale>es</supported-locale>
    </locale-config>
    ...
  </application>
  ...
</faces-config>    

JSFページでのリソース・バンドルの参照

JSFページで、f:loadBundleタグを使用して、リソース・バンドルをマップにロードします。

次に例を示します。

...
 <f:loadBundle basename="model.login.ApplicationMessages" var="loginBundle"/>
...    

basenameはリソース・バンドルの完全修飾クラス名、varは任意のマップ変数名です。

このタグによって、FacesContextに格納されているロケールに従って適切なリソース・バンドルがロードされます。リソース・バンドルをマップにロードすると、次の項に示すように、JSF EL式を使用してプロパティ・ファイル内の値をキーで参照できます。

ローカライズ・メッセージまたはデータの参照

JSFページでローカライズ文字列を参照するには、#{bundle.key}などの値バインディング式を使用します。bundlef:loadBundle内のvar属性の値、keyはリソース・バンドルに定義されているメッセージ文字列のキーです。次に例を示します。

...
<h:outputText value="#{loginBundle.loginInputLabel}"/>
...
<h:outputText value="#{loginBundle.loginPwLabel}"/>
...
<h:commandButton value="#{loginBundle.loginButtonLabel}"/> 
...
<h:outputText value="#{loginBundle.INVALID_USER_NAME}"/>
...    

値バインディング式を受け入れるどのコンポーネント・タグ属性からでもリソース・バンドル文字列を参照できます。


JSFでのローカライズ・リソース・バンドルの使用