1.国际化概述
通过替换占位符,实现语言的本地化:
<!-- thymeleaf模板,其中#{greeting}为占位符,引用国际化资源 -->
<h1>[[#{greeting}]], This is the body of the sample view</h1>
关于Locale:
Locale就是地区的意思,每个地区的语言有自己的代码,如简体中文代码为zh_CN,英语为:en_US。
代码前半部分代表语言,后半部分代表国家地区。
2.SpringBoot国际化配置
2.1 Java配置
实现WebMvcConfigurer接口:
package haha.otaku.springSecurity.config;
import java.util.Locale;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.thymeleaf.extras.springsecurity5.dialect.SpringSecurityDialect;
@EnableWebMvc
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
//-------------------------------国际化配置
/**
* 用于改变Locale的拦截器,如页面带上lang参数,若url?lang=zh_CN,则Locale变为zh_CN,显示中文信息
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang"); //设置参数名
registry.addInterceptor(localeChangeInterceptor);
}
/**
* 国际化策略,使用cookie保存用户的国际化信息
* @return
*/
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setDefaultLocale(Locale.US); //默认为英文
return localeResolver;
}
}
2.2 messages.properties
SpringBoot默认从 /src/main/resources路径下加载messages.properties文件。
加载国际化配置的规则如下:
- 未指定Locale,加载messages.properties文件
- 指定了Locale,加载messages_<Locale>.properties文件,如Locale为zh_CN,则加载messages_zh_CN.properties文件
messages.properties
greeting=Hello
lang.chinese=Chinese
lang.english=English
messages_zh_CN.properties
greeting=您好
lang.chinese=中文
lang.english=英文
messages_en_US.properties
greeting=Hello
lang.chinese=Chinese
lang.english=English
3. Themyleaf模板集成国际化
在thymeleaf中,通过 #{key} 引用messages.properties中定义的属性:
<h1>[[#{greeting}]], This is the body of the sample view</h1>
<p>
Select your Locale:
<!-- 带上lang参数,切换Locale -->
<a href="/homepage.html?lang=en_US" th:text="#{lang.english}"></a>
<a href="/homepage.html?lang=zh_CN" th:text="#{lang.chinese}"></a>
</p>
效果如下所示:
4.总结
本文介绍了如何在SpringBoot中配置国际化信息,完整项目参见:
https://github.com/superOTAKU/springSecurity
注:项目中有关SpringSecurity的特性可忽略。