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> &nbsp;&nbsp;&nbsp;
    	<a href="/homepage.html?lang=zh_CN" th:text="#{lang.chinese}"></a>
    </p>

效果如下所示:
SpringBoot国际化 - Localization

4.总结

本文介绍了如何在SpringBoot中配置国际化信息,完整项目参见:
https://github.com/superOTAKU/springSecurity

注:项目中有关SpringSecurity的特性可忽略。

相关文章:

  • 2021-04-26
  • 2019-09-16
  • 2021-11-23
  • 2021-10-12
  • 2021-10-16
  • 2021-10-16
  • 2021-10-16
猜你喜欢
  • 2018-07-18
  • 2021-04-03
  • 2020-04-19
  • 2018-11-22
  • 2021-11-08
  • 2021-03-29
  • 2021-11-12
相关资源
相似解决方案