您的位置:首页 > 编程语言 > Java开发

java 项目国际化完全实现

2011-02-17 16:25 525 查看
项目应对外国和中国客户,就要求通过配置,实现文字的转换,这个过程,在java实现非常简单,

主要通过一个配置文件定义language.txt,使用的语言:

文件内容为:

language=zh_CN

在把编辑好的国际化的文件放到java的package下面.

如图:


resource.properties中的内容为:

请注意, 在{0} 发生 {1} 事故, 车辆行驶缓慢!

需要转换成unicode的编码方式,转换的命令为:

native2ascii -encoding gb2312 resource.properties resource_cn.properties

可以通过java.text.MessageFormat来对文字进行实时的渲染,修改。

代码如下:

package app.language.global;

import java.io.IOException;

import java.io.InputStream;

import java.text.MessageFormat;

import java.util.Locale;

import java.util.Properties;

import java.util.ResourceBundle;

public class globalLanguageImpl {

static String defaultMessage;

static Locale currentLocale;

static ResourceBundle messages;

static InputStream is;

static Properties prop;

public static void getProp(){

is = globalLanguageImpl.class.getClassLoader().getResourceAsStream("app/language/global/language.txt");

prop = new Properties();

try {

prop.load(is);

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (is != null)

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static String formatMessage(String template, Object[] params, Locale currentLocale) {

MessageFormat formatter = new MessageFormat("");

formatter.setLocale(currentLocale);

formatter.applyPattern(template);

String output = formatter.format(params);

return output;

}

public static void main(String[] args) {

getProp();

String[] resource = ((String)prop.get("language")).split("_");

String language = resource[0].toLowerCase();

String country = resource[1].toUpperCase();

currentLocale = new Locale(language, country);

messages = ResourceBundle.getBundle("app.language.global.resource", currentLocale);

defaultMessage = messages.getString("default_message");

Object[] params = { "London golden road", "road works" };

String alertInfo = formatMessage(defaultMessage, params, currentLocale);

System.out.println("======================" + language + "_" + country);

System.out.println("======================" + alertInfo);

}

}

生成的结果为:

======================zh_CN

======================请注意, 在 London golden road 发生 road works 事故, 车辆行驶缓慢!

通过以上的工作,就可以通过修改配置文件language.txt中的内容,来达到改变显示语言的目的了。

由于不用重新编译,由客户自己就能修改配置,

如英语国家可以修改为:

language=en_US

在重新起动项目就可以了。

在国际化的过程中,由ResourceBundle来负责寻找复合条件的国际化文字文件,开发人员的工作就是在后台和页面有文字显示的部分全部换成messages.getString("default_message"); 的形式即可。

如果是jsp页面,基本结构如下:

<%@page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<fmt:bundle basename="app.language.global.resource">

在需要用到文字的地方的写法:

<fmt:message key='copyright'/>

<fmt:message key='logout'/>

很简单的,pageEncoding="UTF-8"这样既可以支持中文,也可以支持英文,不错的选择,否则国际化也就没有意义了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: