私たちはアプリケーションで翻訳を管理するのにMessageFormat
を使用しています。変換キーとそのパラメータを含むラッパークラス(TranslationWrapper
)があります。MessageFormatのLocaleを使用して再帰的に書式設定
翻訳されたメッセージを表示する場合、それはtranslationKey
が「メッセージ{0} {1}」、およびパラメータと同様の形式で値を含むオブジェクトの配列である
String message = new MessageFormat(translationKey, aLocale).format(parameters);
このコマンドでフォーマットされています{0}と{1}のために。
任意のオブジェクトがパラメータとして使用されることがあるので、パラメータとしてTranslationWrapper
をよく使用します。これにより、組み込みの翻訳キーに基づいてローカライズされたStringを作成することができます。
パラメータとして渡されるオブジェクトの場合は、toString()
メソッドが呼び出されます。 TranslationWrapper
のtoString()
メソッドは、現在のユーザーのロケールを使用して自動的に変換しますが、別のロケールを使用することがあります。
コンストラクタのMessageFormat
にこの異なるロケールを渡すので、{0}のような値を置き換えるときに、パラメータの文字列がMessageFormat
に生成される方法を処理する方法があるかどうかを知りたいと思います。
toString(locale);
:代わりにTranslationWrapper
にtoString()
メソッドを呼び出すと、私のような何かを呼び出すしたいと思います。
まだはるかに少ない醜い私が念頭に置いていたの回避策より。スレッドローカル変数について知らなかった私のような他の人のリファレンスとして、次の宣言例があります: 'private static final ThreadLocal threadLocale = new ThreadLocal ();' –
私はこれをanwerに入れます – hoaz