springBoot 实现中文国际化

Posted 优雅转身

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springBoot 实现中文国际化相关的知识,希望对你有一定的参考价值。

一:实现效果如下:

二 SpringBoot 国际化配置

1、创建国际化配置文件(3个):

messages.properties

messages.user.name=用户名  
messages.user.password=密码  
messages.user.btn=登录 

messages_en_US.properties

messages.user.name=UserName  
messages.user.password=Password  
messages.user.btn=Sign In  
messages.keyword=keyword

messages_zh_CN.properties 

messages.user.name=\\u7528\\u6237\\u540d
messages.user.password=\\u5bc6\\u7801
messages.user.btn=\\u767b\\u5f55
messages.keyword=\\u5173\\u952e\\u8bcd

SpringBoot默认国际化文件为:classpath:message.properties,如果放在其它文件夹中,则需要在application.properties配置属性spring.messages.basename:

#表示放在classpath的i18n文件夹,文件前缀为mess
spring.messages.basename=i18n/messages

2.自定义国际化语言解析器  

package com.joyny.ecas.config;

import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Locale;

/**
 * 自定义国际化语言解析器 
 * 
 */  
public class MyLocaleResolver implements LocaleResolver {
      
    private static final String I18N_LANGUAGE = "i18n_language";  
    private static final String I18N_LANGUAGE_SESSION = "i18n_language_session";  
  
    @Override  
    public Locale resolveLocale(HttpServletRequest req) {
        String i18n_language = req.getParameter(I18N_LANGUAGE);  
        Locale locale = Locale.getDefault();  
        if(!StringUtils.isEmpty(i18n_language)) {
            String[] language = i18n_language.split("_");  
            locale = new Locale(language[0], language[1]);  
              
            //将国际化语言保存到session  
            HttpSession session = req.getSession();  
            session.setAttribute(I18N_LANGUAGE_SESSION, locale);  
        }else {  
            //如果没有带国际化参数,则判断session有没有保存,有保存,则使用保存的,也就是之前设置的,避免之后的请求不带国际化参数造成语言显示不对  
            HttpSession session = req.getSession();
            Locale localeInSession = (Locale) session.getAttribute(I18N_LANGUAGE_SESSION);  
            if(localeInSession != null) {  
                locale = localeInSession;  
            }  
        }  
        return locale;  
    }  
  
    @Override  
    public void setLocale(HttpServletRequest req, HttpServletResponse res, Locale locale) {
          
    }  
  
} 

3、把国际化语言解析器放到Spring容器中:

package com.joyny.ecas.config;

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;
//WebMvcConfigurerAdapter
//使用WebMvcConfigurerAdapter可以扩展SpringMvc的功能,包括拦截器,转换器等
//@EnableWebMvc //设置@EnableWebMvc为完全接管SpringMvc,但一般不要设置完全接管SpringMvc  
@Configuration
public class CustomMvcConfig implements WebMvcConfigurer {
  
    /** 
     * 配置自己的国际化语言解析器 
     * @return 
     */  
    @Bean
    public LocaleResolver localeResolver() {
        return new MyLocaleResolver();
    }

    /** 
     * 配置自己的拦截器 
     */  
    @Override  
    public void addInterceptors(InterceptorRegistry registry) {
        //super.addInterceptors(registry);  
    }  
      
      
}  

4、页面显示及切换国际化操作:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <style type="text/css">
        .ib{
            display: inline-block;
        }
        .ml20{
            margin-left: 20px;
        }
        .mt20{
            margin-top: 20px;
        }
    </style>
</head>
<body>
<div>
    <div>[[#{messages.user.name}]]:<input th:placeholder="#{messages.user.name}"/></div>
</div>
<div>
    <div>[[#{messages.user.password}]]:<input th:placeholder="#{messages.user.password}"/></div>
</div>
<div>
    <div><button>[[#{messages.user.btn}]]</button></div>
</div>

<div class="mt20">
    <span class="ib"><a th:href="@{/mapdemo/hello(i18n_language=zh_CN)}">中文</a></span>
    <span class="ib ml20"><a th:href="@{/mapdemo/hello(i18n_language=en_US)}">英文</a></span>
</div>

</body>
</html>

  

  

以上是关于springBoot 实现中文国际化的主要内容,如果未能解决你的问题,请参考以下文章

springBoot 实现中文国际化

Spring Boot 国际化(messages.properties)

一文教你实现 SpringBoot 中的自定义 Validator 和错误信息国际化配置

SpringBoot系列——i18n国际化

Springboot根据浏览器实现网站资源国际化

springboot实现国际化