SpringBoot国际化

阅读量: 87 编辑

SpringBoot国际化

一、国际化

  • 1、就是根据不同的浏览器语言,加载不同的配置文件

  • 2、springboot默认就支持国际化的

  • 3、只需要在resources/下创建国际化配置文件即可,名称以messages开始

二、 实现国际化 (i18n:internationalization)

1、创建 resources/i18n 目录和国际化配置文件

并在文件中分别定义 welcome 的值,比如 welcome=你好,欢迎你

messages.properties(默认)
messages_zh_CN.properties(中文)
messages_en_US.properties(英文)

2、application.yml 配置

spring:
	messages:
        basename: i18n/messages
        encoding: UTF-8

3、借助FreeMarker实现国际化

  • 3.1、在html头部添加<#import "spring.ftl" as s>

  • 3.2、使用<@s.message code="welcome" />即可

4、添加拦截器,根据我们选择的语言切换国际化

  • I18nLocaleConfig.java

三、代码

I18nLocaleConfig.java

package com.qicong.sboot.s15;

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;

/**
 * User: 祁大聪
 */
@Configuration
public class I18nLocaleConfig {
    //默认解析器,设置为汉语
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver resolver = new SessionLocaleResolver();
        resolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
        return resolver;
    }

    //拦截器:请求参数为“lang”
    @Bean
    public WebMvcConfigurer localeInterceptor() {
        return new WebMvcConfigurer() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
                interceptor.setParamName("lang");
                registry.addInterceptor(interceptor);
            }
        };
    }
}

s15.html:通过Controller跳转即可

<!DOCTYPE html>
<#import "spring.ftl" as s>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        Hello i18n <br/>
        <a href="?lang=zh_CN">简体中文</a> &nbsp;&nbsp;&nbsp;
        <a href="?lang=en_US">English(US)</a>
        <br/>
        <@s.message code="welcome" />
    </body>
</html>

S15Controller.java

package com.qicong.sboot.s15;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 * User: 祁大聪
 */
@Controller
@RequestMapping("s15")
public class S15Controller {

    @RequestMapping("index")
    public ModelAndView index(){
        ModelAndView mv = new ModelAndView("s15");
        return mv;
    }

}