Skip to content

1.17SSO中英文切换

MessageTag

<spring:message code="Account_Login"/>
protected String resolveMessage() throws JspException, NoSuchMessageException {
        MessageSource messageSource = this.getMessageSource();
        if (messageSource == null) {
            throw new JspTagException("No corresponding MessageSource found");
        } else if (this.message != null) {
            return messageSource.getMessage(this.message, this.getRequestContext().getLocale());
        } else if (this.code == null && this.text == null) {
            return this.text;
        } else {
            Object[] argumentsArray = this.resolveArguments(this.arguments);
            if (!this.nestedArguments.isEmpty()) {
                argumentsArray = this.appendArguments(argumentsArray, this.nestedArguments.toArray());
            }

            return this.text != null ? messageSource.getMessage(this.code, argumentsArray, this.text, this.getRequestContext().getLocale()) : messageSource.getMessage(this.code, argumentsArray, this.getRequestContext().getLocale());
        }
    }
    
    
    this.getRequestContext().getLocale()

最后到自定义类

ReloadableResourceBundleMessageSource

resolveCodeWithoutArguments
package com.supermap.icloud.cas.util;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Locale;
/**
 * http工具类
 */
public class HttpUtil {
	/**
	 * GET请求
	 */
	public final static String GET_METHOD_NAME = "GET";
	/**
	 * POST请求
	 */
	public final static String POST_METHOD_NAME = "POST";
	public final static Charset UTF_8 = StandardCharsets.UTF_8;
	public final static Charset ISO_8859_1 = StandardCharsets.ISO_8859_1;
	public final static String APPLICATION_JSON = "application/json";
	public final static int SC_NOT_ACCEPTABLE = 406;

	/**
	 * 设置contentType为json并且设置编码为utf-8
	 */
	public static void setJsonContentTypeWithUTF8Encode(HttpServletResponse response) {
		setUTF8Encoding(response);
		setContentTypeJson(response);
	}

	/**
	 * 发送json
	 * @param response
	 * @param responseContent
	 */
	public static <T>  void sendJsonResponce(HttpServletResponse response, T responseContent) {
		setUTF8Encoding(response);
		setContentTypeJson(response);
		PrintWriter printWriter = null;
        try {
        	printWriter = response.getWriter();
        	printWriter.print(JSONObject.toJSONString(responseContent));
        } catch (Exception e) {
            throw new IllegalArgumentException(e.getMessage());
        } finally {
            if (null != printWriter) {
                printWriter.flush();
                printWriter.close();
            }
        }
	}

	/**
	 * 设置contentType为json
	 */
	public static void setContentTypeJson(HttpServletResponse response) {
		response.setContentType(APPLICATION_JSON);
	}

	/**
	 * 设置编码为utf-8
	 */
	public static void setUTF8Encoding(HttpServletResponse response) {
		response.setCharacterEncoding(UTF_8.name());
	}

	/**
	 * 从request中拿到语言
	 * @param httpServletRequest
	 * @return
	 */
	public static String getExpectedlanguage(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
		String curAcceptLanguage = null;

		String language = httpServletRequest.getParameter("language");
		if(StringUtils.isNotBlank(language)){
			curAcceptLanguage = language;
			setLanguage(httpServletRequest, httpServletResponse, curAcceptLanguage);
		}

		if(curAcceptLanguage == null){
			Cookie[] cookies = httpServletRequest.getCookies();
			if (cookies != null) {
				for (int i = 0; i < cookies.length; i++) {
					Cookie cookie = cookies[i];
					if ("language".equalsIgnoreCase(cookie.getName())) {
						curAcceptLanguage = cookie.getValue();
						break;
					}
				}
			}
		}


		if (curAcceptLanguage == null) {
			curAcceptLanguage = httpServletRequest.getHeader("accept-language");
		}

		if (curAcceptLanguage != null) {
			curAcceptLanguage = (curAcceptLanguage.split(";")[0]).split(",")[0];
		}
		return curAcceptLanguage;

	}

	/**
	 * 向cookie设置language
	 * @param httpServletRequest
	 * @param httpServletResponse
	 * @param curAcceptLanguage
	 */
	private static void setLanguage(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String curAcceptLanguage) {
		Cookie cookie = new Cookie("language",curAcceptLanguage);
		String remoteAddr = httpServletRequest.getRemoteAddr();
		cookie.setDomain(remoteAddr);
		//本地locahost
		if("0:0:0:0:0:0:0:1".equals(remoteAddr)){
			cookie.setDomain("localhost");
		}
		cookie.setPath("/");
		httpServletResponse.addCookie(cookie);
	}

	/**
	 * 从语言拿到对应的Locale
	 * @param language
	 * @return
	 */
	public static Locale getLocaleByLanguage(String language) {
		//为了国际化,默认应该是英文
		Locale result = Locale.ENGLISH;
		if ("zh-cn".equalsIgnoreCase(language) || "zh-Hans-CN".equalsIgnoreCase(language)
				|| "zh-Hans".equalsIgnoreCase(language) || "zh".equalsIgnoreCase(language) || language.contains("zh")) {
			result = Locale.SIMPLIFIED_CHINESE;
		} else if ("en-us".equalsIgnoreCase(language) || "en-gb".equalsIgnoreCase(language)
				|| "en".equalsIgnoreCase(language) || language.contains("en")) {
			result = Locale.ENGLISH;
		} else if ("ja".equalsIgnoreCase(language) || "ja-JP".equalsIgnoreCase(language) || language.contains("ja")) {
			result = Locale.JAPAN;
		}
		return result;
	}

	/**
	 * 获取应用程序根目录
	 * @param request
	 * @return
	 */
	public static String getApplicationRootPath(HttpServletRequest request) {
		String rootPath = null;
		String contextPath = request.getContextPath();
		String servletPath = request.getServletPath();
		rootPath = contextPath + servletPath;
		String requestURI = request.getRequestURL().toString();
		int index = requestURI.indexOf(rootPath);
		rootPath = requestURI.substring(0, index + rootPath.length());
		if (("".equals(contextPath)) && ("/".equals(servletPath))) {
			rootPath = requestURI;
			if (rootPath.endsWith("//"))
				rootPath = rootPath.substring(0, rootPath.length() - 1);
		}
		return rootPath;
	}
}