Java API实现国际化资源文件

问题:关于一些大型项目中会使用不同语言版本的视图,比如在一个Java web开发中,在struts中九提供了改种文件的配置项及在View中通过标签<bean:message value="">来根据浏览器不同语言形式来展示页面,实现多语言的互操作。

这里自己将所遇到的这类问题,查看相关资料,通过JDK自带的相关API实现这种国际化操作。

使用到的类主要有:import java.util.Locale; import java.util.ResourceBundle;还需要简单的国家化资源文件(针对不同语言有不同文件 .properties文件,键值对)

比如新建一个包com.xiaoli.test,里面放置两个国际化文件,中文(LDPC.properties)和英文(LDPE.properties)支持:

sys.login.index=index.jsp\u9875

sys.login.index=index.jsp page


上面键值对是指:index.jsp 页

 

而后建立相关测试类实现如下:

package com.xiaoli.test;

import java.util.Locale;
import java.util.ResourceBundle;

public class ResourceMessage  
{  
    private static ResourceMessage resourceMessage = null;  
    private ResourceBundle resourceMessage_zh = null;  
    private ResourceBundle resourceMessage_en = null;  
    private Locale local;  
     //此时该国际化资源文件为下面的完全限定类名访问,LDP为资源文件前缀 
    private static final String SOURCE_FILE_ZH= "com.xiaoli.test.LDPC"; 
    private static final String SOURCE_FILE_EN= "com.xiaoli.test.LDPE";  
    private ResourceMessage()  
    {  
    	//分别将两个文件绑定到相应的语言环境下
       resourceMessage_zh = ResourceBundle.getBundle(SOURCE_FILE_ZH, Locale.CHINA);  
       resourceMessage_en = ResourceBundle.getBundle(SOURCE_FILE_EN,  
               Locale.ENGLISH);  
    }  
    /** 
     * 单例模式 
     * 只创建一个实例 
     * @return 
     * @see [类、类#方法、类#成员] 
     */  
    public static ResourceMessage getInstance()  
    {  
        if (null == resourceMessage)  
        {  
            synchronized (ResourceMessage.class)  
            {  
                resourceMessage = new ResourceMessage();  
            }  
        }  
        return resourceMessage;  
    }  
      
    public String getMessage(String key)  
    {  
        return getMessage(key, local);  
    }  
      
    public String getMessage(String key, Locale local)  
    {  
        if (null == local)  
        {  
            local = Locale.getDefault();  
        }  
        String msg = null;  
        if (Locale.CHINA.equals(local))  
        {  
            msg = resourceMessage_zh.getString(key);  
        }  
        else if (Locale.ENGLISH.equals(local))  
        {  
           msg = resourceMessage_en.getString(key);  
        }  
          
        //如果找不到资源文件,返回key   
        if (null == msg || "".equals(msg))  
        {  
            return key;  
        }  
        return msg;  
    }  
    /** 测试方法 
     * @param args 
     * @see [类、类#方法、类#成员] 
     */  
    public static void main(String[] args)  
    {  
        String key = "sys.login.index";  
//        String value = ResourceMessage.getInstance().getMessage(key, Locale.ENGLISH);  
        //使用当前默认的语言环境获取,这里为中文支持
        String value = ResourceMessage.getInstance().getMessage(key); 
        System.out.println(value);  
    }  
      
}  


结果,根据手动设置的不同语言环境可以打印不同的值:

index.jsp页index.jsp page

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值