配置参数(bean)
@Configuration
public class LocaleConfig {
/**
* 默认解析器 其中locale表示默认语言
*/
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
//设置默认英语
localeResolver.setDefaultLocale(Locale.US);
//注入Bean
return localeResolver;
}
/**
* 默认拦截器 其中lang表示切换语言的参数名
* 例如: ?lang=zh_CN
*/
@Bean
public WebMvcConfigurer localeInterceptor() {
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
localeInterceptor.setParamName("lang");
registry.addInterceptor(localeInterceptor);
}
};
}
}
配置文件
# 设置国际化文件存放的地方
spring:
messages:
basename: static/i18n/messages #相对路径,开头没有/
classpath:/static/i18n
目录中添加文件:
- 默认文件
messages.properties
默认翻译
- 美式英语
messages_en_US.properties
user.title=User Login
- 简体中文
messages_zh_CN.properties
user.title=用户登陆
后端使用国际化
- 编写通用国际化工具类
@Component
public class MessageUtils{
private static MessageSource messageSource;
public MessageUtils(MessageSource messageSource) {
MessageUtils.messageSource = messageSource;
}
/**
* 获取单个国际化翻译值
*/
public static String get(String msgKey) {
try {
return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
} catch (Exception e) {
return msgKey;
}
}
freeMarker中获取
<!DOCTYPE html>
<html lang="en">
<head>
<!--引入-->
<#import "spring.ftl" as spring>
<#assign arg = ["AAA","张三"]>
<title><@spring.messageArgs "title" ,arg /></title>
<meta charset="UTF-8">
</head>
<body>
<br/>
<a class="changeLang" href="javascript:void(0);">english</a><br/>
<a class="changeLang" href="javascript:void(0);">中文</a><br/>
<!--使用-->
<@spring.message code="user.loginname"/><br/>
</body>
<script src="${request.contextPath}/static/jquery.js"></script>
<script>
$(".changeLang").on("click", function () {
switch ($(this).text()) {
case "中文": {
window.location.href = "index?_lang=zh_CN";
break;
}
case "english": {
window.location.href = "index?_lang=en_US";
break;
}
}
})
</script>
</html>