问题:关于一些大型项目中会使用不同语言版本的视图,比如在一个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]
- <p>sys.login.index=index.jsp\u9875</p>
[java]
- sys.login.index=index.jsp page
上面键值对是指:index.jsp 页
而后建立相关测试类实现如下:
[java]
- 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