一般的に使用される解決策は、中央マネージャー クラスにユーザー向け文字列のハッシュを配置することです。フィールドにデータを入力するときはいつでも、そのクラスを呼び出します。
JLabel label = new JLabel();
label.setText(LocalizationManager.get("MY_LABEL_TEXT"));
内部LocalizationManager
では、プログラムの現在の言語を取得しMY_LABEL_TEXT
、適切な言語で適切な文字列を検索する必要があります。次に、マネージャーは現在「ローカライズされた」文字列を返すか、言語または文字列が利用できない場合はデフォルトを返します。
マネージャは、もう少し複雑な Map と考えてください。キー (つまり、'MY_LABEL_TEXT') から表示したいもの ("Good day!" または "Bienvenido!") へのマッピングです。使用している言語に応じて異なります。これを実装するには多くの方法がありますが、メモリ/パフォーマンス上の理由から、マネージャーを静的またはシングルトン (1 回ロード) にする必要があります。
例: (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) 私はこれをテストしておらず、シングルトンでもありませんが、これはすぐに使える例です。