ローカリゼーションにタグをいつどのように使用する必要が<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ので、また、それらによって表される新しいJSR303ビーン検証APIがあります@NotNull
、Size
、@Max
の、などの注釈をjavax.validation.constraints
パッケージ。このAPIはJSFとはまったく関係がないことを理解する必要があります。これはJSFの一部ではありませんが、JSFは検証フェーズでたまたまサポートしています。つまり、JSR303実装(Hibernate Validatorなど)の存在を判別して認識し、検証をそれに委任します(<f:validateBean disabled="true"/>
ちなみに、を使用して無効にすることができます)。
JSR303仕様の4.3.1.1章にあるように、カスタムJSR303検証メッセージファイルは正確な名前を持ってValidationMessages_xx_XX.properties
いる必要があり、クラスパスのルートに配置する必要があります(したがって、パッケージではありません!)。
上記の例では_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でのローカリゼーションも参照してください。