<b>Java用户界面本地化实例摸索</b>[Java编程]
本文“<b>Java用户界面本地化实例摸索</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
国际化是使程序具有充足的机动性、能在世界上任何区域运行的历程.国际化所要求的必定后果是地方化――使一个程序可以运行在特定区域的历程.本文尝试用一个简单的例子来演示Java用户界面本地化.Java语言内核基于Unicode3.0(Java 1.4)供应了对差别国家和差别语言文字的内部支持,由于先天的缘由,Java关于国际化的支持远远要比C/C++来的优胜.
在我看来本地化必须满意以下的三个条件:
1、程序必须能读、写和操作本地化的文本.
2、程序在显示日期和时间、使数字格局化以及排序子串时,必须符合地方习惯.(通过java.text包里面的类可以实现这些要求)
3、全部用户可见的文本都能在运行时得到,而不是直接写入程序中.(通过java.util包里的ResourceBundle类和他的子类可以实现这些要求.)
实现这三个方面可以真正实现程序的国际化.
首先让我们来理解一下区域.区域代表一个地理上、政治上或文化上的区域.在Java中,区域由java.util.Locale类表示.区域常常以一种语言来定义,该语言则由其尺度的小写双字母代码表示.(比方:en代表英国,fr代表法国,zh代表中国),但有时刻语言是不能代表一个区域的,那就要在语言背面再加上一个国家或该国家的地域(比方:en_US代表美国,zh_TW).Locale类保存着一个静态的默许区域,它可以用Locale.setDefault()和Locale.getDefault()来设置和查询.一个程序可以生成和利用肆意数目的非默许Locale对象.
让我们再来看一下Unicode字符编码.Java利用Unicode的字符编码,其本身就是迈向国际化的一大步.Unicode编码其每个字符都占两个字节.用u****的情势表示.Unicode的字符可以等价于其他编码的字符(比方:从u0020到u007E的字符等价于ASCII和ISO8859-1字符的0x20到0x7E).
本文主如果对用户界面地方化,由于我利用的是资源束!所以有必要对资源束作一下注释.
为定义一束地方化的资源,你需求生成一个ResourceBundle(资源束)的子类并且供应handleGetObject()和getKeys()办法的定义.为了在程序中利用来自ResourceBundle的地方化资源,就需求先调用静态的getBundle()办法,用getBundle()得到一个ResourceBundle对象,然后再用getObject()办法去按照名字来查找资源.当然也可以利用getString()简单的把getObject()的返回值分配给一个String对象.GetBundle()办法采取basename_language_country_variait----没找到的话->basename_language_country----没找到的话->basename_language----没找到的话->basename(默许资源文件)的算法探求符合的资源.假如以上都没找到的话,则会抛出一个MissingResourceException非常.
目前我们来看一个简单的例子,若何使Java程序用户界面地方化的.
首先我们的程序需求查找特定Locale对象关联的资源包,所以应当定义一个Local对象,来获得本地默许的区域!然后可以调用ResourceBundle的getBundle办法,并将locale对象作为参数传入.
清单一:
Locale locale = Locale.getDefault(); //获得区域:默许
//获得资源束.如未发现则会抛出MissingResourceException非常
ResourceBundle bundle = ResourceBundle.getBundle("Properties.Dorian",locale);
清单一中的”Properties.Dorian”代表Properties包下以Dorian命名的默许资源文件.这样便可以利用资源文件了!让我们来看看资源文件是若何定义的.
清单二:
# Dorian.properties是默许的"Dorian"资源束文件.
# 作为中国人,我用自己的区域作为默许
Title=u4e2du56fd;
red.label=u7ea2u8272;
green.label=u7effu8272;
blue.label=u84ddu8272;
清单三:
# 文件Dorian_en_US.properties,是美国区域的资源束
# 它覆盖了默许资源束
Title=America;
red.label=Red;
green.label=Green;
blue.label=Blue ;
清单一和二定义了一个默许资源文件,和美国区域的资源文件.此中等号左边的字符串表示主键,它们是唯一的.为了得到主键对应的值,你可以调用ResourceBundle类的getString办法,并将主键作为参数.此外,文件中以“#”号开首的行表示注释行.需求注意的是清单二中的“u4e2du56fd”,它是字符“中国”的Unicode字符码.是利用Java自带的native2ascii工具转换的(native2ascii in.properties out.properties),这是为了不在程序界面中产生乱码.
清单四:
cmdRed.setText(bundle.getString("red.label"));
cmdBlue.setText (bundle.getString("blue.label"));
cmdGreen.setText (bundle.getString("green.label"));
以上是“<b>Java用户界面本地化实例摸索</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |