私は私のリソースフォルダ内のこの2つのプロパティファイルがあります。Javaの負荷間違ったリソース
:私は私は私を使用javasのLocaleクラスカスタムロケールクラスを使用していない messages_hr_HR.propertiesと messages.propertiesを
public class Messages {
private Messages() {
// do not instantiate
}
private static List<Locale> availableLocales;
private static Locale defaultLocale = new Locale("messages.messages", "EN", "/images/icons/locale/en.png");
static {
availableLocales = new ArrayList<Locale>();
availableLocales.add(defaultLocale);
availableLocales.add(new Locale("messages.messages_hr_HR", "HR", "/images/icons/locale/hr.png"));
}
private static Locale LOCALE = defaultLocale;
private static ResourceBundle RESOURCE_BUNDLE = loadBundle();
private static ResourceBundle loadBundle() {
return ResourceBundle.getBundle(LOCALE.getBundleName());
}
public static String getString(String key) {
try {
ResourceBundle bundle = RESOURCE_BUNDLE == null ? loadBundle() : RESOURCE_BUNDLE;
return bundle.getString(key);
} catch (MissingResourceException e) {
return "!" + key + "!";
}
}
public static void setLocale(Locale locale) {
LOCALE = locale;
RESOURCE_BUNDLE = loadBundle();
}
public static Locale getLocale() {
return LOCALE;
}
public static List<Locale> getAvailableLocales() {
return availableLocales;
}
}
:
public class Locale {
private String bundleName;
private String localeName;
private String iconPath;
public Locale(String bundleName, String localeName, String iconPath) {
super();
this.bundleName = bundleName;
this.localeName = localeName;
this.iconPath = iconPath;
}
public String getBundleName() {
return bundleName;
}
public void setBundleName(String bundleName) {
this.bundleName = bundleName;
}
public String getLocaleName() {
return localeName;
}
public void setLocaleName(String localeName) {
this.localeName = localeName;
}
public String getIconPath() {
return iconPath;
}
public void setIconPath(String iconPath) {
this.iconPath = iconPath;
}
}
は、私は、キーの値を返すための静的メソッドを持つメッセージクラスを持っています
はその後、私のGUIで私が利用可能な言語でラジオボタンのメニューを持っており、ユーザーは、いくつかの上でクリックしたときに、私はちょうど
Messages.setLocale(clickedLanguageLocale);
は、だから、私は特定のファイルではなく、Javaのロードの責任だということを見ることができます呼び出します。
問題は、一部のコンピュータでは異常な動作です。一部のテキストは英語(messages.properties)で、一部はクロアチア語(messages_hr_HR)です。私の頭に浮かんだのは、OSのデフォルトのロケールでしたが、私が鉱山のクラスを使用して以来、意味がありません。
この現象のアイデアはありますか?
ええと、これらの静的な読み込みの可能性がありますか?しかし、私はそれが問題だとは思わない。なぜなら、GUIが必要な言語を選択するためにロードする必要があるからだ。したがって、GUIがロードされると、リソースもロードされます。 'localeMenuItem.addActionListener(新しいのActionListener(){ \t \t \t \t \t \t \t \t @Override \t \t \t \tます。public void actionPerformedの(のActionEvent e)の{ \t:そして、GUIクラスで私はそのラジオボタングループのリスナーを持っています\t \t \t \t Messages.setLocale(ロケール); \t \t \t \t \t setStringValues()。 \t \t \t \t} \t \t \t}); 'Iは、新しいロケールを設定します。 – vale4674
ええと、デフォルトのgetBundle()を使用していることが問題になるようです。マニュアル:http://docs.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html#getBundle%28java.langを参照してください。文字列、%20java.util.Locale、%20java.lang.ClassLoader%29。 getBundle()はユーザーのシステムでデフォルトのjava.util.Localeを使用しますが、Localeクラスのデフォルトとして指定したものと必ずしも同じではありません。 – shams
これは問題かもしれません。その名前でバンドルをロードするにはどうすればよいですか?しかし、奇妙なもう一つのことは、ロケールクラスにHRロケールが存在せず、何とか 'getBundle()'メソッドがそれをデフォルトとして使用することを決定するということです。 – vale4674