SpringBoot 国际化配置

本文介绍了如何在SpringBoot项目中实现国际化配置,包括创建不同语言的properties文件,配置application.yml,选择合适的LocaleResolver(如SessionLocaleResolver),封装MessageUtils工具类,以及前端如何通过参数切换语言。
摘要由CSDN通过智能技术生成

前言

前天来个新需求,由于客户群体分中国内地、香港和国外,产品那边需要根据客户地区语言来决定系统里面的文案表现。于是给这个SpringBoot项目做上国际化配置。

实例代码

第一步,在resources资源目录下,创建i18n目录,然后分别创建四个文件:messages.properties、messages_zh_CN.properties、messages_zh_TW.properties和messages_en_US.properties。
在这里插入图片描述
第二步,在application.yml配置文件里面配置i18n目录。

spring:
  # 语言包
  messages:
    basename: i18n/messages

第三步,配置国际化解析器。Spring现有提供的解析器有:SessionLocaleResolver、CookieLocaleResolver和AcceptHeaderLocaleResolver。

SessionLocaleResolver

SessionLocaleResolver允许你从session中取得可能与用户请求相关联的地区Locale和时区TimeZone信息。与CookieLocaleResolver不同,这种存取策略仅将Servlet容器的HttpSession中相关的地区信息存取到本地。因此,这些设置仅会为该会话(session)临时保存,session结束后,这些设置就会失效。

不过请注意,该解析器与其他外部session管理机制,比如Spring的Session项目等,并没有直接联系。该SessionLocaleResolver仅会简单地从与当前请求HttpServletRequest相关的HttpSession对象中,取出对应的属性,并修改其值,仅此而已。

CookieLocaleResolver

CookieLocaleResolver解析会检查客户端是否有Cookie,里面可能存放了地区Locale或时区TimeZone信息。如果检查到相应的值,解析器就使用它们。通过该解析器的属性,你可以指定cookie的名称和其最大的存活时间。

AcceptHeaderLocaleResolver

AcceptHeaderLocaleResolver解析器会检查客户端(比如,浏览器,等)所发送的请求中是否携带accept-language请求头。通常,该请求头字段中包含了客户端操作系统的地区信息。不过请注意,该解析器不支持时区信息的解析。

根据业务应用场景分析,我们采用的是SessionLocaleResolver。

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.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

import java.util.Locale;

/**
 * 国际化语言配置
 * @author rokcy
 * @date 2021/4/12 9:33
 */
@Configuration
public class LocaleConfig {
   
    
    /**
     * 默认解析器 其中locale表示默认语言
     */
    @Bean
    public LocaleResolver localeResolver() {
   
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        localeResolver.setDefaultLocale(Locale.CHINA);
        return localeResolver;
    }

    /**
     * 默认拦截器 其中lang表示切换语言的参数名
     */
    @Bean
    public WebMvcConfigurer localeInterceptor() {
   
        return new WebMvcConfigurer() {
   
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
   
            	// LocaleChangeInterceptors只支持从URL参数读取语言参数,为了也能从headers头部读取语言参数,我们继承了LocaleChangeInterceptors,并重写了preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)方法
                CustomerLocaleChangeInterceptors localeInterceptor = new CustomerLocaleChangeInterceptors();
                localeInterceptor.setParamName
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值