Messages

我们每个人都喜欢使用使我们知道发生了什么的程序。经常使我们了解情况的程序通过显示状态和错误消息来做到这一点。当然,这些消息需要翻译,以便全世界的final用户都能理解。 隔离区域特定的数据部分讨论了可翻译的文本消息。通常,将消息String移到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.

您可能会想通过 String 联短语和变量来构造上一个列表中的最后一条消息,如下所示:

double numDays;
ResourceBundle msgBundle;
// ...
String message = msgBundle.getString(
                     "deleteolder" +
                     numDays.toString() +
                     msgBundle.getString("days"));

这种方法在英语中效果很好,但不适用于动词出现在句子结尾的语言。由于此消息的单词 Sequences 是硬编码的,因此您的本地化人员将无法为所有语言创建语法正确的翻译。

如果需要使用复合消息,如何使程序本地化?您可以使用MessageFormat类来完成此操作,这是本节的主题。

Caution:

复合消息很难翻译,因为消息文本是分散的。如果您使用复合消息,则本地化将花费更 Long 的时间并且花费更多。因此,仅应在必要时使用复合消息。

处理复合邮件

复合消息可能包含多种变量:日期,时间,字符串,数字,货币和百分比。要以与语言环境无关的方式设置复合消息的格式,请构造一个应用于MessageFormat对象的 Pattern。

Handling Plurals

如果复数形式和单数形式都可能,则消息中的单词通常会有所不同。使用ChoiceFormat类,您可以将数字 Map 到单词或短语,从而可以构造语法正确的消息。