SpringBoot学习笔记(八)国际化

1.编写国际化配置文件

1)编写国际化配置文件,抽取页面需要显示的国际化消息
在这里插入图片描述
2)SpringBoot自动配置好了管理国际化资源文件的组件;

@ConfigurationProperties(prefix = "spring.messages") 
public class MessageSourceAutoConfiguration {   
    /** 
     * Comma‐separated list of basenames (essentially a fully‐qualified classpath      
     * location), each following the ResourceBundle convention with relaxed support for       
     * slash based locations. If it doesn't contain a package qualifier (such as      
     * "org.mypackage"), it will be resolved from the classpath root.       
     */      
     private String basename = "messages";            
     //我们的配置文件可以直接放在类路径下叫messages.properties;   

     @Bean 
     public MessageSource messageSource() {
         ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();          
         if (StringUtils.hasText(this.basename)) {
             //设置国际化资源文件的基础名(去掉语言国家代码的) 
             messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(   
                     StringUtils.trimAllWhitespace(this.basename)));                      
             }          
             if (this.encoding != null) {
                 messageSource.setDefaultEncoding(this.encoding.name());
             }          
             messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale);          
             messageSource.setCacheSeconds(this.cacheSeconds);          
             messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat);          
             return messageSource;   
             }       

3)、去页面获取国际化的值;
在这里插入图片描述

<!DOCTYPE html> 
<html lang="en"  xmlns:th="http://www.thymeleaf.org">
    <head>
          <meta http‐equiv="Content‐Type" content="text/html; charset=UTF‐8">          
          <meta name="viewport" content="width=device‐width, initial‐scale=1, shrink‐tofit=no">          
          <meta name="description" content="">          
          <meta name="author" content="">          
          <title>Signin Template for Bootstrap</title>          
          <!‐‐ Bootstrap core CSS ‐‐>          
          <link href="asserts/css/bootstrap.min.css"  th:href="@{/webjars/bootstrap/4.0.0/css/bootstrap.css}" rel="stylesheet">          
          <!‐‐ Custom styles for this template ‐‐>          
          <link href="asserts/css/signin.css" th:href="@{/asserts/css/signin.css}"  rel="stylesheet">          
     </head>   
          
     <body class="text‐center">  
         <form class="form‐signin" action="dashboard.html">     
             <img class="mb‐4" th:src="@{/asserts/img/bootstrap‐solid.svg}"  src="asserts/img/bootstrap‐solid.svg" alt="" width="72" height="72">             
             <h1 class="h3 mb‐3 font‐weight‐normal" th:text="#{login.tip}">Please sign  in</h1>              
             <label class="sr‐only" th:text="#{login.username}">Username</label>              
             <input type="text" class="form‐control" placeholder="Username" th:placeholder="# {login.username}" required="" autofocus="">              
             <label class="sr‐only" th:text="#{login.password}">Password</label>              
             <input type="password" class="form‐control" placeholder="Password"  th:placeholder="#{login.password}" required="">              
             <div class="checkbox mb‐3">              
                 <label>                             
                 <input type="checkbox" value="remember‐me"/> [[#{login.remember}]]                
                 </label> 
              </div>              
              <button class="btn btn‐lg btn‐primary btn‐block" type="submit" th:text="# {login.btn}">Sign in</button>              
              <p class="mt‐5 mb‐3 text‐muted">© 20172018</p>              
              <a class="btn btn‐sm">中文</a>              
              <a class="btn btn‐sm">English</a>              
           </form>            

      </body>   
</html>

效果:根据浏览器语言设置的信息切换了国际化

原理:

国际化Locale(区域信息对象);LocaleResolver(获取区域信息对象);

        @Bean
        @ConditionalOnMissingBean         
        @ConditionalOnProperty(prefix = "spring.mvc", name = "locale")          
        public LocaleResolver localeResolver() {  
            if (this.mvcProperties              .getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) { 
                  return new FixedLocaleResolver(this.mvcProperties.getLocale());      
            }              
            AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();              
            localeResolver.setDefaultLocale(this.mvcProperties.getLocale());              
            return localeResolver;              
         }          
         默认的就是根据请求头带来的区域信息获取Locale进行国际化

4)、点击链接切换国际化

/**  
* 可以在连接上携带区域信息  
* */ 
 public class MyLocaleResolver implements LocaleResolver {     
 
      @Override     
 public Locale resolveLocale(HttpServletRequest request) {     
     String l = request.getParameter("l");         
     Locale locale = Locale.getDefault();         
     if(!StringUtils.isEmpty(l)){     
        String[] split = l.split("_");
        locale = new Locale(split[0],split[1]);         
      }         
      return locale;
   }       
  
  @Override     
  public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale  locale) {  
  
      } 
 }      
 @Bean     
    public LocaleResolver localeResolver(){
         return new MyLocaleResolver();     
    } 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值