1. 程式人生 > >spring boot 與 thymeleaf (1): 國際化

spring boot 與 thymeleaf (1): 國際化

javaee 文件內容 裏的 auto 簡體 第一次 1.0 i18n 自定義顯示

在thymeleaf 裏面有個消息表達式: #{...} , 可以借此來實現國際化.

在我使用這個功能的時候, 碰到了一個問題, 按照 JavaEE開發的顛覆者 Spring Boot實戰 上面編碼的時候, 出現了以下問題, 相信很多人都碰到過.

??home.welcome_zh_CN??

這裏推薦一篇博客, 裏面有解決辦法. 玩轉spring boot——國際化

我也想將我自己代碼記錄下來.

一. 目錄預覽

技術分享圖片

這裏我並沒有按照資料上所述的, 將properties文件建在 index.html 同級別目錄下, 也沒有將名稱命名為: index.properties

之前是這麽弄的, 但是有上述問題.

二. properties文件內容

messages.properties:

welcome=welcome here!  and   歡迎歡迎!

這個是在, 沒有語言匹配上的時候, 才會顯示

messages_en_US.properties:

welcome=welcome here!

messages_zh_CN.properties:

welcome=歡迎歡迎!

三. 控制器

package org.elvin.learn.springboot.controller;

import org.elvin.learn.springboot.pojo.Book;
import
org.joda.time.DateTime; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import java.util.ArrayList; import java.util.List; /** * author: Elvin * Date: 2017/12/13 9:29 * Description:
*/ @Controller @RequestMapping("thy") public class ThyController { @GetMapping("index") public String index(Model model) { model.addAttribute("color", "red"); return "thy/index"; } }

四. 視圖

<!DOCTYPE html>
<html 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, maximum-scale=1.0, user-scalable=no"/>
    <title>Title</title>
    <!--@ { } 鏈接網址表達式, 會自動加入虛擬路徑-->
    <link th:href="@{/bootstrap-3.3.7/css/bootstrap.css}" rel="stylesheet"/>
    <link th:href="@{/bootstrap-3.3.7/css/bootstrap-theme.css}" rel="stylesheet"/>
    <style th:inline="text">
        /*通過[ [ $ { }]]的方式訪問model中的屬性*/
        .bgcolor {
            background-color:[[${color}]]
        }
    </style>
</head>
<body>

<div class="panel panel-primary">
    <div class="panel-heading">
        <h3 class="panel-title">歡迎</h3>
        <a style="background-color: #0f0f0f" th:href="@{/thy/index?lang=en_US}">English(US)</a>
        <a style="background-color: #0f0f0f" th:href="@{/thy/index?lang=zh_CN}">簡體中文</a>
    </div>
    <div class="panel-body">
        <!-- $ { }變量表達式, 可以訪問model中的屬性 -->
        <span class="bgcolor" th:utext="#{welcome}">hahaha</span>
    </div>
</div>
</body>
</html>

五. 結果

使用火狐瀏覽器(可以調顯示語言).

第一次打開的時候, 已經是能正常顯示的了. 不再報錯

技術分享圖片

此時, 調整火狐默認顯示語言

技術分享圖片

刷新頁面:

技術分享圖片

可能有人註意到, 我這裏有兩個鏈接, 用來切換顯示的. 按照上面的方式, 是不能這麽切換的. 此時需要做一些修改

六. 自定義顯示

加入配置文件

package org.elvin.learn.springboot.conf;

import java.util.Locale;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class LocaleConfig extends WebMvcConfigurerAdapter {
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        // 默認語言
        //slr.setDefaultLocale(Locale.US);
        return slr;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        // 參數名
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

這裏的默認語言可設置, 也可不設置. 如果不設置, 就會根據瀏覽器默認語言去判斷顯示哪一個信息.

七. 結果

這裏可以根據 lang 去自己選擇顯示那種語言了

技術分享圖片

技術分享圖片

spring boot 與 thymeleaf (1): 國際化