[解決済み] JSFの国際化、message-bundleとresource-bundleはいつ使うのか?
質問
いつ、どのように
<resource-bundle>
と
<message-bundle>
のローカライズ用タグを
faces-config.xml
? この2つの違いは、私にはあまりよくわかりません。
どのように解決するのですか?
メッセージバンドルです。
この
<message-bundle>
は、JSFの検証/変換機能で使用されるJSFのデフォルトの警告/エラーメッセージを上書きしたいときに使用します。
デフォルトの警告/エラーメッセージのキーは、2.5.2.4 章の
JSF仕様
.
例えば
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>
この
<resource-bundle>
を指定することなく、JSFアプリケーション全体で利用可能なローカライズされたリソースバンドルを登録したい場合に使用されます。
<f:loadBundle>
を指定する必要はありません。
例えば
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以降、新しいJSR303 Bean Validation APIもあり、これらは以下のように表されます。
@NotNull
,
Size
,
@Max
などのアノテーションは
javax.validation.constraints
パッケージのアノテーションです。このAPIは
全く関係ありません。
であることを理解する必要があります。JSFの一部ではないのですが、JSFは偶然にも
をサポートしています。
をサポートしています。つまり、JSR303の実装(例えばHibernate Validator)の存在を判断・認識し、検証をそれに委ねるのです(無効化するには
<f:validateBean disabled="true"/>
を使用することで無効にできます)。
の4.3.1.1章にあるように
JSR303 仕様
に従って、カスタム 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におけるローカライゼーション、リクエスト/ビューごとではなくセッションごとに選択されたロケールを記憶する方法
.
関連
-
[解決済み] <f:facet>は何をするもので、どのような場合に使用するのですか?
-
[解決済み] JSF 2.2でターゲットが到達できない、識別子がヌルに解決される [重複] 。
-
[解決済み] actionとactionListenerの違い
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
-
[解決済み】JSFリソースライブラリは何のためにあり、どのように使用すべきですか?
-
[解決済み】ローカライゼーションとインターナショナライゼーション、何が違うの?
-
[解決済み] <f:metadata>、<f:viewParam>、<f:viewAction>は何に使えるのでしょうか?
-
[解決済み] javax.el.PropertyNotFoundException の識別と解決。ターゲットに到達できない
-
[解決済み] f:viewAction / preRenderView と PostConstruct はいつ使うのか?
-
[解決済み] ViewParam vs @ManagedProperty(value = "#{param.id}")
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] javax.validation.ConstraintViolationException
-
[解決済み] p:dashboardが終了してもソート順を維持する。
-
[解決済み] actionとactionListenerの違い
-
[解決済み] javax.el.PropertyNotFoundException の識別と解決。ターゲットに到達できない
-
[解決済み] divタグをレンダリングできるjsfコンポーネントは何ですか?
-
[解決済み] h:commandLinkの代わりにh:outputLinkを使うべきですか?
-
[解決済み] PrimeFaces p:fileUploadを使うには?リスナーメソッドが呼び出されない、またはUploadedFileがNullである / エラーが発生する / 使えない
-
[解決済み] dataTableやui:repeatのコマンドリンクに選択した行を渡すにはどうしたらいいですか?
-
[解決済み] /page.xhtmlのパースでエラーが発生しました。Error Traced[line: 42] 実体 "nbsp "が参照されたが、宣言されていない。
-
[解決済み] JSFでEL empty演算子はどのように動作しますか?