我目前正在为一个项目开发Java Swing GUI。我不知道的用户界面将需要使用多种语言(英语德语法语等)。建议我使用配置文件存储所有文本,以便在项目完成后可以翻译而无需重新编译。这是能够在完成后更改文本和添加语言的额外奖励,我还可以在此处为UI放置一些配置,以便更可配置。经过一番反思,我意识到这将非常慢,因为每次GUI更改时我都需要进行文件IO。我该如何设计GUI,以便我仍然可以在没有我的情况下将其翻译,但不能放慢程序?
肯定有很多方法可以做到这一点,但是如果您想自己编写,这是一种可能的实现。
按照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!
通常在java中,因为任何语言,您都会作为您在启动时阅读的简单属性文件或指向捆绑包的简单属性文件。属性文件。这些被加载到内存中,使它们很快。
我建议您对您当前正在使用的UI框架进行Google搜索以及如何处理国际化,因为这是一个常见的问题,应该解决。