SpringBoot下国际化配置

SpringBoot下使用MessageSource实现国际化配置

1.1在ResourceBundle下创建国际化配置文件

(1)在【resources】目录下创建【i18n】目录(名称随意起),在目录上【右键】-->【new】-->【Resource Bundle】-->【起名message】(起名随意)。

SpringBoot下国际化配置(2)在message下创建国际化配置文件

messages.properties (默认的语言配置文件,当找不到其他语言的配置的时候,使用该文件进行展示)。

i18n.user.name=孙大圣

messages_zh_CN.properties(中文)

i18n.user.name=孙行者

messages_en_US.properties(英文)

i18n.user.name=SevenSun

1.2 yml配置文件中配置刚才创建的国际化配置文件

spring:
  messages:
    # 国际化资源文件路径 eg:"messages,config.i18n.messages"
    basename: i18n/messages
    encoding: UTF-8

SpringBoot下国际化配置

*basename: i18n/messages //这里即为配置文件路径,如果创建时候改名了,这里记得要一致!!

​1.3 配置拦截器

package com.tab343.myspringboot.internationalization;

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.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

import java.util.Locale;


@Configuration
public class I18nConfig implements WebMvcConfigurer
{

    //两种方式区一中即可
    @Bean
    public LocaleResolver localeResolver()
    {
        //(1)Cookie方式
        /* CookieLocaleResolver localeResolver = new CookieLocaleResolver();
        localeResolver.setCookieName("localeCookie");
        //设置默认区域
        localeResolver.setDefaultLocale(Locale.ENGLISH);
        localeResolver.setCookieMaxAge(3600);//设置cookie有效期.
        return localeResolver;*/
    
        //(2)Session方式
        SessionLocaleResolver slr = new SessionLocaleResolver();
        // 默认语言
        slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
        return slr;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor()
    {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        // 参数名实现国际化效果
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry)
    {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

1.4 编写国际化测试Controller

package com.tab343.myspringboot.internationalization;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Locale;

/**
 * @Description : 国际化Controller
 */
@RestController
@RequestMapping("/i18n")
public class I18nController {

    @Autowired
    private MessageSource messageSource;

    @GetMapping("/hello")
    public String hello(){
        Locale locale = LocaleContextHolder.getLocale();
        return messageSource.getMessage("i18n.user.name", null, locale);
    }
}

这里通过MessageSource获取配置文件中key为"i18n.user.name"的值

1.5使用PostMan访问

(1)英文

SpringBoot下国际化配置

(2)中文

SpringBoot下国际化配置

上一篇:Redis简介及基本使用


下一篇:【创云小课堂】第十期:云盾二要素