国际化是一个使应用程序适应不同语言和区域而无需对源代码进行工程更改的过程。用它来说,国际化是对本地化的准备。
需要Spring Boot Starter Web和Spring Boot Starter Thymeleaf依赖来在Spring Boot中开发Web应用程序。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
需要确定应用程序的默认Locale。在Spring Boot应用程序中添加LocaleResolver bean。
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setDefaultLocale(Locale.US);
return sessionLocaleResolver;
}
LocaleChangeInterceptor用于根据添加到请求的语言参数的值更改新的Locale。
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("language");
return localeChangeInterceptor;
}
为了起到这种作用,需要将LocaleChangeInterceptor添加到应用程序的注册表拦截器中。配置类应扩展WebMvcConfigurerAdapter类并覆盖addInterceptors()方法。
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
默认情况下,Spring Boot应用程序从类路径下的src/main/resources文件夹中获取消息源。缺省语言环境消息文件名应为message.properties,每个语言环境的文件应命名为messages_XX.properties。“XX”表示区域代码。
应将所有消息属性设置为键值对。如果在语言环境中找不到任何属性,则应用程序将使用messages.properties 文件中的默认属性。
默认的messages.properties 如下所示 -
welcome.text=Hi Welcome to Everyone
中文对应的属性文件:message_zh.properties 如下所示 -
welcome.text=大家好
在HTML文件中,使用语法#{welcome.text}显示属性文件中的消息。
<h1 th:text = "#{welcome.text}"></h1>
现在,使用如下所示的命令运行JAR文件 -
java -jar target\springboot_international-0.0.1-SNAPSHOT.jar
应用程序已在Tomcat端口8080上启动。
现在在Web浏览器中访问URL => http://localhost:8080/locale ,可以看到以下输出 -
访问URL => http://localhost:8080/locale?language=cn 将看到如下所示结果 -