javaweb 国际化:DateFormat,NumberFormat,MessageFormat,ResourceBundle的使用
Javaweb国际化
DateFormat:格式化日期的工具类,本身是一个抽象类;
NumberFormat:格式化数字到数字字符串,或货币字符串的字符类;
MessageFormat:可以格式化模式字符串,模式字符串:带占位符的字符串:"Date:{0},Salary:{1}",可以通过format方法会模式字符串进行格式化
ResourceBundle:资源包类,在类路径(src)下需要有对应的资源文件:baseName.properties.其中baseName是基名;
文件名为:test_zh_CN.properties,文件为:date=\u65E5\u671F,salary=\u5DE5\u8D44
文件名为:test_en_US.properties,文件为:date=date,salary=salary
importjava.text.DateFormat;
importjava.text.MessageFormat;
importjava.text.NumberFormat;
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.Locale;
importjava.util.ResourceBundle;
importorg.junit.Test;
publicclassI18nTest{
/**
*ResourceBundle:资源包类.
*
*1.在类路径下需要有对应的资源文件:baseName.properties.其中baseName是基名.
*2.可以使用基名_语言代码_国家代码.properties来添加不同国家或地区的资源文件.i18n_zh_CN.properties
*3.要求所有基名相同的资源文件的key必须完全一致.
*4.可以使用native2ascii命令来得到汉字对一个的asc码.Eclipse内置了工具
*5.可以调用ResourceBundle的getBundle(基名,Locale实例)获取获取ResourceBundle对象
*6.可以调用ResourceBundle的getString(key)来获取资源文件的value字符串的值.
*7.结合DateFormat,NumberFormat,MessageFormat即可实现国际化.
*
*/
@Test
publicvoidtestResourceBundle(){
Localelocale=Locale.CHINA;
ResourceBundleresourceBundle=ResourceBundle.getBundle("test",locale);
System.out.println(resourceBundle.getString("date"));
System.out.println(resourceBundle.getString("salary"));
StringdateLabel=resourceBundle.getString("date");
StringsalLabel=resourceBundle.getString("salary");
Stringstr="{0}:{1},{2}:{3}";
Datedate=newDate();
doublesal=12345.12;
DateFormatdateFormat=DateFormat.getDateInstance(DateFormat.MEDIUM,locale);
StringdateStr=dateFormat.format(date);
NumberFormatnumberFormat=NumberFormat.getCurrencyInstance(locale);
StringsalStr=numberFormat.format(sal);
Stringresult=MessageFormat.format(str,dateLabel,dateStr,salLabel,salStr);
System.out.println(result);
}
/**
*MessageFormat:可以格式化模式字符串
*模式字符串:带占位符的字符串:"Date:{0},Salary:{1}"
*可以通过format方法会模式字符串进行格式化
*/
@Test
publicvoidtestMessageFormat(){
Stringstr="Date:{0},Salary:{1}";
Localelocale=Locale.CHINA;
Datedate=newDate();
doublesal=12345.12;
DateFormatdateFormat=DateFormat.getDateInstance(DateFormat.MEDIUM,locale);
StringdateStr=dateFormat.format(date);
NumberFormatnumberFormat=NumberFormat.getCurrencyInstance(locale);
StringsalStr=numberFormat.format(sal);
Stringresult=MessageFormat.format(str,dateStr,salStr);
System.out.println(result);
}
/**
*NumberFormat:格式化数字到数字字符串,或货币字符串的工具类
*1.通过工厂方法获取NumberFormat对象
*NumberFormat.getNumberInstance(locale);//仅格式化为数字的字符串
*NumberFormat.getCurrencyInstance(locale);//格式为货币的字符串
*
*2.通过format方法来进行格式化
*3.通过parse方法把一个字符串解析为一个Number类型.
*/
@Test
publicvoidtestNumberFormat()throwsParseException{
doubled=123456789.123d;
Localelocale=Locale.FRANCE;
//
NumberFormatnumberFormat=NumberFormat.getNumberInstance(locale);
Stringstr=numberFormat.format(d);
System.out.println(str);
NumberFormatnumberFormat2=NumberFormat.getCurrencyInstance(locale);
str=numberFormat2.format(d);
System.out.println(str);
str="123456789,123";
d=(Double)numberFormat.parse(str);
System.out.println(d);
str="123456789,12";
d=(Double)numberFormat2.parse(str);
System.out.println(d);
}
/*
*7.若有一个字符串,如何解析为一个Date对象呢?
*I.先创建DateFormat对象:创建DateFormat的子类SimpleDateFormat对象
*SimpleDateFormat(Stringpattern).
*其中pattern为日期,时间的格式,例如:yyyy-MM-ddhh:mm:ss
*II.调用DateFormat的parse方法来解析字符串到Date对象.
*/
@Test
publicvoidtestDateFormat2()throwsParseException{
Stringstr="1990-12-1212:12:12";
DateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddhh:mm:ss");
Datedate=dateFormat.parse(str);
System.out.println(date);
}
/**
*DateFormat:格式化日期的工具类.
*DateFormate本身是一个抽象类.
*
*1.若只希望通过DateFormat把一个Date对象转为一个字符串,则可以通过DateFormat的工厂方法来获取DateFormat对象
*2.可以获取只格式化Date的DateFormat对象:getDateInstance(intstyle,LocaleaLocale)
*3.可以获取只格式化Time的DateFormat对象:getTimeInstance(intstyle,LocaleaLocale)
*4.可以获取既格式化Date,也格式化Time的DateFormat对象:
*getDateTimeInstance(intdateStyle,inttimeStyle,LocaleaLocale)
*5.其中style可以取值为:DateFormat的常量:SHORT,MEDIUM,LONG,FULL.Locale则为代表国家地区的Locale对象
*6.通过DateFormat的format方法来格式化个Date对象到字符串.
*/
@Test
publicvoidtestDateFormat(){
Localelocale=Locale.US;
Datedate=newDate();
System.out.println(date);
//获取DateFormat对象
DateFormatdateFormat=
DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.MEDIUM,locale);
Stringstr=dateFormat.format(date);
System.out.println(str);
}
/**
*Locale:Java中表示国家或地区的类.JDK中提供了很多常量.
*也可以通过Locale(languageCode,countryCode)的方式来创建
*在WEB应用中可以通过request.getLocale()方法来获取.
*/
@Test
publicvoidtestLocale(){
Localelocale=Locale.CHINA;
System.out.println(locale.getDisplayCountry());
System.out.println(locale.getLanguage());
locale=newLocale("en","US");
System.out.println(locale.getDisplayCountry());
System.out.println(locale.getLanguage());
}
}
以上就是对Javaweb国际化的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!