增加国际化
什么是国际化
起始利用浏览器语言,在页面中的中英(当然还有其他语言)文切换,将页面的文字在其他语言和中文进行切换。
青锋开源地址(开源多版基础架构)
青锋目前开源了一下版本架构:
springboot+layui+thymeleaf版本
springboot+layui+jsp版本
springboot+vue ant design 前后端分离版本
springcloud+vue/react ant design 前后端分离双版本。
青锋springboot 家谱系统。
下载地址:青锋 (msxy) - Gitee
springboot版本整合国际化
1、增加I18nConfig过滤器
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Locale;
/**
* @ProjectName I18nConfig
* @author Administrator
* @version 1.0.0
* @Description 设置默认语言
* @createTime 2021/7/22 0022 21:03
*/
@Configuration
public class I18nConfig {
private static Logger logger = LoggerFactory.getLogger(I18nConfig.class);
@Bean(name = "localeResolver")
public LocaleResolver localeResolver() {
logger.info("创建cookieLocaleResolver");
LocaleResolver localeResolver = new LocaleResolver();
localeResolver.setDefaultLocale(Locale.CHINA);
logger.info("cookieLocaleResolver:");
return localeResolver;
}
}
2、增加LocaleResolver设置语言
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
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;
/**
* @ProjectName LocaleResolver
* @author Administrator
* @version 1.0.0
* @Description 每次加载页面时都会被调用,加载页面时都会设置并修改语言
* @createTime 2021/7/22 0022 21:03
*/
public class LocaleResolver extends AcceptHeaderLocaleResolver {
private Locale myLocal;
@Override
public Locale resolveLocale(HttpServletRequest request) {
//获取cookie数组
Cookie[] cookies = request.getCookies();
String lang = "";
if (cookies != null) {
//遍历cookie数组
for (Cookie cookie : cookies) {
if ("ClientLanguage".equals(cookie.getName())) {
lang = cookie.getValue();
break;
}
}
}
LocaleResolver localeResolver = (LocaleResolver) RequestContextUtils.getLocaleResolver(request);
if (lang == null || "".equals(lang)) {
myLocal = Locale.CHINA;
} else {
if (lang.equals("zh")) {
myLocal = Locale.CHINA;
} else if (lang.equals("en")) {
myLocal = Locale.US;
}
}
return myLocal;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
myLocal = locale;
}
}
3、增加I18N多语言配置文件
案例中配置了三个多语言文件:
1、messages.properties :公共配置,当没有匹配的语言文件时候加载本配置文件。
2、messages_en_US.properties:英文配置文件。
3、messages_zh_CN.properties:中文配置文件。
在外面的配置中messages和messages_zh_CN的内容是一样的。
login.loginName=登录名称
login.loginPwd=登录密码
qingfeng.title=大家好,我是青锋
login.loginName=Login name
login.loginPwd=Login password
qingfeng.title = Hello everyone, I'm Qingfeng
4、配置文件配置多语言
#设置国际化配置文件存放在classpath:/i18n目录下
spring.messages.basename: i18n/messages
spring.messages.encoding: UTF-8
#是否总是应用MessageFormat规则,甚至解析没有参数的消息,默认true
spring.messages.always-use-message-format: false
# 如果没有找到特定地区的文件,是否返回到系统区域,默认false
spring.messages.fallback-to-system-locale: true
# 是否使用消息代码作为默认消息,而不是抛出“NoSuchMessageException”,建议仅在开发过程中。,默认false
spring.messages.use-code-as-default-message: false
5、页面多语言切换实现
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<html>
<head>
<title>国际化</title>
<script src="${pageContext.request.contextPath}/resources/js/jquery-1.9.1.min.js"></script>
<script src="${pageContext.request.contextPath}/resources/js/jquery.cookie.js"></script>
</head>
<body>
<div align="center" style="margin: 20px auto">
<h1><spring:message code='login.loginName'/><br></h1>
<h1><spring:message code='login.loginPwd'/><br></h1>
<h1 style="color: red"><spring:message code='qingfeng.title'/><br></h1>
<div style="font-size: 24px">
<a href="javascript:;" onclick="changeLang('zh')"> 中文 </a>
<a href="javascript:;" onclick="changeLang('en')"> english </a>
</div>
</div>
</body>
<script>
function changeLang(lang) {
//cookie持久化
$.cookie('ClientLanguage',lang);
location.reload();
}
</script>
</html>
本文暂时没有评论,来添加一个吧(●'◡'●)