java常用类库---国际化程序

一,本章目标

掌握国际化程序的基本实现原理

掌握资源文件的使用

掌握Locale类的作用

掌握ResourceBudle类的作用

可以使用MessageFormat处理动态文本

了解资源类的使用


二,具体内容

java常用类库---国际化程序

对于各个国家而言,每一个程序的代码是不会有任何变化的,但是只是其西显示的文字差异而已

java常用类库---国际化程序

程序根据不同的语言环境找到不同的资源文件,之后从资源文件中取出内容,资源文件中的内容都是以Key-》value的形式保存,所以在读取的时候通过key找到Value即可

java常用类库---国际化程序


Locale类:

此类表示本地,实际上是使用ISO的编码封装类。对于各个国家来说都存在一个唯一的编码,那么这种编码就成为ISO变啊,使用Locale可以指定好一个具体的国家编码

中国的编码:zh-CN

英国,美国编码:en-us

这些编码都可以在浏览器中找到。


ResourceBundle类:

此类专门完成属性文件的读取操作,读取的时候直接指定文件名称即可,不需要指定后缀,后缀统一为*.properties,可以根据Locale所指定的区域码来自动选择所需要的资源文件。此类是一个抽象类,可以通过getBundle方法返回一个ResourceBundle对象和指定需要操作的文件。此方法找到的是默认的操作系统的语言对象。

实例操作:

定义一个资源文件:

java常用类库---国际化程序

其中info是程序中需要的内容,HELLO是info所 指向的具体内容。从资源文件中读取内容。

java常用类库---国际化程序

java国际化程序实现:

开发要求:可以根据不同的国家输出不同国家的你好

java常用类库---国际化程序

以上的信息确实读取出来了,但是又一点要注意,对于中文的资源文件,虽然现在可以直接通过文件读取出来,但是这样做是不合理的,应该将其进行Unicode编码,转换为java认识的16进制,这样可以避免一些系统带来乱码的问题。

java常用类库---国际化程序

记住,只要是中文,就要进行转码操作。


处理动态文本:

之前资源文件的所有内容是固定的,现在如果有些内容,你好,XXX!那么此时就必须在资源文件中进行一些动态文本的配置,设置占位符,这些符号中的内容暂时不固定,而是在程序执行的时候由程序进行设置的,而想实现这样的功能,则必须要使用MessageFormat类。

此在Format类中还存在数字格式化:NumberForamat和DataFormat。

占位符使用{数字}表示,例如:第一个内容{0},第二个内容{1}

修改资源文件:

java常用类库---国际化程序

java常用类库---国际化程序

java常用类库---国际化程序

在MessageForamt中主要使用的是format方法。

java常用类库---国际化程序

java常用类库---国际化程序

java常用类库---国际化程序

java可变参数:

在JDK1.5之后,增加了可以向方法里边传递可变的参数。

测试参数传递:

java常用类库---国际化程序

java常用类库---国际化程序

如果以上的操作不能明确指明有多少个参数,也能传递一个数字。

java常用类库---国际化程序

使用一个类代替资源文件:

以上的应用已经是国际化的实际效果。

所有要显示的内容应该放在资源文件中,但是也可以用类来直接存放资源文件,此类必须要继承ResourceBundle。

java常用类库---国际化程序

java常用类库---国际化程序

java常用类库---国际化程序


不管资源类还是资源文件,找的时候都是Message,如果现在多个资源文件一起出来,那么找到的是哪一个呢?

实际上此时就需要优先级。

①Message_zh_CN.class

②Message_zh_CN.properties

③Message.properties

三,总结

国际化程序的实现的思路:程序与现实分离,根据不同的Locale指定的区域找到不同的资源文件,根据其key找到value。

MessageFormat是Format的子类。