Spring Boot国际化

编写国际化配置文件,抽取页面需要显示的国际化消息

  • 在resources文件下创建i18n文件夹(i18n含义为:internationalization,取头和尾i、n两个字母后还剩18个字符,所以叫i18n)
    -在这里插入图片描述
  • 在i18n文件中添加国际化配置文件 login.properties ,login_语言代码_国家代码,此时IDEA会自动标记这是一个国际化配置(Resource Bundle ‘login’)
    在这里插入图片描述
  • 当需要适配新的语言时可以右键->new->Add Property Files to Resource Bundle,此时只用填入语言代码和国家代码即可
    在这里插入图片描述
    在这里插入图片描述
  • 随意选择一个国际化配置文件,选择Resource Bundle视图,添加属性

在这里插入图片描述
在这里插入图片描述

代码中使用国际化的值

SpringBoot自动配置好了管理国际化资源文件的组件

  • 在配置中将国际化资源管理的组件改为i18n
spring:
  messages:
    basename: i18n.login
  • 注入MessageSource对象,通过getMessage方法获取消息
  	@Resource
    MessageSource messageSource;

    @GetMapping("/internal")
    public String getInternal(){
        String tip = messageSource.getMessage("login.tip", null, Locale.ENGLISH);
        return tip;
    }

区域信息解析器

spring boot中使用区域信息解析器识别当前语言,默认区域信息解析器org.springframework.web.servlet.LocaleResolve。
当使用默认区域信息解析器时,通过浏览器请求头中携带的Accept-Language参数识别浏览器当前使用语言。
想要自定义实现语言切换,则可以自定义实现区域信息解析器。

/***
* 自定义实现区域信息解析器
*/
public class MyLocaleResolver implements org.springframework.web.servlet.LocaleResolver {

   @Override
   public Locale resolveLocale(HttpServletRequest httpServletRequest) {
       Locale locale = Locale.getDefault();
       String l = httpServletRequest.getParameter("l");
       if (StringUtils.isNullOrEmpty(l)){
           return locale;
       }
       String[] split = l.split("_");
       if (!StringUtils.isNullOrEmpty(l) && split.length >= 2) {
          locale = new Locale(split[0], split[1]);
       }else {
           locale = new Locale(l);
       }
       return locale;
   }

   @Override
   public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

   }
}

在MVC配置中注入自定义的区域解析器

public class MvcConfig implements WebMvcConfigurer {
   @Bean
   public org.springframework.web.servlet.LocaleResolver localeResolver(){
       return  new MyLocaleResolver();
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值