首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Java 程序的国际化和本地化介绍(3)

Java 程序的国际化和本地化介绍(3)

[size=1.0625]在运行前,我们再做一个包含中文资源的资源文件

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875]4


[size=0.875]5


[size=0.875]6


[size=0.875]7


[size=0.875]8


[size=0.875]9


[size=0.875]10


[size=0.875]11


[size=0.875]12


[size=0.875]13


[size=0.875]14


[size=0.875]15


[size=0.875]16


[size=0.875]17


[size=0.875]18


[size=0.875]19


[size=0.875]20


[size=0.875]21


[size=0.875]22


[size=0.875]23


[size=0.875]24


[size=0.875][size=0.875]/**
[size=0.875]  * File name: Res_zh_CN.java
[size=0.875]  * Author: Jack, at http://bbs.whnet.edu.cn, Java discuss board.
[size=0.875]  * Email: greatjava@sina.com
[size=0.875]  * Description: Resource file for i18nDemo.java
[size=0.875]  */
[size=0.875] import java.util.*;
[size=0.875] public class Res_zh_CN extends java.util.ListResourceBundle {
[size=0.875]   static final Object[][] contents = new String[][]{
[size=0.875]     { "OKText", "确定" },
[size=0.875]     { "FontName", "MS Song" },
[size=0.875]     { "FileMenuText", "文件"},
[size=0.875]     { "FileExitMenuText", "退出"},
[size=0.875]     { "DialogTitle", "演示对话框" }};
[size=0.875]   public Object[][] getContents() {
[size=0.875]     return contents;
[size=0.875]   }
[size=0.875] }
[size=0.875]   先运行来看看结果:
[size=0.875] //Run next command step by step
[size=0.875] javac *.java  
[size=0.875] java i18nDemo
[size=0.875] java i18nDemo zh CN
[size=0.875] java i18nDemo en US




可以看到出现了中文界面和英文界面的对话框。可以看到出现了中文界面和英文界面的对话框。[size=1.0625]具体的看一下程序: 主程序i18nDemo.java,多了一个ResourceBundle对象,它包含了一个资源文件的信息。然后需要使用本地化资源的时候,都通过res.getString(KEY)来得到相应的Locale的值。通过命令行,我们传入关于语言和国家的代码,这样在生成ResourceBundle对象的时候,可以指向相应的资源文件。如果没有指定Locale,那么在生成ResourceBundle使用的Locale是当前机器上缺省的区域和语言。在我的机器上(English WindowsNT 4),打开Richwin中文平台的时候,缺省的locale是中国,关闭RichWin的时候,Locale是U.S..
[size=1.0625]资源文件Res_en_US.java里面包含了英文的界面资源,文件名里的"en"指英语语言,"US"指国家是美国。Res_zh_CN.java是中文的资源文件,”zh“说明语言是中文,"CN"说明国家是中国。关于语言和国家的完整对照表可以在参考资源里找到链接。
[size=1.0625]Res_xx_XX类是从ListResourceBundle继承而来,ListResourceBundle子类必须提供重载getContents方法和一个对象数组,数组里面包含了资源的Keys和相应的Values。例如键"OKText"的值在两个文件里面分别是"OK"和"确定"。
[size=1.0625]在通常情况下,应用程序安装完后一般不需要常常改变Locale,这样,在我们发布应用程序时候,在不同的区域中不用提供多个resource文件,只要将用到的资源文件替换成相应locale内容的文件就可以了。例如本例里,只要一个Res.java的资源文件,当在英语环境中,其内容用Res_en_US.java里面的资源替换,在中文环境下,替换成Res_zh_CN.java里面内容就可以了。
[size=1.0625]关于i18n和l10n的进一步讨论 本文讨论的只是最简单的关于界面显示语言的国际化,在实际的应用过程中,情况要复杂的多,一些需要考虑的因素包括:提示信息,GUI组件上的标签,在线帮助,声音,颜色,图形,图标,日期,货币符号.....
山不在高,有仙则名;水不在深,有龙则灵。
返回列表