我目前正在开发一个更大的 Java 桌面应用程序,现在我想添加翻译。l18n 系统让我困扰的是,它不提供任何类型的编译时检查。
在java的系统中,你有类似a的东西HashMap
,其中每个本地化字符串都有一个“Key”,翻译后的字符串就是“Value”。这看起来像这样(取自教程示例):
Locale currentLocale;
ResourceBundle messages;
currentLocale = new Locale(language, country);
messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
System.out.println(messages.getString("greetings"));
如果您有一个简单/小型的应用程序,这很好用。但是在一个包含数千个翻译字符串的大型应用程序中,您可能会在“Key”中出现拼写错误,从而得到一个空字符串或错误字符串。
运气好的话,应用程序会抛出一个RuntimeException
告诉你它的信息,但即便如此,你也可能没有达到这一点,因为在某些情况下可能不会显示的对话框中使用了错误的“键” (说这是一个错误对话框)。
为了防止这种情况发生,使用提供编译时检查使用的“键”的系统会是更好的主意。这例如在 Android 中使用,您在 XML 文件中指定资源,然后将其索引并映射到类(包括要使用的“键”)。这样,你会得到这样的东西(来自Android Docs):
// Set the text on a TextView object using a resource ID
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);
如果你在那个“键”中有错字,你会在编译时得到一个错误(你的 IDE 也有“自动完成”)。
现在,要完成这样的工作,您需要一个小工具/脚本来执行索引部分并生成资源类 ( R.java
)。在 Android 中,Eclipse 插件(或一般的 IDE)会为您执行此操作。
我现在的问题是:是否已经有一个系统可以用于 Java 中的普通桌面应用程序?还是我说的话大错特错?