java学习笔记12--国际化 (一)

2014-11-24 10:46:25 · 作者: · 浏览: 0

国际化的操作就是指一个程序可以同时适应多门语言,即:如果现在程序者是中国人,则会以中文为显示文字,如果现在程序的使用者是英国人,则会以英语为显示的文字,也就是说可以通过国际化操作,让一个程序适应各个国家的语言要求。

程序根据不同的语言环境找到不同的资源文件,之后从资源文件中取出内容,资源文件中的内容都是以key->value的形式保存的,所以在读取的时候通过其key找到对应的value

国际化实现的支持类

如果要想实现java程序的国际化操作必须通过以下的三个类完成:

java.util.Locale :用于表示一个国家语言类。

java.util.ResourceBundle:用于访问资源文件.

java.text.MessageFormat:格式化资源文件的占位字符串。

Local类

Local表示的是本地,实际上使用的是一个ISO编码的封装类。对于各个国家来说都存在一个唯一的编码,那么这种编码就称为ISO编码,使用Local可以指定好一个具体的国家编码。

例如: 中国的编码:zh_CH

英语-美国的编码:en-US

法语的编码:fr-FR

ResourceBundle

此类是专门完成属性文件读取操作的,读取的时候直接指定文件名即可(此文件名称一般不需要指定后缀,后缀同意为*.properties),可以根据Locale所指定的区域码来自动选择所需要的资源文件。

public static final ResourceBundle getBundle(String baseName) ,此方法就是指定要操作的资源文件,此方法找到的是默认的操作系统的语言Locale对象

public static final ResourceBundle getBundle(String baseName,Locale locale),此方法也是指定操作的资源文件,并传入Locale对象。

public final String getString(String key)根据key取得对应的value

下面通过一道程序来观察资源文件的使用,以及如何使用ResourceBundle读取资源文件。

message.properties

[java] info=HELLO

info=HELLO

[java] package com.itmyhome;

import java.util.ResourceBundle;

public class T {
public static void main(String[] args) throws Exception{
ResourceBundle rb = ResourceBundle.getBundle("message");
System.out.println(rb.getString("info"));
}
}

package com.itmyhome;

import java.util.ResourceBundle;

public class T {
public static void main(String[] args) throws Exception{
ResourceBundle rb = ResourceBundle.getBundle("message");
System.out.println(rb.getString("info"));
}
}
PS:message.properties默认查找路径为classpath下,如果不在此路径下并且为指定完整包路径名的话将报如下异常

[java] Can't find bundle for base name message, locale zh_CH

Can't find bundle for base name message, locale zh_CH

java国际化程序实现

可以根据不同的国家输出不同国家的你好:

中文:你好!

英文:Hello

法语:Bonjour!

分别定义不同的资源文件,此时需要定义出三个资源文件,同时在定义资源文件的时候需要指定好此资源文件对应的语言编码:

中文:Message_zh_CH.properties

英文:Message_en_US.properties

法文:Message_fr_FR.properties

Message_zh_CN.properties

[java] info=\u4f60\u597d

info=\u4f60\u597dMessage_en_US.properties

[java] info=Hello

info=HelloMessage_fr_FR.properties

[java] info=Bonjour

info=Bonjour[java] view plaincopyprint package com.itmyhome;

import java.util.Locale;
import java.util.ResourceBundle;

public class T {
public static void main(String[] args) throws Exception{
Locale zhLocale = new Locale("zh","CN"); //表示中国地区
Locale enLocale = new Locale("en","US"); //表示美国地区
Locale frLocale = new Locale("fr","FR"); //表示法国地区
ResourceBundle zhRb = ResourceBundle.getBundle("Message",zhLocale);
ResourceBundle enRb = ResourceBundle.getBundle("Message",enLocale);
ResourceBundle frRb = ResourceBundle.getBundle("Message",frLocale);
System.out.println(zhRb.getString("info"));
System.out.println(enRb.getString("info"));
System.out.println(frRb.getString("info"));
}
}

package com.itmyhome;

import java.util.Locale;
import java.util.ResourceBundle;

public class T {
public static void main(String[] args) throws Exception{
Locale zhLocale = new Locale("zh","CN"); //表示中国地区
Locale enLocale = new Locale("en","US"); //表示美国地区
Locale frLocale = new Locale("fr","FR"); //表示法国地区
Resou