ソリューションは、ユーザー向けのハッシュを持つことですセントラルマネージャクラスの文字列。あなたがデータを持つフィールドを移入したいときはいつでも、そのクラスへの呼び出しを行う:内部
JLabel label = new JLabel();
label.setText(LocalizationManager.get("MY_LABEL_TEXT"));
LocalizationManager
あなたは、その後、プログラムの現在の言語を取得する必要が適切にMY_LABEL_TEXT
のための適切な文字列を検索します言語。マネージャは、今や 'ローカライズされた'文字列を返します。言語または文字列が利用できない場合は、デフォルトの文字列を返します。
マネージャーはもう少し複雑なマップだと考えてください。あなたがどの言語を使っているかに応じて、キー(つまり、「MY_LABEL_TEXT」)から表示したいもの(「おやすみなさい!」または「Bienvenido!」)へのマッピングです。これを実装する方法はたくさんありますが、メモリ/パフォーマンス上の理由から、マネージャを静的にするかシングルトン(一度ロードする)にします。例えば
:(1)
public class LocalizationManager {
private SupportedLanguage currentLanguage = SupportedLanguage.ENGLISH;//defaults to english
private Map<SupportedLanguage, Map<String, String>> translations;
public LocalizationManager() {
//Initialize the strings.
//This is NOT a good way; don't hardcode it. But it shows how they're set up.
Map<String, String> english = new HashMap<String, String>();
Map<String, String> french = new HashMap<String, String>();
english.set("MY_LABEL_TEXT", "Good day!");
french.set("MY_LABEL_TEXT", "Beinvenido!");//is that actually french?
translations.set(SupportedLanguage.ENGLISH, english);
translations.set(SupportedLanguage.FRENCH, french);
}
public get(String key) {
return this.translations.get(this.currentLanguage).get(key);
}
public setLanguage(SupportedLanguage language) {
this.currentLanguage = language;
}
public enum SupportedLanguage {
ENGLISH, CHINESE, FRENCH, KLINGON, RUSSIAN;
}
}
(1)私はこれをテストしていませんが、またそれはシングルトンですが、それは、カフ例オフです。
可能な言語ごとにローカライズされた文字列がありますか?どのようにこれらの文字列を現在取得していますか?または、現在各文字列が各要素にハードコードされていますか? –
私はまだ、その問題を避けるために、ちょうど2行のプログラムを書いていません。私はすべてにオープン! – Karlovsky120
どのような種類のJavaプログラムを作成しますか? JavaEE/JSF/etcなどのWebアプリケーションを使用していますか? – jahroy