信息绑定与国际化

来源:互联网 发布:昌吉有4g网络吗 编辑:程序博客网 时间:2024/05/15 23:49

使用ResourceBundle

在程序中有很多字符串信息会被写在程序中,如果要改变某个字符串信息,则必须修改程序代码然后重新编译。对于日后可能变动的文字信息,可以考虑将信息移至程序之外,方法是使用 java.util.ResourceBundle 来做信息绑定。

第一步,准备一个properties文件 message.properties

onlyfun.caterpillar.welcome=Helloonlyfun.caterpillar.name=World

第二步,使用ResourceBundle来读取信息

package com.xiaofan.demo.localize;import java.util.ResourceBundle;public class ResourceBundleDemo {    public static void main(String[] args){        ResourceBundle resource = ResourceBundle.getBundle("com/xiaofan/demo/localize/message");        System.out.println( resource.getString("onlyfun.caterpillar.welcome"));        System.out.println( resource.getString("onlyfun.caterpillar.name"));    }}

在编写.properties文件内容时,键的名字前通常加上单位、产品、模块等信息,这样在信息增多时可以有效减少重复键名的冲突问题。

国际化信息

国际化的英文是 internationalization ,因为共18个字母,所以简称 I18N 。国际化的目的是让应用程序可以依地区不同而显示不同的信息,最基本的就是让不同语系的用户可以看到属于自己语系的信息。

在java中,用 java.util.Locale 类来表示一个区域,一个Locale实例包括了语系信息和区域信息。如 en 表示英语语系的国家, 而区域信息则如 US 表示美国。

Locale locale = new Locale( "zh", "CN");

当使用java.util.ResourceBundle.getBundle()方法时,默认就会自动取得计算机上的语系与区域信息,而事实上信息文件的名称由 basename 加上语系与地区来组成的。如上述的实例,则

  • message.properties
  • message_zh.properties
  • message_en.properties

当没有提供专用的语系、区域信息文件时,就会寻找默认的资源文件,如上述 ResourceBundleDemo.java 中由于没有提供中文语系文件,所以读取的是默认文件。

由于资源文件必须是 ISO-8859-1 编码,所以对于非西方语系的处理,必须将之转换为 Java Unicode Escape 格式。如果使用Eclipse继承开发工具,则没有这个问题。下面介绍使用jdk的工具 native2ascii 来转换:

第一步,首先创建message_zh.txt文件,注意编码格式(如gb2312,utf-8)

onlyfun.caterpillar.welcome=哈喽onlyfun.caterpillar.name=世界

第二步,使用JDK工具程序 native2ascii 来转换(上面我用的是utf-8编码)

native2ascii -encoding utf-8 message_zh.txt message_zh.properties

转换好的文件内容如下:

image

第三步,创建message_en.properties文件

onlyfun.caterpillar.welcome=Helloonlyfun.caterpillar.name=World

第四步,使用ResourceBundle来读信息

package com.xiaofan.demo.localize;import java.util.Locale;import java.util.ResourceBundle;public class I18NDemo {    public static void main(String[] args){        ResourceBundle resource = null;        Locale locale = null;                resource = ResourceBundle.getBundle("com/xiaofan/demo/localize/message");        System.out.println( resource.getString("onlyfun.caterpillar.welcome"));        System.out.println( resource.getString("onlyfun.caterpillar.name"));                locale = new Locale( "zh", "CN" );        resource = ResourceBundle.getBundle("com/xiaofan/demo/localize/message", locale);        System.out.println( resource.getString("onlyfun.caterpillar.welcome"));        System.out.println( resource.getString("onlyfun.caterpillar.name"));                locale = new Locale( "en", "US" );        resource = ResourceBundle.getBundle("com/xiaofan/demo/localize/message", locale);        System.out.println( resource.getString("onlyfun.caterpillar.welcome"));        System.out.println( resource.getString("onlyfun.caterpillar.name"));    }}

经过以上简单步骤,信息绑定与国际化也就完成了,一切显得那么的方便。最后,附上文件目录截图:

image

0 0
原创粉丝点击