EBookMgr 多国语言与Icon

来源:互联网 发布:阿里云 vps 6个月 编辑:程序博客网 时间:2024/04/28 23:47

Icon

先说说简单的内容,如何在一个JButton或者JMenuItem中显示一个图标:

 

 

JButton或者JMenuItem这样支持Icon的控件通常都有一个这样的构造方法,以JMenuItem为例:

 

 

 

只需要使用这个构造方法即可,但是如何获得一个Icon对象呢?

要想获得一个Icon首先必须有一个图像文件,并且放在一个特定的位置,这个位置通常于Java类同目录或者在其下的子目录中(要求运行时环境,例如classes目录或者jar文件中相同的位置也由这些图像文件)。

以EBookMgr为例,代码斗方在ebookmgr目录中,图像文件放在子目录ebookmgr.images目录中,那么得到Icon共有两步:

第一步:

 

第二步:

 

之后就可以使用前面提到的构造方法了。注意在生成imageUrl的过程中使用的是构造Icon的类和图像文件之间的相对路径(也就是说是:images/menu/setting.png而不是ebookmgr/images/menu/setting.png)。

 

i18n

现在说一说稍微复杂一些的i18n,i18n的主要思想是:将所有文本标签按照语言分成套,放在不同的文件中(我们在这里以属性文件为例)在用一种动态的方法访问这些文件,动态的含义是能够根据程序运行的地域、语言来自动从对应的文件种取得需要的文本标签。

 

“将所有文本标签按照语言分成套”的含义是:

定义一系列命名为 basename_LanguageCode_CountryCode.properties的文件,这些文件通常也放在特定的目录中(通常是resources子目录)。

这里我们在ebookmgr.resources目录中定义了如下文件:

ui.properties                       默认的属性文件,对应的地域无法匹配到特定的属性文件时使用这个文件(例如波多黎各语)

ui_en_US.properties         英文美国

ui_zh_CN.properties        中文中国

ui_ja_JP.properties           日语日本

 

 

“动态的方法”来源于java.util.ResourceBundle类的支持。

这里注意两个地方,第一是使用的跟资源名:ebookmgr.resources.ui,第二是Locale.getDefault()获得了运行当前软件的地域。所以此时的res表示的就是特定语言版本的内容。(可以传入指定的参数来改变默认的地域,这就是在中文平台下使用英文,或者日文主题的实现原理)

之后就可以使用getString(String key)方法获得对应的字符串了。

 

顺便说一下properteis文件中保存非ASCII字符时会被自动转义,参看以下截图: