首先澄清下多语言不等于国际化。国际化包含了更多的内容,如时间格式的显示、货币符号等。这里只讲解多语言的实现。
这里的多语言只是JavaScript的多语言实现,而不是Java(JSP、Servlet)的多语言实现。
Step 1 编写多语言资源文件
将中英文资源分别写到两个Js脚本中,如
zh_CN.js
var ip_invalid = "如: 192.168.0.1"; var can_not_empty = "必填"; var must_be_int = "必须是整数"; var must_big_than = "必须大于{0}"; var must_small_than = "必须小于{0}" var str_too_short = "字符长度必须大于{0}"; var str_too_long = "字符长度必须小于{0}"; var str_regExp_unmatch = "格式错误";
en_US.js
var ip_invalid = "As 192.168.0.1"; var can_not_empty = "Required"; var must_be_int = "Must be an integer"; var must_big_than = "Must bigger than {0}"; var must_small_than = "Must smaller than {0}" var str_too_short = "str_too_short {0}"; var str_too_long = "str_too_long {0}"; var str_regExp_unmatch = "str_regExp_unmatch";
Step 2 根据语言环境导入对应的资源文件脚本
更上层的语言如JSP,根据当前的语言类型导入zh_CN.js 活 en_US.js
<script type="text/javascript" src="<%=HttpUtil.getJavaScriptLang(request)%>.js"></script>
/**
* 获得javascript脚本的语言类型
* 当语言类型对应的文件不存在时,就采用英文(en_us)
* @param request
* @return 语言文件
*/
public static String getJavaScriptLang(HttpServletRequest request)
{
HttpSession session = request.getSession();
Locale locale = null;
if (session != null)
{
locale = (Locale)session.getAttribute(Globals.LOCALE_KEY);
}
// 默认地区语言
if (locale == null)
{
locale = request.getLocale();
}
String lang = locale.toString();
String file = lang + ".js";
File langFile = new File(file);
if (langFile.exists())
{
return lang;
}
// 返回默认值
return Locale.ENGLISH.toString();
}
Step 3 格式化函数
为JavaScript字符串参数增加格式化函数。
/* * var str0 = "{0} must smaller than {1}" * var str1 = str0.fillArgs("apple", "watermelon"); * srt1 equals to "apple must smaller than watermelon" */ String.prototype.fillArgs = function() { var formated = this; for ( var i=0;i<arguments.length;i++) { var param = "\{"+i+"\}"; formated = formated.replace(param,arguments[i]) } return formated; }
Step 4 Html的样子
<html>
<head>
<script type="text/javascript" src="language.js"></script>
<script type="text/javascript" src="<%=HttpUtil.getJavaScriptLang(request)%>.js"></script>
</head>
<body>
<script>
document.write(must_big_than.fillArgs(99));
</script>
</body>
</html>