1. 程式人生 > >spring-boot 國際化+使用者選擇國際化

spring-boot 國際化+使用者選擇國際化

1配置檔案

login.properties

  • login.btn=登陸~
    login.password=密碼~
    login.username=使用者名稱~
    

login_en_US.properties

  • login.btn=Sign In
    login.password=Password
    login.username=UserName

login_zh_CN.properties

  • login.btn=登陸
    login.password=密碼
    login.username=使用者名稱

2啟動國際化(SpringBoot自動配置好了)

application.properties
spring.messages.basename=i18n.login

2去頁面獲取國際化的值

<!DOCTYPE html>
<html lang="en"  xmlns:th="http://www.thymeleaf.org">
	<head>
	</head>
	<body class="text-center">
		<form  action="#" >

			<label th:text="#{login.username}">username</label>
			<input type="text"  name="username">

			<label   th:text="#{login.password}">password</label>
			<input type="password" name="password" >
			<br>
			<button type="submit" th:text="#{login.btn}">submit</button>

			<br>
			<a class="btn btn-sm" th:href="@{/login(l='zh_CN')}">中文</a>
			<a class="btn btn-sm" th:href="@{/login(l='en_US')}">English</a>
		</form>
	</body>

</html>

當設定瀏覽器不同的語言時就有不同效果

2使用者選擇國際化

只要往容器中新增新的區域解析器就行

package feizhou.web.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

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

//使用WebMvcConfigurerAdapter可以來擴充套件SpringMVC的功能
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //瀏覽器傳送 /,/login 請求來到login.html
        registry.addViewController("/").setViewName("login");
        registry.addViewController("/login").setViewName("login");
    }

//    設定自定義區域解析器,載入到容器中(關鍵看這裡)
    @Bean
    public LocaleResolver localeResolver() {
    // 區域解析器,載入到容器中
        return new LocaleResolver() {

            //解析url引數,生產區域物件
            @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) {
            }
        };

    }
}

點選中文/點選英文