我目前正在为一个项目开发一个 java swing GUI。用户界面需要使用多种我不知道的语言(英语、德语、法语等)。有人建议我使用配置文件来存储所有文本,以便翻译人员在项目完成后进行翻译而无需重新编译。这还有一个额外的好处,就是能够在完成后更改文本和添加语言,我还可以在此处放置一些 UI 配置,使其更具可配置性。不过经过一番思考,我意识到这会很慢,因为每次 GUI 更改时我都需要进行文件 IO。我如何设计一个 GUI,这样我仍然可以让外行在没有我的情况下翻译它,但又不会减慢程序的速度?
问问题
836 次
2 回答
1
肯定有很多方法可以做到这一点,但如果您想自己编写,这里有一种可能的实现。
遵循ISO 639 语言代码,您通常会有一个如下布局的资源目录:
resources/
languages/
en/
strings.conf
de/
strings.conf
然后当您的应用程序第一次加载时,您将获得用户的默认语言,然后相应地加载语言文件;该文件应该只从磁盘加载一次,然后保存在内存中。您可以使用类似以下的内容,并通过保留 LanguageLoader 的实例,您可以.getStringById()
按名称调用和加载键。
public class LanguageLoader() {
final HashMap<String, String> localizedStrings;
public LanguageLoader(String language) {
localizedStrings = new HashMap<String, String>();
File f = new File( "languages/" + language + "/strings.conf" );
// TODO read file line by line and add key / value pairs to hash map
}
public String getStringById( String stringId ) {
return localizedString.get(stringId);
}
}
在您的应用程序中
String languagePack = Locale.getDefault();
LanguageLoader localization = new LanguageLoader(languagePack);
String inAnyLanguage = localization.getStringById("welcome_001");
您的语言文件包含在哪里
en/strings.conf
welcome_001=Hello World!
de/strings.conf
welcome_001=Hallo Welt!
于 2017-09-19T18:13:26.017 回答
0
通常在 java 中,就像任何语言一样,您可以将文本作为您在启动时读取的简单属性文件或作为指向属性文件包的资源包提供。这些被加载到内存中,这使得它们非常快。
我建议对您当前使用的 UI 框架以及如何处理国际化进行谷歌搜索,因为这是一个常见问题,应该解决。
于 2017-09-19T17:59:40.357 回答