2012-08-17 122 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