• Java的国际化(i18n)


    http://blog.csdn.net/csuliky/article/details/4225800

    1. Java国际化简介

    Java既然作为一个跨平台的语言就必然要在各种不同的语言环境中使用, 为了解决这个问题Java给我们提供了一个工具类ResourceBundle, 帮助我们实现Java的国际化, 核心的思想就是, 对不同的语言提供一个不同的资源文件.

    2. Java国际化的步骤

    (1) 当然是编写要实现国际化的主程序.

    (2) 定义资源文件, 注意资源文件的定义要符合一定的规范, 规范如下: 如果我们将缺省的资源文件的文件名取名为message.properties, 那么相应的其他语言的资源文件名就是message_语言代码_国家代码.properties. 例如: 我们的语言汉语的语言代码是zh, 国家代码是CN, 所以简体中文的资源文件名就是: message_zh_CN.properties, 英语的语言代码是en, 美国的国家代码是US, 所以美国英语的资源文件就是: message_en_US.properties.

    (3) 根据软件的使用环境取得相应的资源文件

    (4) 在取得的资源文件中取得Key对应的值.

    3. 例子(注意这里的资源文件必须放在classpath的根路径下)

    (1) 主程序ParamFormat.java

    package test.abu.csdn.tmp;

    import java.text.MessageFormat;
    import java.util.Date;
    import java.util.Locale;
    import java.util.ResourceBundle;

    /**
     * 演示Java的国际化
     * @author Abu
     *
     */
    public class ParamFormat {

        /**
         * @param args
         */
        public static void main(String[] args) {
            
            // 测试缺省的资源文件 
            testCustom();
            // 测试美国英语的资源文件 
            testDefault();
        }
        
        public static void testDefault() {
            // 获得缺省的系统区域 
            Locale locale = Locale.getDefault();
            // 获得资源文件 
            ResourceBundle rb = ResourceBundle.getBundle("message", locale);
            
            // 获得相应的key值        
            String greeting = rb.getString("greeting");
            String userInfo = rb.getString("userinfo");
            
            
            String name= "liky";
            int age = 18;
            Date birth = new Date();
            
            // 格式化参数,注意是一个Object的数组,这意味着可以将任何类型的对象来格式化模板. 
            Object[] params = {name,age,birth}; 
            
            // 格式化参数,返回格式后的字符串 
            String result = MessageFormat.format(userInfo, params);
            
            System.err.println(greeting + result);    
        }
        
        public static void testCustom() {
            // 设置定制的语言国家代码 
            Locale locale = new Locale("en_US");
            // 获得资源文件 
            ResourceBundle rb = ResourceBundle.getBundle("message", locale);
            // 获得相应的key值 
            
            String greeting = rb.getString("greeting");
            String userInfo = rb.getString("userinfo");
            
            
            String name= "liky";
            int age = 18;
            Date birth = new Date();
            
            // 格式化参数,注意是一个Object的数组,这意味着可以将任何类型的对象来格式化模板. 
            Object[] params = {name,age,birth}; 
            
            // 格式化参数,返回格式后的字符串 
            String result = MessageFormat.format(userInfo, params);
            
            System.err.println(greeting + result);    
        }    
    }

    (2) 缺省的资源文件message.properties(这里使用native2ascii将中文转化成了ISO-8859-1编码.)

    greeting /u6B22/u8FCE/u60A8/u7684/u5230/u6765, 
    userinfo=/u59D3/u540D/: {0}, /u5E74/u9F84/: {1}, /u751F/u65E5/: {2}.

    (3) 美国英语的资源文件message_en_US.properties

    greeting Welcome my boy, 
    userinfo=name: {0}, age: {1}, birthday: {2}.

    4.总结

    其实这就是Java的i18n的本质了, 其他的一些框架例如struts, webwork等的国际化核心都是如此.

  • 相关阅读:
    合一算法最新版
    string.at(i)
    字符串逆转
    String
    Vector
    1005POJ
    但愿天堂一切都好
    合一算法
    合一算法2
    BTREE与其它索引的优缺点对比
  • 原文地址:https://www.cnblogs.com/123ing/p/4139163.html
Copyright © 2020-2023  润新知