如何创建java国际化类资源文件
2个回答
展开全部
问题:关于一些大型项目中会使用不同语言版本的视图,比如在一个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)支持:
[java] view plain copy
<p>sys.login.index=index.jsp\u9875</p>
[java] view plain copy
sys.login.index=index.jsp page
上面键值对是指:index.jsp 页
而后建立相关测试类实现如下:
[java] view plain copy
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
这里自己将所遇到的这类问题,查看相关资料,通过JDK自带的相关API实现这种国际化操作。
使用到的类主要有:import Java.util.Locale; import java.util.ResourceBundle;还需要简单的国家化资源文件(针对不同语言有不同文件 .properties文件,键值对)
比如新建一个包com.xiaoli.test,里面放置两个国际化文件,中文(LDPC.properties)和英文(LDPE.properties)支持:
[java] view plain copy
<p>sys.login.index=index.jsp\u9875</p>
[java] view plain copy
sys.login.index=index.jsp page
上面键值对是指:index.jsp 页
而后建立相关测试类实现如下:
[java] view plain copy
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
展开全部
首先必须为每种语言提供一套相应的资源文件,并以规范化命名的方式保存在特定的目录中,由系统自动根据客户端语言选择适合的资源文件。
然后你需要去了解java国际化的基础知识。
Java.util.Locale是表示语言和国家/地区信息的本地化类,它是创建国际化应用的基础。下面给出几个创建本地化对象的示例:
//①带有语言和国家/地区信息的本地化对象
Locale locale1 = new Locale("zh","CN");
//②只有语言信息的本地化对象
Locale locale2 = new Locale("zh");
//③等同于Locale("zh","CN")
Locale locale3 = Locale.CHINA;
//④等同于Locale("zh")
Locale locale4 = Locale.CHINESE;
//⑤获取本地系统默认的本地化对象
Locale locale 5= Locale.getDefault();
还有其他的什么什么的,请参照
http://blog.csdn.net/zhoudaxia/article/details/37536195
然后你需要去了解java国际化的基础知识。
Java.util.Locale是表示语言和国家/地区信息的本地化类,它是创建国际化应用的基础。下面给出几个创建本地化对象的示例:
//①带有语言和国家/地区信息的本地化对象
Locale locale1 = new Locale("zh","CN");
//②只有语言信息的本地化对象
Locale locale2 = new Locale("zh");
//③等同于Locale("zh","CN")
Locale locale3 = Locale.CHINA;
//④等同于Locale("zh")
Locale locale4 = Locale.CHINESE;
//⑤获取本地系统默认的本地化对象
Locale locale 5= Locale.getDefault();
还有其他的什么什么的,请参照
http://blog.csdn.net/zhoudaxia/article/details/37536195
追问
如果程序运行的时候,系统发现存在两个资源文件,一个是用类运行出的class文件,一个是properties文件,是不是优先选择class文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询