最近一点时间,公司项目上需要用到国际化。小小的研究了下,脑袋头都大了。不是说国际化难,而是看合不合适自己。

接触到国际化的技术分类有两种

  1. 1.   前台js国际化

  2. a)     jquery.i18n.properties

  3. b)    jquery.i18n

  4. c)     i18next

  5. 2.   后台框架及java原生国际化方法

  6. a)     Java原生 ResourceBundle获取en_US.properties文件,获取值

  7. b)    Struts2配置相应配置文件 action继承ActionSupport方法,用getText方法取值页面引入Struts2标签库的方式取值。

  8. c)     Spring进行国际化. Struts2差不多。

因为项目框架的原因,我不得不使用Struts2 + i18next来进行国际化。这两种国际化的方式网上都有。我简单列下要注意的点

  1. 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);
}



但是发现语言切换还是有问题,查询了下发下 Struts2bug~(不知道现在修复了没,我用的版本比较老)

解决问题的方案见:

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")的方式直接获取.

就写到这里。看看对你有没有帮助~~