gpt4 book ai didi

Java Swing - 在运行时动态切换语言环境

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:49 25 4
gpt4 key购买 nike

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

如果没有别的工作,我只需要用户重新启动程序来切换语言,但运行时更改会很好......

最佳答案

通常使用的解决方案是在中央管理器类中对面向用户的字符串进行哈希处理。每当你想用数据填充一个字段时,你就调用那个类:

JLabel label = new JLabel();
label.setText(LocalizationManager.get("MY_LABEL_TEXT"));

LocalizationManager 中,您必须获取程序的当前语言,然后以适当的语言查找 MY_LABEL_TEXT 的适当字符串。然后管理器返回现在“本地化”的字符串,如果语言或字符串不可用,则返回一些默认值。

将管理器想象成稍微复杂一点的 Map;它是从键(即“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) 我没有测试过这个,也不是单例,但这是一个即兴的例子。

关于Java Swing - 在运行时动态切换语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12011180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com