java国际化

 

一、概述

 
l软件的本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯。
l软件的国际化:软件开发时,让它能支持多个国家和地区的本地化应用。使得应用软件能够适应多个地区的语言和文化风俗习惯。
l随用户区域信息而变化的数据称为本地信息敏感数据。例如数字,货币等数据。
l应用程序的国际化就是在应用软件的设计阶段,使软件能够支持多个国家和地区的用户的使用习惯。
l国际化又称为i18n:internationalization
 

二、软件国际化特征

     一个国际化的应用软件应有下面的特性:
    对于程序中的本地信息敏感的数据(日期,货币等)能根据当前所在的国家或地区的文化习惯进行显示
    对于文本元素(错误提示信息,状态信息等)不是直接写在应用程序中,而是存储在应用程序外部的资源文件中,在       应用程序中通过程序代码来动态获得这些数据
    无需修改和重新编译程序就能支持新的国家或地区的用户使用

三、Java 国际化解决方案

l文本信息不能硬编码在程序代码中,而是需要将它们从应用程序中分离出来,在软件运行时根据本地信息读取相应的文本内容进行显示
l数值,货币,时间,日期等本地敏感数据可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java中提供了解决这些问题的API(位于java.util包和java.text包中)

四、Locale类

lLocale实例对象代表一个特定的地理,政治或文化上的区域
l一个Locale对象本身不会验证它代表的语言和国家地区信息是否正确,只是向本地敏感的类提供本地信息,与国际化相关的格式化和解析任务由本地敏感的类(若JDK中的某个类在运行时需要根据Locale对象来调整其功能,这个类就称为本地敏感类)去完成
	public static void main(String[] args) {
		
		Locale china = Locale.CHINA;	
		System.out.println(china.getCountry());//CN
		System.out.println(china.getLanguage());//zh
		System.out.println(china.getDisplayCountry());//中国
		System.out.println(china.getDisplayLanguage());//中文
		/***************************************************/
		china = Locale.US;	
		System.out.println(china.getCountry());//US
		System.out.println(china.getLanguage());//en
		System.out.println(china.getDisplayCountry());//美国
		System.out.println(china.getDisplayLanguage());//英文
	}
 

五、DateFormat类

DateFormat 类可以将一个日期/时间对象格式化为表示某个国家地区的日期/时间字符串,也可以将表示某个本地的日期/时间的字符串解析为相应的日期/时间对象
DateFormat 类定义了一些用于描述日期/时间的显示模式的 int 型的常量,包括FULL, LONG, MEDIUM, DEFAULT, SHORT,这些常量用于描述表示日期/时间字符串的长度。这些常量说明表示的日期/时间的确切格式取决于具体的国家和地区

 

 

获取 DateFormat 对象
DateFormat 对象通常不是线程安全的,每个线程都应该创建自己的 DateFormat  实例对象
DateFormat 对象的方法:
format: 将日期/时间对象格式化为符合某个本地环境习惯的字符串
parse:将符合某个本地环境习惯的日期/时间字符串解析为日期/时间对象
	public static void main(String[] args) throws ParseException {
		
		Date date = new Date();
		/******演示format() Date --> text **********************************************************************/
		//把日期对象格式化为本地语言环境的字符串形式
		//中文环境
		DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA);
		String str = df.format(date);
		System.out.println("SHORT 短格式:"+str);//13-2-16		
		df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA);
		str = df.format(date);
		System.out.println("MEDIUM 中格式:"+str);//2013-2-16
		df = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA);
		str = df.format(date);
		System.out.println("LONG 长格式:"+str);//2013年2月16日
		
		//英文环境
		System.out.println("---------------------------------------------------");
		df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
		str = df.format(date);
		System.out.println("SHORT 短格式:"+str);//2/16/13	
		df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US);
		str = df.format(date);
		System.out.println("MEDIUM 中格式:"+str);//Feb 16, 2013
		df = DateFormat.getDateInstance(DateFormat.LONG, Locale.US);
		str = df.format(date);
		System.out.println("LONG 长格式:"+str);//February 16, 2013
		/*****演示parse() text --> Date***************************************************************************/
		//把本地本地语言环境的日期格式的字符串转成日期对象
		//中文日期字符串转成日期对象
		String s = "2013年2月16日";
		df = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA);
		Date parse = df.parse(s);
		System.out.println("转换中文环境的的日期字符串成日期对象:"+parse);//Sat Feb 16 00:00:00 CST 2013
		//英文日期字符串转成日期对象
		s = "February 16, 2013";
		df = DateFormat.getDateInstance(DateFormat.LONG, Locale.US);
		Date parse2 = df.parse(s);
		System.out.println("转换英文环境的的日期字符串成日期对象:"+parse2);//Sat Feb 16 00:00:00 CST 2013
	}
 

