The Java Tutorials have been written for JDK 8.Java教程是为JDK 8编写的。Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available.本页中描述的示例和实践没有利用后续版本中引入的改进,并且可能使用不再可用的技术。See Java Language Changes for a summary of updated language features in Java SE 9 and subsequent releases.有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言更改。
See JDK Release Notes for information about new features, enhancements, and removed or deprecated options for all JDK releases.有关所有JDK版本的新功能、增强功能以及已删除或不推荐的选项的信息,请参阅JDK发行说明。
We all like to use programs that let us know what's going on. Programs that keep us informed often do so by displaying status and error messages. Of course, these messages need to be translated so they can be understood by end users around the world. The section Isolating Locale-Specific Data discusses translatable text messages. Usually, you're done after you move a message String
into a ResourceBundle
. However, if you've embedded variable data in a message, you'll have to take some extra steps to prepare it for translation.
A compound message contains variable data. In the following list of compound messages, the variable data is underlined:
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.
You might be tempted to construct the last message in the preceding list by concatenating phrases and variables as follows:
double numDays; ResourceBundle msgBundle; // ... String message = msgBundle.getString( "deleteolder" + numDays.toString() + msgBundle.getString("days"));
This approach works fine in English, but it won't work for languages in which the verb appears at the end of the sentence. Because the word order of this message is hardcoded, your localizers won't be able to create grammatically correct translations for all languages.
How can you make your program localizable if you need to use compound messages? You can do so by using the MessageFormat
class, which is the topic of this section.
Compound messages are difficult to translate because the message text is fragmented. If you use compound messages, localization will take longer and cost more. Therefore you should use compound messages only when necessary.
A compound message may contain several kinds of variables: dates, times, strings, numbers, currencies, and percentages. To format a compound message in a locale-independent manner, you construct a pattern that you apply to a MessageFormat
object.
The words in a message usually vary if both plural and singular word forms are possible. With the ChoiceFormat
class, you can map a number to a word or phrase, allowing you to construct messages that are grammatically correct.