<resource-bundle>
のローカライズに<message-bundle>
およびfaces-config.xml
タグを使用するタイミングと方法これら2つの違いは、私にはあまり明確ではありません。
_<message-bundle>
_は、JSF検証/変換などで使用されるJSFのデフォルトの警告/エラーメッセージをオーバーライドする場合に使用します。 JSF仕様 の第2.5.2.4章で、デフォルトの警告/エラーメッセージのキーを見つけることができます。
たとえば、以下の_Messages_xx_XX.properties
_パッケージの_com.example.i18n
_ファイルは、デフォルトの_required="true"
_メッセージをオーバーライドします。
_com/example/i18n/Messages_en.properties
_
_javax.faces.component.UIInput.REQUIRED = {0}: This field is required
_
_com/example/i18n/Messages_nl.properties
_
_javax.faces.component.UIInput.REQUIRED = {0}: Dit veld is vereist
_
次のように設定できます(ロケール指定子__xx_XX
_およびファイル拡張子なし!):
_<message-bundle>com.example.i18n.Messages</message-bundle>
_
_<resource-bundle>
_は、すべてのビューで_<f:loadBundle>
_を指定することなく、JSFアプリケーション全体で利用可能なローカライズされたリソースバンドルを登録する場合に使用されます。
たとえば、以下の_Text_xx_XX.properties
_パッケージの_com.example.i18n
_ファイル:
_com/example/i18n/Text_en.properties
_
_main.title = Title of main page
main.head1 = Top heading of main page
main.form1.input1.label = Label of input1 of form1 of main page
_
_com/example/i18n/Text_nl.properties
_
_main.title = Titel van hoofd pagina
main.head1 = Bovenste kop van hoofd pagina
main.form1.input1.label = Label van input1 van form1 van hoofd pagina
_
次のように設定できます(ロケール指定子__xx_XX
_およびファイル拡張子なし!):
_<resource-bundle>
<base-name>com.example.i18n.Text</base-name>
<var>text</var>
</resource-bundle>
_
次のように_main.xhtml
_で使用されます。
_<h:head>
<title>#{text['main.title']}</title>
</h:head>
<h:body>
<h1 id="head1">#{text['main.head1']}</h1>
<h:form id="form1">
<h:outputLabel for="input1" value="#{text['main.form1.input1.label']}" />
<h:inputText id="input1" label="#{text['main.form1.input1.label']}" />
</h:form>
</h:body>
_
Java EE 6/JSF 2)から、これらの_@NotNull
_、Size
、_@Max
_などで表される新しいJSR303 Bean Validation APIもあります。 _javax.validation.constraints
_ パッケージの注釈。このAPIはJSFとは完全に無関係であることを理解する必要があります。JSFの一部ではなく、JSF検証フェーズ中にたまたまsupportを持ちます。つまり、JSR303実装(Hibernate Validatorなど)の存在を判断および認識し、検証を委任します(_<f:validateBean disabled="true"/>
_、ところで)。
JSR303仕様 の4.3.1.1章にあるように、カスタムJSR303検証メッセージファイルにはexactly名前_ValidationMessages_xx_XX.properties
_が必要であり、クラスパスのrootに配置されます(したがって、パッケージではありません!)。
上記の例では、ファイル名の__xx_XX
_は(オプションの)言語および国コードを表します。これがまったく存在しない場合は、デフォルト(フォールバック)バンドルになります。言語が存在する場合、例えば__en
_、その後、クライアントが _Accept-Language
_ HTTP要求ヘッダーでこの言語を明示的に要求したときに使用されます。同じことが国にも当てはまります。 __en_US
_または__en_GB
_。
_<locale-config>
_の_faces-config.xml
_要素では、メッセージとリソースバンドルの両方に対して、サポートされているロケールを一般的に指定できます。
_<locale-config>
<default-locale>en</default-locale>
<supported-locale>nl</supported-locale>
<supported-locale>de</supported-locale>
<supported-locale>es</supported-locale>
<supported-locale>fr</supported-locale>
</locale-config>
_
目的のロケールは、_<f:view locale>
_を介して設定する必要があります。 JSFのローカライゼーション、リクエスト/ビューごとではなくセッションごとに選択したロケールを記憶する方法 も参照してください。