web-dev-qa-db-ja.com

JSFの国際化、メッセージバンドルとリソースバンドルを使用する場合

<resource-bundle>のローカライズに<message-bundle>およびfaces-config.xmlタグを使用するタイミングと方法これら2つの違いは、私にはあまり明確ではありません。

82
jsfQ

<メッセージバンドル>

_<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>
_

ValidationMessages(JSR303 Bean Validation)

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のローカライゼーション、リクエスト/ビューごとではなくセッションごとに選択したロケールを記憶する方法 も参照してください。

145
BalusC