六、NumberFormat类

NumberFormat 可以将一个数值格式化为符合某个国家地区习惯的数值字符串,也可以将符合某个国家地区习惯的数值字符串解析为对应的数值
NumberFormat 类的方法:
• format 方法:将一个数值格式化为符合某个国家地区习惯的数值字符串
• parse 方法:符合某个国家地区习惯的数值字符串解析为对应的数值
	public static void main(String[] args) throws ParseException {
		/******演示format() Number --> text************************/
		//中文环境
		Number num = 23434.34d;
		NumberFormat nf = NumberFormat.getInstance(Locale.CHINA);
		String format = nf.format(num);
		System.out.println("把数字转换成中文的数字格式:"+format);//23,434.34
		//德文环境
		nf = NumberFormat.getInstance(Locale.GERMAN);
		format = nf.format(num);
		System.out.println("把数字转换成德文的数字格式:"+format);//23.434,34
		/*******演示parse() text --> Number************************/
		String source = "23,434.34";
		//中文环境
		nf = NumberFormat.getInstance(Locale.CHINA);
		Number parse = nf.parse(source);
		System.out.println("把中文的数字格式字符串转成Number: "+parse);//23434.34
		//德文环境
		source = "23.434,34";
		nf = NumberFormat.getInstance(Locale.GERMAN);
	    parse = nf.parse(source);
	    System.out.println("把德文的数字格式字符串转成Number: "+parse);//23434.34
	}
 

七、MessageFormat类

lMessageFormat类提供了一种参数替换模式字符串中的占位符的方式,它将根据模式字符串中包含的占位符产生一系列的格式化对象,然会调用这些格式化对象对参数进行格式化,并用格式化后的结果字符串替换模式字符串中的相应占位符。

 

模式字符串与占位符

模式字符串:

 

      On {0}, {1} destroyed {2} houses and caused {3} of damage.

对模式字符串进行格式化操作时,需要采用数组的方式提供模式字符串中的每个占位符所对应的参数.
占位符有以下三种方式:
{argumentIndex}: 0-9之间的数字,表示要格式化对象数据在参数数组中的索引号
{argumentIndex,formatType}: 参数的格式化类型
{argumentIndex,formatType,FormatStyle}: 与指定的格式化类型对应的模式,它的值必须是与相应的格式化类型匹配的合法模式或表示合法模式的字符串

MessageFormat格式化模式字符串

MessageFormat 类可以格式化模式字符串,它根据其中的占位符产生一系列的格式化对象,然后调用这些格式化对象对参数进行格式化,并用格式化后的结果字符串替换模式字符串中的相应占位符。
格式化模式字符串的步骤:
创建 MessageFormat 对象:须指定格式化的模式字符串,也可以指定 Locale对象来按某个国家地区的习惯进行格式化。
调用 MessageFormat 对象的 format 方法执行格式化操作:须为format 方法传递一个数组类型的参数,数组中的每个元素分别用于代替模式字符串中的与其索引号相对应的占位符
String source="I love {0} now date is {1}";
Object params[]=new Object[]{"mary",new Date()};
String str=MessageFormat.format(source, params);
System.out.println(str);
       
MessageFormat mf=new MessageFormat(source,Locale.CHINA);
StringBuffer sf=new StringBuffer();
 mf.format(params, sf, null);
 System.out.println(sf.toString());
未完
 
 
 
 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值