0%

SpringBoot国际化

文章字数:191,阅读全文大约需要1分钟

https://www.jianshu.com/p/e2eae08f3255

配置参数(bean)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@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);
}
};
}
}

配置文件

1
2
3
4
# 设置国际化文件存放的地方
spring:
messages:
basename: static/i18n/messages #相对路径,开头没有/

classpath:/static/i18n目录中添加文件:

  1. 默认文件messages.properties
    1
    默认翻译
  2. 美式英语messages_en_US.properties
    1
    user.title=User Login
  3. 简体中文messages_zh_CN.properties
    1
    user.title=用户登陆

后端使用国际化

  • 编写通用国际化工具类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @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中获取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 <!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>