Spring Boot国际化
以 spring-boot-springmvc-demo1为例,在 src/main/resources 下创建一个 i18n 的目录,并在该目录中按照国际化资源文件命名格式分别创建以下三个文件,
- login.properties:无语言设置时生效
- login_en_US.properties :英语时生效
- login_zh_CN.properties:中文时生效
login.properties
login.tip=登录系统
login.username=用户名
login.pwd=密码
login.submit=登录
login_en_US.properties
login.tip=Login System
login.username=username
login.pwd=password
login.submit=submit
login_zh_CN.properties
login.tip=登录系统
login.username=用户名
login.pwd=密码
login.submit=登录
login.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>后台管理系统</title>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" th:href="@{../Css/bootstrap.css}"/>
<link rel="stylesheet" type="text/css" th:href="@{../Css/bootstrap-responsive.css}" />
<link rel="stylesheet" type="text/css" th:href="@{../Css/style.css}" />
<script type="text/javascript" th:src="@{../Js/jquery.js}"></script>
<script type="text/javascript" th:src="@{../Js/jquery.sorted.js}"></script>
<script type="text/javascript" th:src="@{../Js/bootstrap.js}"></script>
<script type="text/javascript" th:src="@{../Js/ckform.js}"></script>
<script type="text/javascript" th:src="@{../Js/common.js}"></script>
<style type="text/css">
body {
padding-top: 40px;
padding-bottom: 40px;
background-color: #f5f5f5;
}
.form-signin {
max-width: 300px;
padding: 19px 29px 29px;
margin: 0 auto 20px;
background-color: #fff;
border: 1px solid #e5e5e5;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.form-signin input[type="text"],
.form-signin input[type="password"] {
font-size: 16px;
height: auto;
margin-bottom: 15px;
padding: 7px 9px;
}
</style>
</head>
<body>
<div class="container">
<form class="form-signin" method="post" action="index.html">
<h2 class="form-signin-heading" th:text="#{login.tip}">Login System</h2>
<input type="text" name="username" class="input-block-level" th:placeholder="#{login.username}">
<input type="password" name="password" class="input-block-level" th:placeholder="#{login.pwd}">
<p><button class="btn btn-large btn-primary" type="submit">[[#{login.submit}]]</button></p>
<p> <a class="" th:href="@{/login.html(1='zh_CN')}">中文</a>
<a class="" th:href="@{/login.html(1='en_US')}">English</a>
</p>
</form>
</div>
</body>
</html>
MyMvcConfig
package com.yuan.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("login");
registry.addViewController("/login.html").setViewName("login");
}
//注册
@Bean
public LocaleResolver localeResolver() {
return new MyLocaleResolver();
}
}
MyLocaleResolver
package com.yuan.config;
import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class MyLocaleResolver implements LocaleResolver {
//解析请求
@Override
public Locale resolveLocale(HttpServletRequest request) {
//获取请求的语言的参数
String language=request.getParameter("1");
Locale locale=Locale.getDefault();
//如果请求的连接携带了国际化的参数
if (!StringUtils.isEmpty(language)){
//zh_CH
String[] split = language.split("_");
//国家,地区
locale=new Locale(split[0], split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
application.properties
#配置文件
spring.messages.basename=i18n.login