java程序都国际化思路是将程序中的标签、提示等信息放在资源文件中,程序须要支持哪些国家、语言环境,就对应提供哪些相应的资源文件。资源文件就是key-value,每一个资源文件的key能够保持不变的,但value则虽不一样的国家、语言而改变。java
1.java程序国际化主要通三个类来实现的,java.util.ResourceBundle:用于加载国家、语言资源包;java.util.Locale:用于封装特定的国家|区域、语言环境。java.text.MessageFormat:用于格式化带占位符的字符串。数组
2.java不可能支持全部的国家和语言,咱们能够经过调用Locale类的getAvailableLocales()方法,该方法返回一个Locale数组,该数组里面包含了java支持的国家和语言。code
package com.lanou.test; import java.util.Locale; public class Demo005 { public static void main(String[] args) { // TODO Auto-generated method stub Locale[] localelist = Locale.getAvailableLocales(); for (int i = 1; i < localelist.length; i++) { System.out.println(localelist[i].getDisplayCountry() + "=" + localelist[i].getCountry() + " " + localelist[i].getDisplayLanguage() + "=" + localelist[i].getLanguage()); } } }
3.使用MessageFormat处理包含占位符的字符串,除了使用属性的文件做为资源文件外,java也容许使用类文件代替资源文件,即将全部的key-value对存入到class的文件中,而不是属性文件。使用类文件代替资源文件必须知足条件为该类名字必须为baseName_language_country,这与属性文件的命名类似。该类必须继承ListResourceBundle,并重写getContents(),该方法返回Object数组,该数组的每一项都是key-value对。orm
4.MessageFormat类是抽象类Format的子类,Format抽象类的另外两个子类:NumberFormat和DateFormat,他们分别是用来实现数值、日期的格式化,能够将数值、日期转化成字符串,也能够将字符串装换成数值日期。NumberFormat和DateFormat都包含了format()和parse(),其中format()用于将数组、日期格式转换成字符串,parse()用于将字符串解析成数值、日期。NumberFormat也是一个抽象基类,因此没法用构造器来建立NumberFormat对象,可经过以下几个类方法来获得NumberFormat对象。getCurrencyInstance():返回默认的locale的货币格式器。getInterInstance():返回默认Locale的整数格式器。getNumberInstance():返回默认Locale的通用的数字格式。getPrecentInstance():返回默认Lacale的百分数格式器。一旦获取了NumberFormat对象能够调用他的format()方法来格式化数值。对象
package com.lanou.test; import java.text.NumberFormat; import java.util.Locale; public class Demo06 { public static void main(String[] args) { // TODO Auto-generated method stub double a=13140.126; Locale[] locales={Locale.CHINA,Locale.JAPAN, Locale.ENGLISH,Locale.US}; NumberFormat[] nf=new NumberFormat[12]; for(int i=0;i<locales.length;i++){ nf[i*3]=NumberFormat.getNumberInstance(locales[i]); nf[i*3+1]=NumberFormat.getPercentInstance(locales[i]); nf[i*3+2]=NumberFormat.getCurrencyInstance(locales[i]); } for(int i=0;i<locales.length;i++){ String tip=i==0?"------中国的格式------": i==1?"----日本的格式--------": i==2?"----英国格式-------":"------美国的格式-------" ; System.out.println(tip); System.out.println("通用的数值格式:" +nf[i].format(a)); System.out.println("百分数比值格式:" +nf[i*3+1].format(a)); System.out.println("货币数值格式:" +nf[i*3+2].format(a)); } } } 结果: ------中国的格式------ 通用的数值格式:13,140.126 百分数比值格式:13,140.126 货币数值格式:13,140.126 ----日本的格式-------- 通用的数值格式:13,140.126 百分数比值格式:1,314,013% 货币数值格式:¥13,140 ----英国格式------- 通用的数值格式:13,140.126 百分数比值格式:1,314,013% 货币数值格式:¤13,140.13 ------美国的格式------- 通用的数值格式:13,140.126 百分数比值格式:1,314,013% 货币数值格式:$13,140.13
4.使用DateFormat格式化日期、时间,它与NumberFormat类似也是一个抽象的类,也提供以下几个类方法来获取DateFormat对象。getDateInstance():返回一个日期格式器,它格式化后的字符串只有日期、没有时间。getTimeInstance():返回一个时间格式器,他的格式后的字符串只有时间,没有日期。getDateTimeInstance():返回一个时间日期的格式,他的格式后的字符串既有时间也有时间。继承
5.使用SimpleDateFormat格式化日期,DateFormat的parse()方法能够把字符串解析成Date对象,但实际上DateFormat的parse()方法还不够灵活--他要求必须是解析的字符串,而SimpleDateFormat是DateFormat的子类,SimpleDateFormat能够很是灵活的格式化Date,能够用于解析各类格式的日期字符串,建立SimpleDateFormat对象是须要传入一个Pattern字符串,这只是一个日期模型。ip
package com.lanou.test; import java.text.SimpleDateFormat; import java.util.Date; public class Demo07 { public static void main(String[] args) { // TODO Auto-generated method stub Date date=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("Gyyyy-mm--dd--hh--mm--ss"); String datedtr=sdf.format(date); System.out.println(datedtr); } }