




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java的i18n问题 Java 的i18n 问题,即Java 的Internationalization 问题, 指的是如何使应用程序能够同时支持多种语言的问题。对我国这样的非英语国家而汉字又有多种编码方式的情况下具有现实意义。本文将对用java 编制i18n 程序的方法作一介绍。一、实现目标作为i18n 程序,不单是能够识别不同编码这么简单。它应能解决如下问题:能识别不同的编码方式,如GB 码、BIG5 码等;与编码有关的元素,如状态行、消息、按钮的caption 等应在程序之外存储。使新增一种语言时不用修改程序;根据不同的语言习惯动态调整与语言相关的元素,如数字、金额、日期等的显示。二、解决方法1.不同地区码的识别Java 中用Locale 类识别不同的地区码。创建Locale 类的实例时指定了语言代码和地区代码。创建GB 中文和BIG5 中文资源的Locale 类实例的语句分别如下:zhLocale=new Locale(zh,CN);twLocale=new Locale(tw,TW)。此构造函数第一个参数是中定义的语言代码;第二个参数中定义的国家代码。当用户选定了适用的语言后,应将此Locale 设为默认值:Locale.setDefault(new Locale(zh,CN). 2. 与语言相关的资源单独存放Java 提供了两种方法存放与语言相关的资源。一种是用文本文件;另一种是用ListResourceBundle 资源类。下面分别阐述两者的不同之处。文本文件使用文本文件存放资源的好处是简单易用。可以用任何文本编辑器编写此文件,而且当修改资源时无须重新编译程序。其格式是 键= 值 的列表。例子如下: WebTaxResource_zh_CN.propertiesbutton1= 税金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 类名中下划线后的部分吗?没错,它们就是在创建Locale 实例时指定的语言代码和地区代码!剩下的问题就是要解决下划线前面的基本类名部分了。它是由一个ResourceBundle 类的实例来指定的:ResourceBundle bundle;bundle=ResourceBundle.getBundle(WebTaxResource,currentLocale);getBundle 的第一个参数指定了资源文件和资源类的基本类名;第二个参数是你所创建的Locale 的实例,指定了当前程序所有资源默认的语言代码和地区代码。可见,资源文件名或类名是由 基本类名_ 语言代码_ 地区代码 组成的。Java 将先查找有无此名称的类,若没有则查找具有此名称的properties 文件。匹配了正确的资源文件名或类名后,要获取某键对应的值就变得相当容易。例如,要创建标识为 计算器 的标签,只要调用以下语句:label1=new Label(bundle.getString(label_ jisuanqi), Label.CENTER); getString 方法的参数是资源文件中的键名。除了getString 外,ResourceBundle 类还提供了其他方法获取不同的对象,如getStringArray、getObject 等(因为在ListResourceBundle 的实例中允许存在非字符对象)。4. 转换非Unicode 资源在Java 内部字符是用Unicode 字符表示的。Unicode 是一种16bit 的编码,支持大多数地区的语言。因此,无论是用文本文件还是用资源类的方式存储资源,都应该将非Unicode 字符转换为Unicode 字符。Java 为我们提供了转换的工具Native2ascii。将含有GB 编码的汉字的WebTaxResource_zh.CN.properties 文件转换为只含Unicode 字符的例子如下:native2ascii encoding GB2321 WebTaxResource_zh_CN.properties WebTaxResource_zh_CN.properties到此为止,一个支持i18n 的程序就已初步完成了。三、其他相关问题正如实现目标中所讲到,支持i18n 的程序不但要识别不同的编码方式,还要根据不同的语言习惯动态调整与语言相关的元素,如数字、金额、日期等的显示。例如在法文中数值123456.78 表示为123 456,78;而在德文中应表示为123.456,78。除了数值和货币之外,不同语言有不同表示的元素还有日期、时间和文本消息。Java 提供了NumberFormat、DateFormat、MessageFormat 类根据不同的Locale 实例动态改变这些元素的显示模式。下面的例子将根据不同的Locale 实例改变数值123456.78 的显示方式。 Double amount = new Double (123456.78); NumberFormat numberFormatter; String amountOut;numberFormatter = NumberFormatgetNumber.Instance(currentLocale);amountOut = numberFormatter
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届山东省威海市化学高一上期中学业质量监测试题含解析
- 辽阳市重点中学2026届化学高三第一学期期末预测试题含解析
- 患者不戴腕带的原因
- 警犬双盲测试题及答案
- 外科助理考试题及答案
- 外科学考试题库及答案
- 家电公司合同管理规章
- 酒店值班考试题及答案
- 中医绪论试题卷及答案
- 邮政春招考试试题及答案
- 2025至2030年中国互联网数据中心应用行业市场深度评估及投资战略规划报告
- 八师兵团职工考试题库及答案
- 2025临时工合同协议书模板
- 2025年学习贯彻全国教育大会精神网络培训考试答案
- 推拿学基础题库及答案
- 水利工程档案验收项目法人自检工作报告
- 工资管理课件
- 电商客服培训 课件
- 2025社区治理一表通应用规范
- 中国古诗词歌曲课件
- GB/T 26148-2025高压水射流清洗作业安全规范
评论
0/150
提交评论