java的本地化问题 (1)
[ 来源:互网络 | 更新日期:2007-09-01 07:26:56 | 浏览次数:19641]
简介:?不同地区码的识别 Java 中用Locale 类识别不同的地区码。创建Locale 类的实例时指定了语言代码和地区代码。创建GB 中文和BIG5 中文资源的Locale 类实例的语句分别如下:zhLocale=new Locale("zh","CN");twLocale=new Locale("tw","TW")。此构造函数第一个参数是ISO -639 中定义的语言代码(http://www
一、实现目标
作为i18n 程序,不单是能够识别不同编码这么简单。它应能解决如下问题:
*能识别不同的编码方式,如GB 码、BIG5 码等;
*与编码有关的元素,如状态行、消息、按钮的caption 等应在程序之外存储。使新增一种语言时不用修改程序;
*根据不同的语言习惯动态调整与语言相关的元素,如数字、金额、日期等的显示。
二、解决方法
1.?不同地区码的识别
Java 中用Locale 类识别不同的地区码。创建Locale 类的实例时指定了语言代码和地区代码。创建GB 中文和BIG5 中文资源的Locale 类实例的语句分别如下:zhLocale=new Locale("zh","CN");twLocale=new Locale("tw","TW")。此构造函数第一个参数是ISO -639 中定义的语言代码(http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt);第二个参数为ISO -3166 中定义的国家代码(http://www.chemie. fu -berlin.de/diverse/doc/ISO ?3166.html)。当用户选定了适用的语言后,应将此Locale 设为默认值:Locale.setDefault(new Locale("zh","CN")).
2. 与语言相关的资源单独存放
Java 提供了两种方法存放与语言相关的资源。一种是用文本文件;另一种是用ListResourceBundle 资源类。下面分别阐述两者的不同之处。
*文本文件
使用文本文件存放资源的好处是简单易用。可以用任何文本编辑器编写此文件,而且当修改资源时无须重新编译程序。其格式是´ 键= 值´ 的列表。例子如下:
#The list in WebTaxResource_zh_CN.properties
button1= 税金
button2= 税率
status1= 初始化中
其中以´ #´ 开头的行为注释行。对应每一种语言写一个这样的资源文件,但所有的资源文件都必须包含相同的键。
*ListResourceBundle 资源类
虽然用文本文件存储资源非常容易,但它只能存储字符对象。而对于数字、自定义对象等它就无能为力了。因此Java 提供了ListResourceBundle 类。其缺点是每次对资源的修改都必须重新编译程序。此类的结构如下:
//file WebTaxResource_zh_CN.java
import java.util. *;
public class WebTaxResource_zh_CN extends
ListResourceBundle {
static final Object[][] contents = {
{"frametitle"," 工资、薪金所得适用"},
{"label_qizhengdian"," 起征点:"},
{"label_shuikuan"," 税款:"},
{"label_shourue"," 收入额:"},
{"checkbox_qiushouru"," 求收入"},
{"checkbox_qiushuie"," 求税额"},
{"lable1"," 简易税金计算器"},
{"button1"," 工资、薪金个人所得税计算"},
{"button_caculate"," 计算"},
};
public Object[][] getContents() {
return contents;
}
}
其中两维的Object 数组存放的是键-值对。每对中的第一个元素是键。在各个资源类中所有键的数量和标识都必须完全一致。
3. 资源的获取
不同语言的资源存放的文件名都不相同,那如何从正确的文件取得我们需要的资源呢?留意到前面例子中properties 文件名和ListResourceBundle 类名中下划线后的部分吗?没错,它们就是在


您的位置:
