【springboot】国际化

springboot国际化

背景

在互联网下,不同的国家语言不同,所以网站也提供了.不同语言的版本,这就是国际化

效果

  • 中文
    在这里插入图片描述
  • 英文
    在这里插入图片描述

配置

  • 在resources下创建i18n文件夹,并创建文件

    • language.properties 默认语言

      language.title=清欢渡个人博客小站
      language.login=登录
      language.logout=退出
      language.admin=后台管理
      
    • language_en_US.properties 英文

      language.title=bo.huang_personal_blog
      language.login=login
      language.logout=logout
      language.admin=system-admin
      
    • language_zh_CN.properties 中文

      language.title=清欢渡个人博客小站
      language.login=登录
      language.logout=退出
      language.admin=后台管理
      

在这里插入图片描述

  • 自定义LocaleResolver类(方便切换语言)

    默认没有参数,从请求头中获取,也可以通过参数lg指定语言(xxxx?lg=en-US)

    package com.hb.study.springboot.config;
    
    import lombok.extern.java.Log;
    import org.springframework.web.servlet.LocaleResolver;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Locale;
    
    /**
     * @author bo.huang
     * @since 2020/5/20 1:43 下午
     */
    @Log
    public class LocaleResolverConfig implements LocaleResolver {
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            log.fine("=============语言");
            //获取语言参数
            String lg = request.getParameter("lg");
            if (lg == null || lg.length() <= 0) {
                lg = getHeadLg(request);
            }
            String[] split = lg.split("-");
            return new Locale(split[0], split[1]);
        }
    
        /**
         * 获取请求头中的语言头
         *
         * @param request request
         * @return java.lang.String
         * @author bo.huang update
         * @date 2020/5/20 1:47 下午
         */
        private String getHeadLg(HttpServletRequest request) {
            String header = request.getHeader("Accept-Language");
            if (header == null || header.length() <= 0) {
                return "zh-CN";
            }
            return header.split(",")[0];
        }
    
        @Override
        public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
        }
    }
    
  • 配置类(把自定义LocaleResolver类,交给spring容器管理)

    package com.hb.study.springboot.config;
    
    import lombok.extern.java.Log;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.LocaleResolver;
    
    /**
     * @author bo.huang
     * @since 2020/5/20 2:23 下午
     */
    @Configuration
    @Log
    public class BeanConfig {
    
        @Bean("localeResolver")
        public LocaleResolver getLocaleResolver() {
            log.info("===========实例化LocaleResolver");
            return new LocaleResolverConfig();
        }
    }
    

    注意:一定要@Bean 添加默认名称localeResolver,否则可以会获取不到

  • 最后在配置文件配置

    spring:
    	messages:
    		basename: i18n/language	
    

这样就完成了配置,可以运行容器了,但是有一个问题,这个不适用于前后端分离项目,前后端分离项目需要从新设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值