信息绑定与国际化

使用ResourceBundle

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

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

onlyfun.caterpillar.welcome=Hello
onlyfun.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=Hello
onlyfun.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XiaoFan012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值