动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.XP下JDK1.4安装与环境配置完全图.
.Enterprise JavaBeans组件慨述(.
.JAR 文件揭密.
.在Java中保留Stereotype.
.ClassLoader介绍.
.有效地对软件进行交互式诊断的技.
.关于在bean里面打印html的利弊看.
.DeleteFile 方法.
.汉字方法名和变量名!---- 原来J.
.J2EE综合-总结java编程中的经验教.
.Java语言深入-关于Java语言的内存.
.Java开发中的事件驱动模型实例详.
.我为什么学习Hibernate.
.用CORBA创建Client/Server 程序.
.如何在EJB应用程序中使用Spring.
.理解cocoon.
.邂逅StringIndexOutOfBoundsExce.
.修正Java中wait方法超时语意模糊.
.初探Java类加载机制的奥秘技巧.
.用JBuilder2007开发扩展JSF标签的.

java的本地化问题

发表日期:2008-1-5 |



  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")。此构造函数第一个参数是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 类名中下划线后的部分吗?没错,它们就是在创建Locale 实例时指定的语言代码和地区代码!剩下的问题就是要解决下划线前面的基本类名部分了。它是由一个ResourceBundle 类的实例来指定的:


   ResourceBundle

   bundle=ResourceBundle.getBundle("WebTax ? 

Resource",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 的编码,支持大多数地区的语言。具体标准可到http://www.unicode.org/index.html 查询。因此,无论是用文本文件还是用资源类的方式存储资源,都应该将非Unicode 字符转换为Unicode 字符。Java 为我们提供了转换的工具-Native2ascii。将含有GB 编码的汉字的WebTaxResource_zh.CN.properties 文件转换为只含Unicode 字符的例子如下:


 native2ascii -encoding GB2321 WebTaxRe

source_zh_CN.properties

   .outputWebTaxResource_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.format

(amount);

      System.out.println(amountOut +" " +

currentLocale.toString());

  当然,实现Java 程序的i18n 还有很多问题要考虑,如不同语言的语法问题等。但在Java 中,碰到问题多看看联机文档或其他相关的资料,一般都能得到满足的答案。 (中国计算机报 苏志成)
上一篇:Java打印程序设计 人气:1028
下一篇:Java的i18n问题 人气:557
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-21 Nucleus v3.33 多国语言版
2008-8-21 HDWiki v4.0 bulid 080821 UTF-8
2008-8-21 明科在线客服系统 v6.0
2008-8-21 KesionCMS v5.0.2 正式版 utf-8
2008-8-21 KesionEshop v5.0.2 正式版 utf-8
2008-8-21 HDWiki v4.0 bulid 080821 GBK
2008-8-21 新文互动酷站展示系统 v1.5
2008-8-21 Punbb v1.2.20 多国语言版
2008-8-21 QQ头像网 beta
2008-8-16 iLaba Player(小喇叭播放器) v2.
2008-8-16 DoubleClickFix 鼠标双击修正工具
2008-8-16 CrystalCPUID 4.15.2.451
2008-8-16 VeryCD 电驴(easyMule) 1.0.4 Bu
2008-8-16 uTorrent 1.8 Build 11813 - Sta
2008-8-16 比特精灵(BitSpirit) v3.3.2.287
2008-8-16 StayInTune音叉 v1.0 破解版
2008-8-16 iChing《周易》汉化补丁 v1.0
2008-8-16 Starmap星空图v1.0汉化破解版
  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号