我瞭解如何國際化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