gpt4 book ai didi

Java 首选项和国际化 (i18n)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:23:52 27 4
gpt4 key购买 nike

Java 教程推荐使用 Preferences API 而不是 Properties 文件。属性文件和 ResourceBundle 是处理应用程序中的内部化要求的推荐方法。

我正在考虑将两者都用于桌面应用程序,该应用程序将以特定于语言环境的方式显示首选项。

谁能指出这种方法的问题?

也许我应该只使用属性文件期间?

最佳答案

I am considering using both for a desktop application that will display preferences in a locale specific way.

好的,所以你想要的是翻译后的配置文件:

some_translated_key=some_value

好吧,除非你想支持MUI在某些时候,这应该没什么大不了的。但是,如果这样做,同一台计算机上的不同用户可以使用不同的语言,或者用户可能能够切换语言,那么在将键与属性匹配时就会遇到麻烦。您将不得不在阅读 key 时扫描所有翻译,并且您肯定会最终得到同一个 key 的多个条目。如何解决?嗯,这是个好问题。

根据我的经验,配置文件应该与语言无关(中性文化)并且永远不应手动编辑(也就是说,翻译 key 并不重要)。

我以为字符编码可能有问题,但下面的代码片段没有问题(文件是 UTF-8 编码的):

public class Main {
private static final String FILE_NAME = "i18ned.properties";
private File propertiesFile;
private Properties properties;

public Main() {
properties = new Properties();
propertiesFile = new File(FILE_NAME);
if (propertiesFile.exists()) {
try {
properties.load(new BufferedReader(new FileReader(
propertiesFile)));
} catch (FileNotFoundException e) {
// not likely, but should be logged either way
} catch (IOException e) {
// logger should be used instead
e.printStackTrace();
}
}
}

public void saveProperties() {
try {
properties
.store(new BufferedWriter(new FileWriter(propertiesFile)), "");
} catch (IOException e) {
// oops, use logger instead
e.printStackTrace();
}
}

public static void main(String[] args) {
Main main = new Main();
main.storeSome();
main.readSome();
}

private void readSome() {
String highAsciiKey = "żółć";
String value = properties.getProperty(highAsciiKey);
System.out.println(value);
}

private void storeSome() {
String highAsciiKey = "żółć";
String highAsciiValue = "łąkę";
properties.setProperty(highAsciiKey, highAsciiValue);
saveProperties();
}

}

关于Java 首选项和国际化 (i18n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588837/

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