0

ここの質問者のように

変数置換 JSF リソース バンドル プロパティ ファイル

メッセージ バンドル内の他のプロパティ キーの値を参照できないことに少し驚いています。

カスタム コンポーネントで必要なことを実行できる独自のごみハンドラー [0] を簡単に作成できることはわかっていますが、それではメッセージ バンドルを呼び出すテンプレート内の式がデフォルトの JSF 実装を使用したままになります。

メッセージ バンドルのデフォルトの JSF 処理をオーバーライドすることは可能ですか?

[0] または、上記の質問への回答のいずれかで参照されているコードを使用するには https://code.google.com/p/reflectiveresourcebundle/

4

2 に答える 2

1

ResourceBundleプロパティ ファイルのパスとファイル名を単独で指定する代わりに、具象実装の完全修飾名を「ベース名」として指定できます。

例えば

public class YourCustomResourceBundle extends ResourceBundle {
    // ...
}

次のように登録できます

<application>
    <resource-bundle>
        <base-name>com.example.YourCustomResourceBundle</base-name>
        <var>text</var>
    </resource-bundle>
</application>

または、次のようにビュー/テンプレートごとに宣言します

<f:loadBundle baseName="com.example.YourCustomResourceBundle" var="text" />

キックオフの例として使用できる具体的なコードを含むいくつかの関連する質問/回答を次に示します。

于 2012-07-09T15:21:32.150 に答える
0

しようとする人にはすべてが可能です。問題は、それが可能かどうかではなく、やるべきかです。その質問に対する答えは、おそらくそうではないということです。

メッセージ バンドル内の他のメッセージを参照するということは、複合メッセージを作成する必要があることを意味します。したがって、メッセージの一部を何度も再利用して、ディスク領域のごく一部または開発時間の一部を節約できます。
もしそうなら、私はあなたにメッセージがあります。あなたがしようとしていることは連結と呼ばれ、2 番目に多い I18n の欠陥です。そしてその影響は、ハードコーディングされた文字列と同じくらい悪いものです。

なんで?ターゲット言語が英語の文法規則に従っていないためです。まず、翻訳中に文の順序を変更することはよくあることです。これは、(番号または名前の付いた) プレースホルダーを使用して簡単に修正できます。ただし、文脈によって翻訳が異なる場合があります。つまり、まったく別の方法で翻訳する必要があるかもしれませんし、単純に語尾を文法のケース、気分、または性別によって変える必要があるかもしれません。

私のアドバイスは、そのようなショートカットを使用しないことです。修正するよりも多くの問題が発生します。
なぜ「あの愚かなローマ人」がこのように実装しなかったのかがわかるはずです。それは I18n のベスト プラクティスに反しています。

于 2012-07-09T17:02:17.640 に答える