java 国际化统一处理的工具类

@author zhong
思路:
1.读取配置文件(包括本地文选项、哪些资源文件)
2.根据配置文件读取对应本地语言所有的国际化资源文件
3.将所有国际化资源文件存放到map中
4.提供对外调用的方法


首先创建一个名为:i18n.properties 的国际化基本配置类,内容如下:

i18nLocale=en_US
i18nFiles=pageMessage,XXXX,XXXXX,XXX 

说明:这里配置文件根据项目需求进行配置,基本i18nFiles可以配置多个国际化配置文件的前缀。
如这两个配置文件,它们的前缀是pageMessage:
pageMessage_en_US.properties、pageMessage_zh_CN.properties


创建一个工具类:PageMessageUtil.java,示例代码如下:

/**
 * 
 */
package com.yz.util;

import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.Set;

/**
 * @author zhong
 * 思路:
 * 1.读取配置文件(包括本地文选项、哪些资源文件)
 * 2.根据配置文件读取对应本地语言所有的国际化资源文件
 * 3.将所有国际化资源文件存放到map中
 * 4.提供
 *
 */
public class PageMessageUtil {

    //国际化配置文件的名称
    private static final String CONFIG_FILE_NAME = "i18n.properties";
    //国际化配置文件里面的的key、value
    private static final String RESOURCE_FILES = "i18nFiles";
    //国际化配置文件里当前语言
    private static final String LOCALE_CODE = "i18nLocale";


    private static Map<String, String> i18nMap = null;

    //加载这个类的时候就执行该静态方法
    static{
        load();
    }

    private static void load() {
        //读取配置文件
        Properties property = new Properties();
        try {

            property.load(PageMessageUtil.class.getClassLoader()//
                    .getResourceAsStream(CONFIG_FILE_NAME));


            //获取所有国际化资源的前缀,如:pageMessage、后缀:zh_CN
            String resourceFile = property.getProperty(RESOURCE_FILES).toString();
            System.out.println(resourceFile);

            String locale = property.getProperty(LOCALE_CODE).toString();
            System.out.println(locale);

            //将资源文件中的配置转化成map
            String[] resources = resourceFile.split(",");
            i18nMap = new HashMap<String, String>();
            ResourceBundle bundle = null;
            for (int i = 0; i < resources.length; i++) {
                //struts2中用于国际化的类,这里是初始化这个类的
                try {
                    ResourceBundle.clearCache();
                    //获取到某个资源文件里面的所有内容
                    bundle = ResourceBundle.getBundle(resources[i]+"_"+locale);

                    @SuppressWarnings("rawtypes")
                    Set set = bundle != null ? bundle.keySet() : null;

                    @SuppressWarnings("unchecked")
                    Iterator<String> iterator = (set != null) ? set.iterator() : null;
                    while (iterator != null && iterator.hasNext()) {
                        String key = iterator.next();
                        i18nMap.put(key, bundle.getString(key));
                    }
                    System.out.println(i18nMap.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    public static String get(String key) {
        if(i18nMap.containsKey(key)){
            return i18nMap.get(key);
        }else{
            return key;
        }
    }

    public static Set<String> getKeys() {
        Set<String> set = null;
        if(i18nMap != null && i18nMap.size() > 0){
            set = new HashSet<String>();
            for(Map.Entry<String, String> entry:i18nMap.entrySet()){    
                 set.add(entry.getKey());
            }   
            return set;
        }else{
            return set;
        }
    }



    public static void main(String[] args) {
        System.out.println(getKeys().toString());
    }

}


JSP页面调用示例:

<button type="submit"><%=PageMessageUtil.get("login_page_loginBtnText")%></button>

在JS中调用示例:

    <script type="text/javascript">
        //将工具类的map转换成js对象
        var pageMessage = {
            <%
                Set<String> keySet = PageMessageUtil.getKeys();
                Iterator<String> iterator = keySet != null ? keySet.iterator() : null;
                while(iterator != null && iterator.hasNext()){
                    String key = iterator.next();
                    String value = PageMessageUtil.get(key);
            %>

            <%= key %>: "<%= value %>" ,

            <% 
                }
            %>

            i18n : function(key){
                if(typeof(pageMessage[key]) != 'undefined'){
                    return pageMessage[key]; 
                }else{
                    return key;
                }               
            }
        };  
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值