一个简单的例子让大家学会国际化
一个简单的登录页面,点击中文变成中文版,点击英文变成英文版,如下图所示(默认为中文版)
1.首先我们在resources文件下建立一个i18n的文件,在i18n下创建一个login.properties属性文件,里面存放了默认登录条件下的一些属性值
login.tip=请登录
login.user=用户名
login.password=密码
login.rem=记住我
login.but=登录
再建立一个login_en_US.properties属性文件,作为英文版的一些属性值
login.tip=Please sign in
login.user=Username
login.password=Password
login.rem=Remember me
login.but=Login in
再建立一个login_zh_CN.properties属性文件,作为中文版的一些属性值
login.tip=请登录
login.user=用户名
login.password=密码
login.rem=记住我
login.but=登录
–
2.接下来我们要写一个自己的区域解析器,在此之前,我们先来简单了解一下springboot默认的解析器,查看源码如下,该方法的意思是如果我们的LocaleResolver和固定的一样时,就使用固定的,否则就使用AcceptHeaderLocaleResolver里的,当然了,该方法只有在配置了spring.mvc.locale才会生效
前端的html和自己的解析器
<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>
<p th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>
<input type="text" name="username" class="form-control" th:placeholder="#{login.user}" required="" autofocus="">
<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" th:text="#{login.rem}">
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.but}">Sign in</button>
<p class="mt-5 mb-3 text-muted">© 2017-2018</p>
<a class="btn btn-sm"th:href="@{/index.html(l='zh_CN')}">中文</a>
<a class="btn btn-sm"th:href="@{/index.html(l='en_US')}">English</a>
当我们点击中文/英文时,l参数会被我们的解析器所拿到,根据参数来选择对应的properties文件
如果没有l参数(即初始界面),会使用默认的properties文件
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String l = request.getParameter("l");
//没有就使用默认的
if (!StringUtils.isEmpty(l)){
String[] s = l.split("_");
return new Locale(s[0],s[1]);
}else {
Locale defaultLocale = Locale.getDefault();
return defaultLocale;
}
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
3.注意点
第一:在application.properties中需要配置spring.messages.basename=i18n.login,此配置指明了消息来源
第二:需要把自己的解析器放到容器里
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
}
收工
版权声明:本文为weixin_43550933原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。