Java语言的国际化

国际化就是指设计一个应用程序,该程序可以应用于不同的语言和地区,而不需要改变源程序。其实,就是让你的软件可以有各种语言的版本,比如在网站上提供一个语言选单,不同地区的用户可以选择自己的区域便可以查看不同的页面;或者在软件安装过程中选择不同语言包,让软件显示为自己的语言。这些还只是停留在标签显示的层面,也就是一些显示给用户的文本,但是还需要考虑的一些方面就是象时间、日期、数字、温度、电话、邮编等,都是不同的地区有不同的表现方式的。

Java语言中专门有处理国际化的机制,对于上面所提到的这两种问题都有很好的解决方案。

首先,对于固定的消息(Message--这里的消息指的是一些提示信息,比如button上的OK,在中文中换成“确定”这种的,它的信息不是根据软件的运行而动态变化的)可以采用资源配置文件的方式来进行,比如可以准备两个配置文件English.properties和Chinese.properties,文件中采用名值对的方式标识消息,例如:buttonok=OK 和 buttonok=确定 ,在这样的文件中可以定义整个系统的所有需要显示的消息。有了这样的文件,系统需要哪种语言装载哪种配置文件即可。而Java语言已经提供了针对这种方式的专门的实现

第一步,先创建配置文件,Java规定这种配置文件的名字格式为MessageBundle_language_region.properties,第一个字段可以更改为任意字符串,第二个字段为该配置文件所规定的语言,比如en、zh等,第三个为地区标识,比如US、CN等。可以使用Locale.getAvailableLocales();该方法获得系统所支持的所有语言和地区。配置文件的内容

MessageBundle_en_US.properties

 

greetings = Hello
    farewell = Goodbye
    inquiry = How are you?

 

MessageBundle_zh_CN.properties

 

greetings = 你好
    farewell = 再见
    inquiry = 你好吗?

 

第二步,定义Locale变量,Java的ResouceBundle类用该变量来获得不同的配置文件

Locale usa = new Locale("en", "US");

Locale china = new Locale("zh", "CN");

第三步,ResourceBundle类,专门用来装载不同语言的配置文件,并获得各个key对应的value值

ResouceBundle messages = ResourceBundle.getBundle("MessagesBundle",currentLocale);

第一个参数是你的所有的配置文件的开头第一个字符串(所有的其他配置文件也要有相同的开头字符串),第二个参数为你所要求的不同的地区表示。例如

ResourceBundle.getBundle("MessagesBundle",usa); 将获得配置文件  MessageBundle_en_US.properties

ResourceBundle.getBundle("MessagesBundle",china); 将获得配置文件MessageBundle_zh_CN.properties

 

第四步,使用方法。在需要配置文件中的字符信息的时候,message.getString("greetings");便可以

 

需要注意的是,Java内部使用unicode进行编码,所以在用上面的方法进行国际化时候需要注意,中文的配置文件在编写完成后需要使用JDK 自带的native2ascii.exe进行转化,使用Eclipse的朋友可以使用PropertyEditor这个插件,更新地址是:http://propedit.sourceforge.jp/eclipse/ 。

 

其次,对于非固定message的信息的国际化,比如日期的显示方式(Date)各个国家地区都不一样。而Java提供了Format类,对应的Date可以使用DateFormat类,具体的使用方法如下

DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT, currentLocale);
    Date today = new Date();
    String dateOut = dateFormatter.format(today);

 

注意第一行,获得DateFormat实例采用了DEFAULT模式,DateFormat提供了

DEFAULT

SHORT

MEDIUM

LONG

FULL

五种内置的方式,当然你也可以自定义(具体使用可以参考http://java.sun.com/docs/books/tutorial/i18n/format/dateFormat.html),然后第二个参数给出了地区,不同的地区会有不同的显示风格。

这样便可以实现日期显示的国际化,同样对于Time、Number等的显示也都可以用类似 的方法进行国际化(参考 http://java.sun.com/docs/books/tutorial/i18n/format/index.html)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值