gpt4 book ai didi

java - 如何加载正确的语言(在配置中设置)而不是数组中最后的语言

转载 作者:行者123 更新时间:2023-11-30 05:35:59 25 4
gpt4 key购买 nike

我正在创建一个小java应用程序,我正在尝试加载基于config.yml lang set(en/it)的yml文件,但我找不到加载它们的方法,只有最后一个加载了一个数组,这对我来说就是“它”。

我知道我的方法可能是语言文件最糟糕的解决方案,我愿意接受每一种可以帮助我解决问题的方法。但我更喜欢外部 lang_en/it 文件而不是内部文件(或者内部更好?)

设置语言后,应用程序将自动更新每个类(class)中的每个文本。

static final Properties props = new Properties();
static WelcomeMessage main = new WelcomeMessage();
static File file = null;
static File folder = null;
static boolean os = main.os.startsWith("Windows");

public static void create() {
String[] lang = {"en", "it"};
for (String s : lang) {
file = new File(WelcomeMessage.user + "/AppData/Roaming/MyApp/lang_" + s + ".yml");
folder = new File(file.getParent());
SetLanguages(s);
}
if (!file.exists()) {
try {
if (os) {
folder.mkdir();
file.createNewFile();
} else {
file = new File(main.user + "/Library/Application Support/MyApp/config.yml");
folder.mkdir();
file.createNewFile();
}
} catch (Exception e) {
System.out.println(e + " " + file);
}
}
}

public static void SetLanguages(String lang) {
if (lang.equals("en")) {
store("Settings.Save", "Save");
store("Settings.ConfigPath", "Config Path");
store("Settings.Language", "Language");
store("Settings.Title", "Settings");
} else if (lang.equals("it")) {
store("Settings.Save", "Salva");
store("Settings.ConfigPath", "Percorso config");
store("Settings.Language", "Lingua");
store("Settings.Title", "Impostazioni");
}
}

public static String get(String value) {
String key = null;
try {
FileInputStream in = new FileInputStream(file);
props.load(in);
key = props.getProperty(value);
in.close();
} catch (Exception fnf) {
System.out.println(fnf);
}
return key;
}

public static void store(String value, String key) {
try {
FileOutputStream out = new FileOutputStream(file);
props.setProperty(value, key);
props.store(out, null);
out.close();
} catch (Exception fnf) {
System.out.println(fnf);
}
}

这就是我从 yml 获取文本的方式:

path.setText(Language.get("Settings.ConfigPath"));    
language.setText(Language.get("Settings.Language"));
f.setTitle(Language.get("Settings.Title"));
save.setText(Language.get("Settings.Save"));

这是我的 Language.get(key)

public static String get(String value) {
String key = null;
try {
FileInputStream in = new FileInputStream(file);
props.load(in);
key = props.getProperty(value);
in.close();
} catch (Exception fnf) {
System.out.println(fnf);
}
return key;
}

最佳答案

我建议进行以下更改:

  1. 创建 Settings保存属性的类 save , configPath , languagetitle 。如果此类使用不可变的构建器模式就更好了,因为一旦设置,属性就永远不会改变。
  2. 创建 SettingsFactory带有方法的类 getSettings(language) 。该类还应有一个字段 Map<String, Settings> 。在构造函数(或静态 block )中,首先检查磁盘上是否存在文件,如果存在,则将其加载到映射中。如果没有,请填充 map ,每种语言一个条目,然后保存到磁盘。
  3. getSettings只会从 map 中返回与给定语言相对应的值。

写入磁盘的文件格式是另一回事。您说的是 YAML,但我在您的代码片段中没有看到任何 YAML 特定代码。如果您不知道如何编写 YAML 映射,请提出另一个问题。

关于java - 如何加载正确的语言(在配置中设置)而不是数组中最后的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56613130/

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