国际化操作

来源:互联网 发布:js方法同步执行 编辑:程序博客网 时间:2024/06/05 17:12
要实现语言的统一,那么唯一的方式就是将所有需要显示的语言定义在各自的资源文件里面.
所谓的国际化应用就是根据当前的语言环境读取指定的语言资源文件;

如果想要实现国际化的操作,那么首先解决读取资源文件问题 , 后缀为*。properties 里面保存的内容按照 “key = value” 的形式保存,命名标准与java类一样,

保存在src里, 会自动保存在根目录下;
如果保存的是中文信息,那么必须改为unicode编码;
示例:info = 中华人民共和国
这里面的保存的info是这个信息的key,以后根据这个info获得信息;

如果要获取资源文件的信息,使用java.unit.ResourceBundle类;
这是一个抽象类,但是这个类的内部提供一个static方法,用来取得本类对象

根据当前语言环境取出:
public static final ResourceBundle getBundle(String baseName)
设置指定语言环境:
public static final ResourceBundle getBundle(String baseName, Locale locale)

当取得了ResourceBundle类对象之后通过以下的方法读取数据。
简单读取:public final String getString(String key)

java.text是专门负责程序化处理的一个包,在这个包里面,有一个专门处理占位数据的操作类:
Messageformat;
格式化文本:format public static String format(String pattern, Object... arguments)
(java.text)
{用于迭代文本的类
用于格式化和分析的类
用于整理字符串的类}
示例:
package com.internation;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ResourceBundle;
import javax.annotation.Resource;

public class test {
public static void main(String[] args) {
//访问的时候一不定要加上后缀,因为默认的后缀就是properties
//访问Message.properties文件一定要放在CLASSPATH路径下
ResourceBundle rb = ResourceBundle.getBundle("Message");
String str = rb.getString("msg.wel");//具备占位符的内容
System.out.println(str);
//format格式化一个对象数组,并将 MessageFormat 的模式添加到所提供的 StringBuffer,用格式化后的对象替换格式元素。这等效于
System.out.println(MessageFormat.format(str, new SimpleDateFormat("yyy-MM-dd").format(new Date()) ,"谭大爷"));
}
}
Locale保存的是一个国家的区域和语言编码;
中国:zh_CN
.....

可以在定义资源文件的时候加上指定的语言编码 , 例如:
范例:定义中文的资源文件——Message_zh_CN.propperties;
package com.internation;

import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;

import javax.annotation.Resource;

public class testDemo {
public static void main(String[] args) {
Locale lc = new Locale("en","US");//根据语言和国家/地区构造一个语言环境。
ResourceBundle rb = ResourceBundle.getBundle("Message",lc);
String str = rb.getString("msg.wel");//具备占位符的内容
System.out.println(MessageFormat.format(str, "!!"));
}
}



设置的BaseName设置的一定是Message,所有的语言代码由Local类设置
构造方法:public Locale(String language, String country)
取得当前语言环境:public static Locale getDefault()
如果已经存在有特定的语言资源文件,那么久不会读取其他的不设置语言的资源文件
特定语言的资源文件读取的优先级高于公共语言资源文件(既没加_zh_CN之类) 读取的优先级

总结:
1。资源文件要求文件名称每个单词首字母大写,而后缀必须是"*.properties";
2。通过ResourceBundle可以读取在指定的CLASSPATH下的资源文件,读取时不需要输入文件后缀;
动态的文本占位符问题:MessageFormat;
3。Locael用于读取指定的资源文件的语言环境;










0 0