download:SpringCloud整合Dubbo3实战高并发下的微服务架构设计内附ppt上山的阿科姿

国际化示例程序
如果您查看国际化的源代码,您会留神到硬编码的英文音讯已被删除。因为音讯不再是硬编码的,而且语言代码是在运行时指定的,所以同一个可执行文件能够在世界范畴内散发。本地化不须要从新编译。这个打算曾经国际化了。

您可能想晓得音讯文本产生了什么变动,或者语言和国家代码的含意。别放心,在示例程序一步步国际化的过程中,你会学到这些概念。

1。创立属性文件
属性存储无关程序或环境特色的信息。该文件是纯文本格式的。您简直能够应用任何文本编辑器来创立文件。

在示例中,属性文件存储了要显示的音讯的可翻译文本。在程序国际化之前,该文本的英文版本是硬编码的,并在System.out.println中申明。默认属性文件名为MessagesBundle.properties,蕴含以下行:

问候=你好
辞别=再见
询问=你好吗?
当初,音讯位于属性文件中,它们能够被翻译成各种语言。不须要批改源代码。法语翻译人员创立了一个名为Messages Bundle fr fr . properties的名称,其中蕴含以下几行:

问候=你好。
再见。
询问=评论allez-vous?
请留神,等号左边的值已被转换,但右边的键没有扭转。这些键不能被扭转,因为当程序取得翻译的文本时它们将被援用。

属性的名称很重要。例如,音讯bundle fr fr.properties文件蕴含FR语言代码和FR国家代码。创立广告代码时也会用到这些代码区域设置对象。

2。定义区域
的Locale对象标识特定的语言和国家。以下语句定义了语言为英语、国家为美国的区域设置:

aLocale =新的区域设置(" en "," US ");
下一个示例创立一个对象,其中区域设置在加拿大和法国应用法语:

caLocale =新的区域设置(" fr "," CA ");
frLocale =新的区域设置(" fr "," FR ");
该打算是灵便的。该程序不应用硬编码的语言和国家代码,而是在运行时从命令行获取它们:

String language = new String(args[0]);
String country = new String(args[1]);
currentLocale =新的区域设置(语言,国家);
Locale对象只是一个标识符。定义一个区域设置,而后将其传递给执行有用工作的其余对象,例如格式化日期和数字。这些对象是区域敏感的,因为它们的行为是基于区域的。ResourceBundle是区域敏感对象的一个例子。

3。创立ResourceBundle
ResourceBundle对象蕴含特定于区域设置的对象。您应用ResourceBundle对象来隔离敏感数据,例如可翻译的文本。在示例程序中,ResourceBundle由蕴含咱们想要显示的音讯文本的属性文件反对。

的ResourceBundle创立如下:

messages = resource bundle . get bundle(" messages bundle ",current locale);
参数被传递给getBundle办法,以确定将拜访哪个属性文件。第一个参数MessagesBundle指的是这组属性文件:

MessagesBundle_en_US .属性
音讯绑定_fr_FR.properties
MessagesBundle_de_DE .属性
的区域设置是getBundle,它指定抉择了哪个MessagesBundle文件。什么时候。。。创立的区域设置时,语言代码和国家代码已传递给其构造函数。请留神,随后的语言和国家代码音讯是在属性文件的名称中。

当初你要做的就是从ResourceBundle开始。

4。从ResourceBundle获取文本
该文件蕴含键值对。包含程序将显示的翻译文本。能够从ResourceBundle和getString办法开始。例如,要检索由greetings键标识的音讯,能够如下调用getString:

string msg 1 = messages . getstring(" greetings ");
示例程序应用关键字greetings,因为它反映了音讯的内容,但它可能曾经应用了另一个字符串,如s1或msg1。请记住,这个键是硬编码在程序中的,它必须存在于属性文件中。如果您的翻译器不小心批改了属性文件中的键,getString将找不到该音讯。

论断
仅仅...如你所见,将程序国际化并不难。它须要一些打算和一些额定的编码,但益处是微小的。为了让您对国际化过程有一个大抵的理解,本课中的示例程序通过了无意的简化。在浏览前面的课程时,你会理解到Java编程语言更高级的国际化性能。