1

テキスト、画像など (数字、日付) を含むローカライズが必要な Java (JSF) Web アプリケーションがあります。私はプログラマーにのみ使用させようとしています

<h:graphicImage value="#{images['i_print.png']}" ... />

...そして、ユーザーのロケールに応じて、正しいローカライズされた画像がバックグラウンドで自動的に選択されます。

1 つの方法は、特定のイメージ キーの異なるイメージ パスを持つリソース バンドル プロパティ ファイルを用意することです。プロパティファイルなしでこれを行う方法はありますか?

つまり、次の構造を持つ images ディレクトリ:

-Images
--en
---en_US
---en_CA
--fr
---fr_FR

ルックアップが最初に最もローカライズされたディレクトリを通過し、イメージ名が見つかるまでツリーを上るリソース バンドルを作成することは可能ですか?

これまでのところ、次のものがあります。

(1) 画像ハンドラー。

<resource-bundle>
    <base-name>com.example.ImageResourcesHandler</base-name>
    <var>images</var>
</resource-bundle>

(2) リソース バンドルを拡張し、getObject をオーバーライドして呼び出しを処理するハンドラの実装

public class ImageResourcesHandler extends ResourceBundle {

@Override
protected Object handleGetObject(String key) {...}


}

(3) ResourceBundle.Control を拡張し、BundleLoading およびコントロールに想定される Images コントロール

public class ImageControl extends ResourceBundle.Control { ... }

ここで、画像のルート ディレクトリを調べて、画像の名前をキーとし、そのパスを値としてマップを作成します。

問題は、バンドル構造がないことです。つまり、キーが 2 つの異なるロケールにある場合、マップは明らかに機能しません (2 つ以上のパスが同じキーにマップされます)。

これを達成する方法について何かアイデアはありますか?プロパティファイルを維持したくありません。

TL;DR: プロパティ ファイルを使用せずに、ファイル システムからユーザーのロケールに応じて画像を取得するメカニズムを実装したいと考えています。

どんなアイデアでも大歓迎です。ありがとう!

4

1 に答える 1