# 文本信息
我们都喜欢使用让我们知道正在发生什么的程序。程序经常通过显示状态和错误信息来通知我们。当然,这些信息需要进行翻译,以便世界各地的终端用户能够理解。隔离指定 Locale 数据 一节讨论了可翻译的文本信息。 通常,在将信息字符串移动到 ResourceBundle 之后就完成了操作。但是,如果在信息中嵌入了 可变数据,则必须采取一些额外的步骤来为翻译做好准备。
下面一段文本信息,粗体部分 是变量数据
The disk named MyDisk contains 300 files. The current balance of account #34-09-222 is $2,745.72. 405,390 people have visited your website since January 1, 2009. Delete all files older than 120 days.
您可能会试图通过以下方式 拼接字符串 来构造上述列表中的最后一条信息:
double numDays;
ResourceBundle msgBundle;
// ...
String message = msgBundle.getString(
"deleteolder" +
numDays.toString() +
msgBundle.getString("days"));
1
2
3
4
5
6
7
2
3
4
5
6
7
这种方法在英语中很有效,但是对于那些动词出现在句子末尾的语言来说就不适用了。由于此信息的 词序是硬编码 的,因此本地化人员无法为所有语言创建语法上正确的翻译。
如果需要使用复合信息,如何使程序可本地化?您可以通过使用 MessageFormat 类来做到这一点,它是本节的主题。
WARNING
复合信息很难翻译,因为信息文本是分散的。如果您使用复合信息,则本地化将花费更长的时间并且花费更多。因此,仅应在必要时使用复合信息。