1. 程式人生 > >SpringBoot專欄_web:如何快速配置i18n國際化,圖文結合附帶原始碼下載(第六講)

SpringBoot專欄_web:如何快速配置i18n國際化,圖文結合附帶原始碼下載(第六講)

                                             

在之前開發當中配置國際化是比較繁瑣的,下面我們看下SpringBoot如何快速的配置國際化,以及國際化又哪些用途、配置當中我們遇到了哪些"坑",遇到問題大家可以留言,會為大家一一解答。

國際化配置要點:

1)、編寫國際化配置檔案;

2)、使用ResourceBundleMessageSource管理國際化資原始檔

3)、在頁面使用fmt:message取出國際化內容(前端使用的是Thymeleaf)

(備註)可以自定義配置通過重寫LocaleResolver實現切換效果

詳細步驟

1.建立配置檔案,其中包含中文、英文、預設等,然後在右側寫上相關配置即可(有以下幾點需要注意)

此步驟注意點:

紅線部分   1)現在的建立的配置檔案放在了i18n目錄下,自然目錄可以更改 。

紅線部分 2)寫配置檔案的時候中文如果不是utf-8編碼,此時頁面是會亂碼的(下面會給出解決方案).

 紅線部分 3)點選Resource Bundle可快速新增我們要新增的配置專案

點選+號,然後在右側輸入資訊即可

更改成Utf-8編碼:File->Settings最下側改成utf-8即可

更改整個專案的編碼:如下圖 File->other settings->default settings 更改下面編碼即可

2.application.properties需要配置下i18n的路徑位置,如下

spring.messages.basename=i18n.login

3.其實這樣就可以用了,在頁面上獲取即可;部分程式碼如下

#非標籤內寫法
 <div class="message">[[#{app.name}]]</div>

#th:placeholder 取出
 <input name="account" th:placeholder="#{login.username}" value="datacenter" type="text" lay-verify="required" class="layui-input" >

#th:value取出
 <input class="loginin" th:value="#{login.btn}" value="登入" lay-submit lay-filter="login" style="width:100%;" type="submit">

更改瀏覽器語言:顯示效果如下(chrome 在高階設定中切換不同的語言顯示也不同)

重點:如何手動切換語言呢

共2步驟:1.編寫類實現LocaleResolver   2.Bean注入

package com.limp.framework.boss.component;

import org.springframework.lang.Nullable;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;

/**
 * @intro :
 * @auth : shinians
 * @time : 2018/12/22 15:36
 * @website: www.shinians.com
 */
public class MyLocaleResolver implements LocaleResolver {
    /**
     * 編寫相應的邏輯 l引數區分,
     * l='zh_CN'
      l='en_US'
     * @param request
     * @return
     */
    @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 httpServletRequest, @Nullable HttpServletResponse httpServletResponse, @Nullable Locale locale) {

    }
}

2.

現在就可以傳遞不同l引數進行切換語言了

IP:埠/system/nav/login?l=en_US

IP:埠/system/nav/login?l=zh_CN