最近一点时间,公司项目上需要用到国际化。小小的研究了下,脑袋头都大了。不是说国际化难,而是看合不合适自己。
接触到国际化的技术分类有两种
1. 前台js国际化
a) jquery.i18n.properties
b) jquery.i18n
c) i18next
2. 后台框架及java原生国际化方法
a) Java原生 ResourceBundle获取en_US.properties文件,获取值
b) Struts2配置相应配置文件 action继承ActionSupport方法,用getText方法取值页面引入Struts2标签库的方式取值。
c) Spring进行国际化. 和Struts2差不多。
因为项目框架的原因,我不得不使用Struts2 + i18next来进行国际化。这两种国际化的方式网上都有。我简单列下要注意的点
1. Struts2国际化会针对游览器语言进行自动切换语言,但常常我们自己希望控制语言的切换。
我的方法如下:
/**
* 语言切换
* @return
*/
publicvoid doChageLanguage(){
String language =contextPvd.getRequestStr("language");
Locale locale = null;
if (language.equals("zh_CN")) {
locale = Locale.CHINA;
} else {
locale = Locale.US;
}
//使用cookie 保存用户语言信息
Cookie cookie = new Cookie("language", language);
contextPvd.addCookie(cookie);
cookie.setMaxAge(60 * 60 * 24 * 14);
cookie.setPath(contextPvd.getAppCxtPath());
//使用Session 保存用户语言信息
contextPvd.setLocale(locale);
contextPvd.setSessionAttr("WW_TRANS_I18N_LOCALE", locale);
}但是发现语言切换还是有问题,查询了下发下 Struts2有bug~(不知道现在修复了没,我用的版本比较老)
解决问题的方案见:
http://showtime520.iteye.com/blog/1042585(感谢分享)
我对上面代码进行了简单修改
见代码
publicMyRequestWrapper(HttpServletRequest request) {
super(request);
Cookie cookie =null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if (c.getName().equals("language")) {
cookie =c ;
}
}
}
if(null !=cookie){
Stringlanguage = cookie.getValue();
if(!StringUtils.isBlank(language) ){
if (language.equals("zh_CN")) {
locale = Locale.CHINA;
} else {
locale = Locale.US;
}
}else{
HttpSession session =request.getSession();
locale = (Locale) session.getAttribute("WW_TRANS_I18N_LOCALE");
}
}
}主要使用Cookie 获取语言~~。Struts2注意点就这些。
然后讲讲 i18next,说实话如果不是框架的原因 单单使用i18next就可以完全实现国际化。
而且i18next非常小。但是i18next的资料很少,笔者的英语很烂,也只能咬着呀看官方文档,但还是说同学们看文档吧~~
关键初始化:
var option = {
ns: ‘i18n‘ ,
sendType: ‘post‘,
resGetPath: bootPATH+‘i18n/__lng__.json‘,
debug: true,
lng: language};
i18n.init(option, function(err, t) {
$("body").i18n();
});
Json格式:
{
"login":
{
"msg":"land successfully,Get tothe system right away...",
"msg1": "landsuccessfully"
}
}使用:
在页面中用 data-i18n="login.msg" 直接使用。js弹出 时用 直接用i18n.t("ogin.msg")的方式直接获取.
就写到这里。看看对你有没有帮助~~
原文:http://thlovesky.blog.51cto.com/2297178/1968957