JAVA实现多语言

做web服务器,为了实现全球业务,服务器端就要实现多语言。针对不同的国家、语言。返回不同语言的描述。

第一:JAVA对多语言是支持的

JAVA对语言的描述使用java.util.Locale,它主要包含语言、国家信息。
例如几个常量,
中国的简体中文:
Locale SIMPLIFIED_CHINESE = createConstant(“zh”, “CN”);
台湾的繁体
Locale TRADITIONAL_CHINESE = createConstant(“zh”, “TW”);
也可以只包含语言信息:
Locale CHINESE = createConstant(“zh”, “”);

以上几种语言,用字符串写就是zh_CN, zh_TW, zh(也有用中划线的)。

第二:语言资源文件

你可以在i18n目录(或者是com/zhaoyanblog/i18n, com/zhaoyanblog/i18n/resource, 这个是类路径)下为每一种语言创建一个资源文件。命名格式如下:
lang_zh_CN.properties
lang_zh_TW.properties
lang_zh.properties
再创建一个默认的语言对应的资源文件:
lang.properties

注:这里的文件名lang和路径都可以随便起。为什么路径要包含i18n,这个就是个习惯,随便你。i18n的意思就是国际化(internationalization, i和n之间有18个字符)。

资源文件里配置不同的配置
lang_zh_CN.properties里:
TITLE=我的苹果
lang_en.properties里:
TITLE=my apple

配置文件为了防止乱码,properties文件里3个字节以上表示的字符(例如中文)一般使用unicode配置。
TITLE=\u6211\u7684\u82f9\u679c

第三:读取配置文件的内容
JAVA加载语言资源文件使用java.util.ResourceBundle类。
ResourceBundle lang = ResourceBundle.getBundle(“com.zhaoyanblog.i18n.resource.lang”, Locale.SIMPLIFIED_CHINESE);
lang.getString(“TITLE”) 返回的就是我的苹果

第四:HTTP协议的多语言支持。
HTTP协议规定了一个header:Accept-Language支持多语言。多少客户端期望返回的语言类型。
格式如下:
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
q=0.8代表前面语言的比重。如果有中文就返回中文,没有中文就返回美式英文。再没有就返回中文。

第五:java web应用,获取客户端需要的语言。
servlet的HttpServletRequest参数对象里可以得到对Accept-Language的解析结果。
protected void service(HttpServletRequest req, HttpServletResponse resp)
{
Locale locale = req.getLocale();
}

  1. 大岩不灿说道:

    java在内存里就是用Unicode编码字符串的,所以只要把字符串的每一个char转成16进制字符,就是Unicode编码。

    public String string2Unicode(String string) {
     
    	StringBuffer unicode = new StringBuffer();
     
    	for (int i = 0; i < string.length(); i++) {
     
    		// 取出每一个字符
    		char c = string.charAt(i);
     
    		// 转换为unicode
    		String hexString = Integer.toHexString(c);
    		if(hexString.length() == 2)
    		{
    			unicode.append(c);
    		}
    		else if(hexString.length() == 3)
    		{
    			unicode.append("\\u0" + hexString.toUpperCase());
    		}
    		else
    		{
    			unicode.append("\\u" + hexString.toUpperCase());
    		}
     
    	}
    	return unicode.toString();
    }

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 * Time limit is exhausted. Please reload CAPTCHA.