标签:ssh国际化
最近一点时间,公司项目上需要用到国际化。小小的研究了下,脑袋头都大了。不是说国际化难,而是看合不合适自己。
接触到国际化的技术分类有两种
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")的方式直接获取.
就写到这里。看看对你有没有帮助~~
标签:ssh国际化
原文地址:http://thlovesky.blog.51cto.com/2297178/1968957