一、配置语言文件
在 resources 文件夹下创建一个文件夹local(自定义名称)来装三个配置文件
success_en_US.properties文件(英文)
success.name=Mr.Huang
success_zh_CN.properties(中文)
success.name=\u9EC4\u5FA1\u633A
success.properties(默认中文)
success.name=\u9EC4\u5FA1\u633A
其中success是根名
.name 是你需要中英文切换属性的属性值
spring.messages.basename=local/success
在application.properties文件中添加以上代码标识语言配置文件的位置
二、重写语言解析器方法
package handler;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
public class MyLocaleResolver implements LocaleResolver{
@Override
public Locale resolveLocale(HttpServletRequest request) {
String l = request.getParameter("l");
//没有设置的话就用系统默认的语言
Locale locale = Locale.getDefault();
if(!StringUtils.isEmpty(l)){
String[] split = l.split("_");
locale = new Locale(split[0], split[1]);
System.out.println(split[0]+" "+split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
// TODO Auto-generated method stub
}
}
创建一个MyLocaleResolver类实现LocaleResolver
其中 l 是指前端在地址栏后面的配置的参数, 值的格式是 zh_CN, zh是代表语言的, CN是代表国家的。
Locale locale = Locale.getDefault()表示如果没有相关参数就默认使用系统的语言。
但此时该方法返回的locale并没有添加到容器中, 即无法生效
三、将语言解析器对象添加到容器中生效
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter{
Logger logger = LoggerFactory.getLogger(getClass());
@Bean
public LocaleResolver localeResolver(){
logger.info("语言解析器已添加...");
return new MyLocaleResolver();
}
}
创建MVC配置类。
写一个方法用@Bean标识并且返回刚才写的MyLocaleResolver类的对象, 表示将该类的对象添加到容器中, 此时springboot自动配置的语言解析器就失效,转为使用我们编写的语言解析器了。
四、前端
<a th:href="@{/success(l='zh_CN')}">中文</a>
<a th:href="@{/success(l='en_US')}">英文</a>
<h1 th:text="#{success.name}">eee</h1>
这里只要点击中文或英文 , 下面的success.name就会根据参数l的值来改变语言了。