我了解如何国际化Java程序,但我遇到了问题。 我的程序中的语言可以随时切换,但是我的程序可以存在于很多状态,这意味着它可能会或可能不会有几个JLabel,JPanels,JFrames等被打开。是否有一个类或方法将当前GUI更新为交换语言,还是必须手动完成?Java Swing - 在运行时动态切换语言环境
如果没有别的作品,我就要求用户重新启动程序来切换语言,但运行时的变化将是很好...
我了解如何国际化Java程序,但我遇到了问题。 我的程序中的语言可以随时切换,但是我的程序可以存在于很多状态,这意味着它可能会或可能不会有几个JLabel,JPanels,JFrames等被打开。是否有一个类或方法将当前GUI更新为交换语言,还是必须手动完成?Java Swing - 在运行时动态切换语言环境
如果没有别的作品,我就要求用户重新启动程序来切换语言,但运行时的变化将是很好...
通常使用的解决方案是面向用户的的散列中央管理员类中的字符串。您拨打电话到该类只要你想填充字段数据:
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)I没有测试此,也不是一个单,但它是一个即席例子。
所以我会在语言切换时调用管理器,它会更新所有要更新的字符串(它们是在他的管辖下)? – Karlovsky120 2012-08-17 19:23:18
请问您可以告诉我更多关于LocalizationManager的信息,我似乎无法找到Google的任何信息? – Karlovsky120 2012-08-17 19:37:08
@ Karlovsky120我已更新我的回复,尝试并提供一个示例。切换语言时不要更新所有字符串;做一次。更好的是,懒洋洋地做,但这是下一步。如果您有像我所展示的界面,您可以改进实施。 – 2012-08-17 19:41:27
你对每种可能的语言都有本地化的字符串吗?你目前如何获取这些字符串?或者是当前硬编码到每个元素的字符串? – 2012-08-17 18:25:44
我还没有真正写过程序,只是几行,完全是为了避免这个问题。我对任何事情都开放! – Karlovsky120 2012-08-17 18:27:55
你会写什么样的java程序?一个使用JavaEE/JSF /等或其他东西的Web应用程序? – jahroy 2012-08-17 18:36:33