我目前正在为一个项目开发一个java swing GUI。用户界面需要使用多种语言(英语德语法语等),我不知道。有人建议我使用配置文件来存储所有文本,以便翻译人员可以在项目完成后进行翻译而无需重新编译。这有一个额外的好处,即能够在完成后更改文本和添加语言,我还可以在这里为UI添加一些配置,以便它更具可配置性。经过一些反思后,我意识到这将非常慢,因为每次GUI更改时我都需要执行文件IO。我怎样才能设计一个GUI,以便我可以让一个外行人在没有我的情况下翻译它,但不会减慢程序的速度?
答案 0 :(得分:0)
通常在java中,与任何语言一样,您可以将文本提供为在启动时读取的简单属性文件,或者作为指向属性文件包的资源包。它们被加载到内存中,这使得它们非常快。
我建议您在谷歌搜索您目前使用的UI框架以及如何处理国际化,因为这是一个常见问题,应该解决。
答案 1 :(得分:0)
有很多方法可以做到这一点,但如果您想自己编写,可以采用一种方法。
在ISO 639 language codes之后,您通常会有一个如下所示的资源目录:
resources/
languages/
en/
strings.conf
de/
strings.conf
然后,当您的应用程序首次加载时,您将get the users default language,然后相应地加载语言文件;该文件应仅从磁盘加载一次,然后保存在内存中。您可以使用类似下面的内容,通过保留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!