0

私のプロジェクトの要件により、カスタム Java ResouceBundle クラスを実装して、web.xml で構成されたディレクトリからリソース データを取得しました。私の意図は、プロジェクトにResourceBundle クラスを 1 つだけ持つことであり、将来追加されるリソースと言語は、プロジェクト全体を再デプロイすることなく実行できます。例: MainBundle.java

public MainBundle() {
    super();
    this.locale = ADFContext.getCurrent().getLocale();
    readBundle();
}

public MainBundle(Locale locale) {
    super();
    this.locale = locale;
    readBundle();
}

private void readBundle() {
    bundleFileName = baseBundleName + "_" + locale.toString();
    // do some file reading here
}

ResourceBundle クラスを実装して、現在のロケールに従って正しい言語をロードしました。ただし、 ResourceBundle クラスが1つしかない場合、ユーザーがログインすると、他のすべての同時ユーザーのロケールがそのユーザーのロケールに変更され、言語が変更されます。例: 英語のユーザーが私の Web サイトを使用しています。フランス語のユーザーがログインすると、英語のユーザーは突然フランス語で Web サイトを使用することを余儀なくされます。

これを解決するために、MainBundle_en_US、MainBundle_fr などの MainBundle クラスを拡張するすべてのロケール用のクラスを作成する必要がありました。ただし、これは、新しい言語が追加されたときにプロジェクトを変更する必要がないという目的を無効にします。

私の質問は:

どうすればこれを回避し、リソース バンドル クラスを 1 つだけにすることができますか?

新しい言語が追加されたときにプロジェクトを変更する必要がない、私が望むものを達成する方法はありますか?

4

1 に答える 1

0

ResouceBundle クラスからカルスを拡張せず、独自のローカリゼーション/国際化フレームワークを実装すると、設計アプローチを完全に制御できます。

于 2013-03-09T02:18:41.363 に答える