程序国际化:
国际化是指应用程序运行时,可根据客户请求来自的国家/地区,语言的不同而显示不同的界面。
引入国际化的目的是为了提供自适应,更友好的用户界面,并不需要改变程序的逻辑功能,简称I18N,其中I是这个单词的第一个字母,18表示表示中间省略字母个数,而N代表这个单词的最后一个字母。(Internationalization)
本地化(Localization):可以称为L10N。
Java国际化思路:
Java.util.ResourceBundle:用于加载一个国家,语言资源包
Java.util.Locale:用于封装一个特定的国家/区域,语言环境
Java.text.MessageFormat:用于格式化带占位符的字符串
为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容是很多Key-value对,其中key是程序的使用部分,而value则是程序界面的显示字符串。
资源文件命名可以有如下三种方式:
baseNama_langueage_country.properties
baseName_language.propertises
baseName.propertises
java支持的语言和国家:
如需要获取Java所支持的语言和国家,可调用Locale类的getAvailableLocales方法获取,该方法返回一个Locale数组,该数组包含Java所支持的语言和国家。
Java程序国际化的关键类是ResourceBundle,他有一个静态方法:getBundle(String baseName,Locale locale),该方法根据Locale加载资源文件,而Locale封装了一个国家,语言
使用Message Format处理包含占位符的字符串:
使用类文件代替资源文件:
使用Java文件来代替资源文件的Java文件必须满足如下条件:
1. 类的名字必须为baseName_language_country,这与属性文件的命名相似。
2. 该类必须继承ListResourceBundle,并重写getContents方法,该方法返回Object数组,该数组的每一个项都是key-value对。
如果系统同时存在资源文件,类文件,系统将以类文件为主,而不会调用资源文件,对u于简体中文来说,搜索文件是这样的:
1. baseName_zh_CN.class
2. baseName_zh_CN.propertises
3. baseName_zh.class
4. baseName_zh_propertises
5. baseName.class
6. baseName.propertises
如果文件不存在,才会使用下一个,如果一直找不到对应的文件,系统就会抛出异常
使用NumberFormat格式化数字:
MessageFormat是抽象类Format的子类,format抽象类还有两个子类:NumberFormat和DateFormat,他们分别用以实现数字,日期的格式化。可以与字符串之间进行转化。
NumberFormat也是一个抽象类,所以无法通过他的构造器来创建NumberFormat对象。
使用Dateformat格式化日期:(和NumberFormat类似)
Dateformat的parse方法可以把一个字符串解析成Date对象,但要求被解析的字符串必须符合日期字符串的要求,否则将抛出ParseException异常
为了更好的格式化日期,解析日期字符串,Java提供了SimpleDateFormat类。