js国际化 就用i18n就好了
根据cookie来存储语言
/** * cookie操作 */ var getCookie = function(name, value, options) { if (typeof value != 'undefined') { // name and value given, set cookie options = options || {}; if (value === null) { value = ''; options.expires = -1; } var expires = ''; if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { var date; if (typeof options.expires == 'number') { date = new Date(); date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); } else { date = options.expires; } expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE } var path = options.path ? '; path=' + options.path : ''; var domain = options.domain ? '; domain=' + options.domain : ''; var s = [cookie, expires, path, domain, secure].join(''); var secure = options.secure ? '; secure' : ''; var c = [name, '=', encodeURIComponent(value)].join(''); var cookie = [c, expires, path, domain, secure].join('') document.cookie = cookie; } else { // only name given, get cookie var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } }; /** * 获取浏览器语言类型 * @return {string} 浏览器国家语言 */ var getNavLanguage = function(){ if(navigator.appName == "Netscape"){ var navLanguage = navigator.language; return navLanguage.substr(0,2); } return false; }; /** * 设置语言类型: 默认为中文 */ var i18nLanguage = "zh-CN"; /* 设置一下网站支持的语言种类 */ var webLanguage = ['zh-CN', 'zh-TW', 'en']; /** * 执行页面i18n方法 * @return */ var execI18n = function(){ /* 获取一下资源文件名 */ var optionEle = $("#i18n_pagename"); if (optionEle.length < 1) { console.log("未找到页面名称元素,请在页面写入\n <meta id=\"i18n_pagename\" content=\"页面名(对应语言包的语言文件名)\">"); return false; }; var sourceName = optionEle.attr('content'); // sourceName = sourceName.split('-'); /* 首先获取用户浏览器设备之前选择过的语言类型 */ if (getCookie("userLanguage")) { i18nLanguage = getCookie("userLanguage"); } else { // 获取浏览器语言 var navLanguage = getNavLanguage(); if (navLanguage) { // 判断是否在网站支持语言数组里 var charSize = $.inArray(navLanguage, webLanguage); if (charSize > -1) { i18nLanguage = navLanguage; // 存到缓存中 getCookie("userLanguage",navLanguage); }; } else{ console.log("not navigator"); return false; } } /* 需要引入 i18n 文件*/ if ($.i18n == undefined) { console.log("请引入i18n js 文件") return false; }; /* 这里需要进行i18n的翻译 */ jQuery.i18n.properties({ name : sourceName, //资源文件名称 path : basePath+'js/i18n/' + i18nLanguage +'/', //资源文件路径 mode : 'map', //用Map的方式使用资源文件中的值 language : i18nLanguage, callback : function() {//加载成功后设置显示内容 // var insertEle = $(".i18n"); // console.log(".i18n 写入中..."); // insertEle.each(function() { // // 根据i18n元素的 name 获取内容写入 // $(this).html($.i18n.prop($(this).attr('name'))); // }); // console.log("写入完毕"); // // console.log(".i18n-input 写入中..."); // var insertInputEle = $(".i18n-input"); // insertInputEle.each(function() { // var selectAttr = $(this).attr('selectattr'); // if (!selectAttr) { // selectAttr = "value"; // }; // $(this).attr(selectAttr, $.i18n.prop($(this).attr('selectname'))); // }); // console.log("写入完毕"); } }); } /*页面执行加载执行*/ $(function(){ /*执行I18n翻译*/ execI18n(); /*将语言选择默认选中缓存中的值*/ $("#language option[value="+i18nLanguage+"]").attr("selected",true); /* 选择语言 */ $("#language").on('change', function() { var language = $(this).children('option:selected').val(); console.log(language); getCookie("userLanguage",language,{ expires: 30, path:'/' }); location.reload(); }); });
后端和页面的国际化就稍微麻烦点
public class MessageUtil { private static WebApplicationContext applicationContext; public static void setApplicationContext(WebApplicationContext context){ applicationContext=context; } public static String getMessage(String code, HttpServletRequest request){ Locale locale=null; Object obj=request.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME); Cookie[] cookies = request.getCookies(); String language = ""; for (Cookie cookie : cookies) { switch(cookie.getName()){ case "userLanguage": language = cookie.getValue(); break; default: break; } } if(language!=null) { String [] lan=language.split("-"); locale=new Locale(lan[0],lan[1]); }else { if (obj != null) { locale = (Locale) obj; } else { locale = request.getLocale(); request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale); } } return applicationContext.getMessage(code,null,locale); } }
配置监听
配置过滤器
<filter> <filter-name>SessionFilter</filter-name> <filter-class>com.mika.credit.web.rating.common.filter.I18NFilter</filter-class> </filter>
public class I18NFilter implements Filter { private static final String COOKIE_LANGUAGE = "userLanguage"; private static final String SYSTEM_LANGUAGE = "system_language"; @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) request; String systemLanguage = getSystemLanguage(httpServletRequest); String [] lan=systemLanguage.split("_"); Locale locale=new Locale(systemLanguage.substring(0,2),systemLanguage.substring(3)); httpServletRequest.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale); chain.doFilter(request, response); } @Override public void destroy() { System.out.println("init...."); } private String getSystemLanguage(HttpServletRequest request) { String systemLanguage = null; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (COOKIE_LANGUAGE.equals(cookie.getName())) { systemLanguage = cookie.getValue(); break; } } } if (systemLanguage == null || "".equals(systemLanguage)) { systemLanguage = request.getLocale().toString(); } if (systemLanguage == null || "".equals(systemLanguage)) { systemLanguage = Locale.getDefault().toString(); } return systemLanguage; }
string message=MessageUtil.getMessage("login_fail",request)
jsp页面使用
<%@ taglib prefix="spring" uri="/WEB-INF/tld/spring.tld" %>
<spring:message code="Your_3ACredit_Card"/>