SpringBoot資源國際化

Springboot根據瀏覽器實現網站資源國際化

根據瀏覽器地區主動選擇資源

1.建立資源化文件
  • resource目錄下建立messages目錄
  • 建立messages_en_US.properties、messages_zh_CN.properties文件。分別是英文、中文資源。
  • messages.properties文件爲默認文件。
  • messages_en_US.properties寫入內容:welcome = welcome to login in soa-watch systerm(english)
  • messages_zh_CN.properties寫入內容:welcome=歡迎訪問soa-watch系統(CH)
  • messages.properties寫入內容:welcome=歡迎訪問soa-watch系統(Default)
2.配置application.properties
spring.messages.encoding=UTF-8
   spring.messages.basename=/messages/messages
3.jsp頁面中使用標籤
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<html>
<head>
<title>i18n</title>
</head>
<body>
    <spring:message code="welcome"></spring:message>
</body>
</html>
4.修改瀏覽器的語言環境
  • 瀏覽器地址欄中輸入about:config
  • 修改intl.accept_languages,查看結果
  • 以上爲火狐瀏覽器

頁面連接中實現對資源化得控制

如同如下頁面,點擊相關連接完成網頁資源切換
html

1.建立MyLocaleResolver類集成AcceptHeaderLocaleResolver類
public class MyLocaleResolver extends AcceptHeaderLocaleResolver {
    private Locale myLocal;
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        return myLocal==null?request.getLocale():myLocal;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
        myLocal = locale;
    }
}
2.建立I18nConfig類初始化localeResolver對象bean

對象的名稱必須爲localeResolver,Spring容器會自動加載,不然找不到。java

@Configuration
public class I18nConfig {
private static Logger logger = LoggerFactory.getLogger(I18nConfig.class);

    @Bean(name = "localeResolver")
    public MyLocaleResolver myLocaleResolver(){
        logger.info("#####cookieLocaleResolver---create");

        MyLocaleResolver myLocaleResolver = new MyLocaleResolver();
        myLocaleResolver.setDefaultLocale(Locale.ENGLISH);
        logger.info("#####cookieLocaleResolver:");
        return myLocaleResolver;
}
3.LoginControl類中代碼實現跳轉
  • welcome頁面爲welcome.jsp,展現頁面
  • language請求爲動態設置語言環境
@GetMapping("/welcome")
public String welcome(){
   logger.info("class:"+messageSource.getClass());


    return "welcome";
}

@GetMapping("/language")
public ModelAndView  language(HttpServletRequest request, HttpServletResponse response, String language){
    Locale locale= request.getLocale();
    logger.error(locale.toString());
    LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
    language=language.toLowerCase();
    logger.info("language:"+language);
    if(language==null||language.equals("")){
        return new ModelAndView("welcome");
    }else{
        if(language.equals("zh_cn")){
            localeResolver.setLocale(request, response, Locale.CHINA);
        }else if(language.equals("en")){
            localeResolver.setLocale(request, response, Locale.US);
        }else{
            localeResolver.setLocale(request, response, Locale.CHINA );
        }
    }
    return new ModelAndView("redirect:welcome");
}
4.welcome.jsp頁面代碼
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<html>
<head>
    <title>i18n</title>
</head>
<body>
    <spring:message code="welcome"></spring:message>

    <a href="<c:url value='language?language=zh_cn'/>">
       中文
    </a>
    <a href="<c:url value='language?language=en'/>">
        english
    </a>
</body>
</html>

實現完成,便可測試。web

相關文章
相關標籤/搜索