一,本章目标
掌握国际化程序的基本实现原理
掌握资源文件的使用
掌握Locale类的作用
掌握ResourceBudle类的作用
可以使用MessageFormat处理动态文本
了解资源类的使用
二,具体内容
对于各个国家而言,每一个程序的代码是不会有任何变化的,但是只是其西显示的文字差异而已
程序根据不同的语言环境找到不同的资源文件,之后从资源文件中取出内容,资源文件中的内容都是以Key-》value的形式保存,所以在读取的时候通过key找到Value即可
Locale类:
此类表示本地,实际上是使用ISO的编码封装类。对于各个国家来说都存在一个唯一的编码,那么这种编码就成为ISO变啊,使用Locale可以指定好一个具体的国家编码
中国的编码:zh-CN
英国,美国编码:en-us
这些编码都可以在浏览器中找到。
ResourceBundle类:
此类专门完成属性文件的读取操作,读取的时候直接指定文件名称即可,不需要指定后缀,后缀统一为*.properties,可以根据Locale所指定的区域码来自动选择所需要的资源文件。此类是一个抽象类,可以通过getBundle方法返回一个ResourceBundle对象和指定需要操作的文件。此方法找到的是默认的操作系统的语言对象。
实例操作:
定义一个资源文件:
其中info是程序中需要的内容,HELLO是info所 指向的具体内容。从资源文件中读取内容。
java国际化程序实现:
开发要求:可以根据不同的国家输出不同国家的你好
以上的信息确实读取出来了,但是又一点要注意,对于中文的资源文件,虽然现在可以直接通过文件读取出来,但是这样做是不合理的,应该将其进行Unicode编码,转换为java认识的16进制,这样可以避免一些系统带来乱码的问题。
记住,只要是中文,就要进行转码操作。
处理动态文本:
之前资源文件的所有内容是固定的,现在如果有些内容,你好,XXX!那么此时就必须在资源文件中进行一些动态文本的配置,设置占位符,这些符号中的内容暂时不固定,而是在程序执行的时候由程序进行设置的,而想实现这样的功能,则必须要使用MessageFormat类。
此在Format类中还存在数字格式化:NumberForamat和DataFormat。
占位符使用{数字}表示,例如:第一个内容{0},第二个内容{1}
修改资源文件:
在MessageForamt中主要使用的是format方法。
java可变参数:
在JDK1.5之后,增加了可以向方法里边传递可变的参数。
测试参数传递:
如果以上的操作不能明确指明有多少个参数,也能传递一个数字。
使用一个类代替资源文件:
以上的应用已经是国际化的实际效果。
所有要显示的内容应该放在资源文件中,但是也可以用类来直接存放资源文件,此类必须要继承ResourceBundle。
不管资源类还是资源文件,找的时候都是Message,如果现在多个资源文件一起出来,那么找到的是哪一个呢?
实际上此时就需要优先级。
①Message_zh_CN.class
②Message_zh_CN.properties
③Message.properties
三,总结
国际化程序的实现的思路:程序与现实分离,根据不同的Locale指定的区域找到不同的资源文件,根据其key找到value。
MessageFormat是Format的子类。