实现国际化
以登录login页面为例:
-
在resources/templates文件夹下创建index.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>Signin Template for Bootstrap</title> <!-- Bootstrap core CSS --> <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"> <!-- Custom styles for this template --> <link th:href="@{/css/signin.css}" rel="stylesheet"> </head> <body class="text-center"> <form class="form-signin" th:action="@{/user/login}"> <img class="mb-4" th:src="@{/img/bootstrap-solid.svg}" alt="" width="72" height="72"> <h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1> <!--如果msg的值不为空,则显示msg--> <p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p> <label class="sr-only" th:text="#{login.username}">Username</label> <input type="text" name="username" class="form-control" th:placeholder="#{login.username}" required="" autofocus=""> <label class="sr-only" th:text="#{login.password}">Password</label> <input type="password" name="password" class="form-control" th:placeholder="#{login.password}" required=""> <div class="checkbox mb-3"> <label> <input type="checkbox" value="remember-me" > [[#{login.remember}]] </label> </div> <button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign in</button> <p class="mt-5 mb-3 text-muted">© 2017-2018</p> <a class="btn btn-sm" th:href="@{/index(l='ch_ZN')}">中文</a> <a class="btn btn-sm" th:href="@{/index(l='en_US')}">English</a> </form> </body> </html>
-
在resources文件夹下创建i18n文件夹
-
在i18n文件夹下创建login.properties(默认)、login_en_US.properties(英文)、login_zh_CN.properties(中文)文件
login.properties(默认)
login.btn=登录 login.password=密码 login.remember=记住我 login.tip=请登录 login.username=用户名
login_en_US.properties(英文)
login.btn=Sign in login.password=password login.remember=Remember me login.tip=Please Sign in login.username=username
login_zh_CN.properties(中文)
login.btn=登录 login.password=密码 login.remember=记住我 login.tip=请登录 login.username=用户名
-
在src/main/java/config文件夹下创建MyMvcConfig.java文件和MyLocaleResolver.java文件
MyLocaleResolver.java
package com.test.demo.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) { //如果请求url没有带国际化参数就用默认的 Locale locale = Locale.getDefault(); //获取请求url中的国际化参数值 String url = request.getParameter("l"); if(!StringUtils.isEmpty(url)){ String[] splits = url.split("_"); //国家 地区 locale = new Locale(splits[0], splits[1]); } return locale; } @Override public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { } }
MyMvcConfig.java
package com.test.demo.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.Locale; //扩展springmvc @Configuration public class MyMvcConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); registry.addViewController("/index").setViewName("index"); } //自定义国际化 @Bean public LocaleResolver localeResolver(){ return new MyLocaleResolver(); } }
-
修改配置文件application.yml
spring: #关闭模板引擎缓存 thymeleaf: cache: false #配置国际化文件 messages: basename: i18n.login