2012-08-17 123 views
5

我了解如何国际化Java程序,但我遇到了问题。 我的程序中的语言可以随时切换,但是我的程序可以存在于很多状态,这意味着它可能会或可能不会有几个JLabel,JPanels,JFrames等被打开。是否有一个类或方法将当前GUI更新为交换语言,还是必须手动完成?Java Swing - 在运行时动态切换语言环境

如果没有别的作品,我就要求用户重新启动程序来切换语言,但运行时的变化将是很好...

+0

你对每种可能的语言都有本地化的字符串吗?你目前如何获取这些字符串?或者是当前硬编码到每个元素的字符串? – 2012-08-17 18:25:44

+0

我还没有真正写过程序,只是几行,完全是为了避免这个问题。我对任何事情都开放! – Karlovsky120 2012-08-17 18:27:55

+0

你会写什么样的java程序?一个使用JavaEE/JSF /等或其他东西的Web应用程序? – jahroy 2012-08-17 18:36:33

回答

1

通常使用的解决方案是面向用户的的散列中央管理员类中的字符串。您拨打电话到该类只要你想填充字段数据:

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没有测试此,也不是一个单,但它是一个即席例子。

+0

所以我会在语言切换时调用管理器,它会更新所有要更新的字符串(它们是在他的管辖下)? – Karlovsky120 2012-08-17 19:23:18

+0

请问您可以告诉我更多关于LocalizationManager的信息,我似乎无法找到Google的任何信息? – Karlovsky120 2012-08-17 19:37:08

+1

@ Karlovsky120我已更新我的回复,尝试并提供一个示例。切换语言时不要更新所有字符串;做一次。更好的是,懒洋洋地做,但这是下一步。如果您有像我所展示的界面,您可以改进实施。 – 2012-08-17 19:41:27