Spring Boot 國際化及點擊鏈接跳轉國家語言


一、國際化

  在SpringBoot中已經自動幫我們配置管理國際化資源的組件,所以我們只需要編寫代碼就可。

  

@Bean
    @ConfigurationProperties(prefix = "spring.messages")
    public MessageSourceProperties messageSourceProperties() {
        return new MessageSourceProperties();
    }

    @Bean
    public MessageSource messageSource(MessageSourceProperties properties) {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        if (StringUtils.hasText(properties.getBasename())) {
            messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(
                    StringUtils.trimAllWhitespace(properties.getBasename())));  //獲取基礎名(login_zh_CN中的login部分)
        }
        if (properties.getEncoding() != null) {
            messageSource.setDefaultEncoding(properties.getEncoding().name());
        }
        messageSource.setFallbackToSystemLocale(properties.isFallbackToSystemLocale());
        Duration cacheDuration = properties.getCacheDuration();
        if (cacheDuration != null) {
            messageSource.setCacheMillis(cacheDuration.toMillis());
        }
        messageSource.setAlwaysUseMessageFormat(properties.isAlwaysUseMessageFormat());
        messageSource.setUseCodeAsDefaultMessage(properties.isUseCodeAsDefaultMessage());
        return messageSource;
    }

 

 

  1.編寫代碼。

    在類路徑下創建一個i18n的文件夾,存放國際化配置(login.properties、login_zh_CN.properties、login_en_US.properties)分別填寫對應的值即可。

 

    2.在頁面中獲取國際化信息

    在thymeleaf中獲取值信息。通過#{鍵}獲取國際化中的值。

   3.在application.properties中配置如下代碼。

#指定i18n從哪里配置
spring.messages.basename=i18n.login  //位置

 

  

  效果:會根據瀏覽器系統語言自動顯示對應文字

二、點擊超鏈接切換國家語言

  原理:

    @Bean @ConditionalOnMissingBean   //前提是容器中不存在這個組件,
                所以使用自己的對象就要配置@Bean讓這個條件不成立(實現
LocaleResolver 即可


      @ConditionalOnProperty(prefix
= "spring.mvc", name = "locale") public LocaleResolver localeResolver()
      //如果在application.properties中有配置國際化就用配置文件的,沒有配置就用AcceptHeaderLocaleResolver 默認request中獲取
    { if (this.mvcProperties .getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) { return new FixedLocaleResolver(this.mvcProperties.getLocale()); } AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver(); localeResolver.setDefaultLocale(this.mvcProperties.getLocale()); return localeResolver; }
@Override
public Locale resolveLocale(HttpServletRequest request) {
Locale defaultLocale = getDefaultLocale();  
if (defaultLocale != null && request.getHeader("Accept-Language") == null) {
return defaultLocale;
}
Locale requestLocale = request.getLocale();  //通過request對象獲取請求頭的國際化信息
List<Locale> supportedLocales = getSupportedLocales();
if (supportedLocales.isEmpty() || supportedLocales.contains(requestLocale)) {
return requestLocale;
}
Locale supportedLocale = findSupportedLocale(request, supportedLocales);
if (supportedLocale != null) {
return supportedLocale;
}
return (defaultLocale != null ? defaultLocale : requestLocale);
}
 

 

 

  1.實現點擊鏈接切換國家語言(鏈接上加入區域信息“language='zh_CN'))

      通過原理知道可以通過request請求頭中獲取區域信息,所有我們在鏈接上加入區域信息“language='zh_CN')”,然后通過實現LocaleResolver重resolveLocale即可,並且將自己的實現類放在容器中,容器會自動加載這個組件。

 

  2.編寫代碼

public class MyLocaleResolver implements LocaleResolver { @Override public Locale resolveLocale(HttpServletRequest request) { String language = request.getParameter("language"); //獲取系統的語言
        Locale locale = Locale.getDefault(); if (!StringUtils.isEmpty(language)){ //有值
            String[] s = language.split("_"); locale=new Locale(s[0],s[1]); } return locale; }

效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM