java spring mvc jstl国际化

spring 添加拦截 如果参数获取到设定国际化参数 进行动态获取

 

 

package com.ewhl.interceptor;

import org.apache.commons.lang.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.servlet.support.RequestContextUtils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;

public class I18nInterceptor extends HandlerInterceptorAdapter {

   private String paramName;
   /**
    * Set the name of the parameter that contains a locale specification
    * in a locale change request. Default is "locale".
    */
   public void setParamName(String paramName) {
      this.paramName = paramName;
   }

   /**
    * Return the name of the parameter that contains a locale specification
    * in a locale change request.
    */
   public String getParamName() {
      return this.paramName;
   }
   
   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
         throws Exception {
      String lang = request.getParameter("lang");

      if (StringUtils.isNotBlank(lang)) {
         LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);

         if (localeResolver == null) {
            throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?");
         }

         localeResolver.setLocale(request, response, getLocal(lang));
         request.getSession().setAttribute("localeLang",localeResolver.resolveLocale(request));
         return true;
      }
      if(request.getSession().getAttribute("localeLang")!=null){
         LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
         if (localeResolver == null) {
            throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?");
         }
         localeResolver.setLocale(request, response, (Locale) request.getSession().getAttribute("localeLang"));
         request.getSession().setAttribute("localeLang",localeResolver.resolveLocale(request));
         return true;
      }
      Cookie langCookie = this.existLang(request);
      if (langCookie != null) {
         LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);

         if (localeResolver == null) {
            throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?");
         }
         request.getSession().setAttribute("localeLang",localeResolver.resolveLocale(request));
         localeResolver.setLocale(request, response, getLocal(langCookie.getValue()));
         return true;
      }
      request.getSession().setAttribute("localeLang",Locale.SIMPLIFIED_CHINESE);
      return true;
   }

   private Cookie existLang(HttpServletRequest request) {
      Cookie[] cookies = request.getCookies();
      if (cookies != null) {
         for (Cookie cookie : cookies) {
            if ("lang".equalsIgnoreCase(cookie.getName())) {
               return cookie;
            }
         }
      }
      return null;
   }

   private Locale getLocal(String lang) {
      if ("zh".equalsIgnoreCase(lang)) {
         return Locale.SIMPLIFIED_CHINESE;
      } else if ("en".equalsIgnoreCase(lang)) {
         return Locale.US;
      } else {
         return Locale.SIMPLIFIED_CHINESE;
      }

   }

}

resouces目录下放上

message_en_US.properties

login.loginButton=Login

message_zh_CN.properties

login.loginButton=登录

如果是jsp需要

<context-param>
   <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
   <param-value>message</param-value>
</context-param>

支持jstl方式

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<% LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
   if (localeResolver == null || localeResolver.resolveLocale(request).toString().equals("")) {
%>
<c:set var="localeResolver" value="zh_CN" />
<fmt:setLocale value="zh_CN" scope="application"/>
<%} else if ("cn".equalsIgnoreCase(localeResolver.resolveLocale(request).toString())) {%>
<c:set var="localeResolver" value="zh_CN" />

<fmt:setLocale value="zh_CN" scope="application"/>
<% } else {%>
<c:set var="localeResolver" value="en_US" />
<fmt:setLocale value="en_US" scope="application"/>
<% }%>

 

<fmt:message key="login.loginButton" /> 动态获取

 

如果java代码获取国际化

根据application获取message 

public String getLocale(String key){
   return SpringMvcBeanProxy.getApplicationContext().getMessage(key,null,(Locale)((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getSession().getAttribute("localeLang"));
}
getLocale(key) 直接获取

4a347cca4a07c874a652f2900a6328686d4.jpg

转载于:https://my.oschina.net/u/1261887/blog/3043116

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值