1. 概述
在本快速教程中,我們將探討如何將國際化功能添加到 Spring Boot 應用程序中。
2. Maven 依賴
為了開發,我們需要以下依賴項:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>最新版本的 spring-boot-starter-thymeleaf 已在 Maven Central 上可用。
3. LocaleResolver
為了使我們的應用程序能夠確定當前使用的區域設置,我們需要添加一個 LocaleResolver Bean:
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}LocaleResolver 接口有實現,它們根據會話、Cookie、Accept-Language 請求頭或固定值確定當前區域設置。
在我們的示例中,我們使用了會話驅動的SessionLocaleResolver 並且設置了默認區域為 US。
4. LocaleChangeInterceptor
接下來,我們需要添加一個攔截器 Bean,該 Bean 將在請求中存在且值為 lang 參數時,根據該值切換到新的 locale。
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}為了使該 Bean 生效,我們需要將其添加到應用程序的攔截器註冊表中。
為此,我們的 @Configuration 類必須實現 WebMvcConfigurer 接口並覆蓋 addInterceptors() 方法:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}greeting=Hello! Welcome to our website!
lang.change=Change the language
lang.eng=English
lang.fr=French接下來,我們創建一個名為 messages_fr.properties 的文件,用於法語,並使用相同的鍵:
greeting=Bonjour! Bienvenue sur notre site!
lang.change=Changez la langue
lang.eng=Anglais
lang.fr=Francais6. 控制器和 HTML 頁面
讓我們創建一個控制器映射,返回一個名為 international.html 的簡單 HTML 頁面,以便我們能夠以兩種不同的語言查看它:
@Controller
public class PageController {
@GetMapping("/international")
public String getInternationalPage() {
return "international";
}
}由於我們使用 Thymeleaf 來顯示 HTML 頁面,因此本地化特定的值將通過具有以下語法的鍵訪問: #{key}。
<h1 th:text="#{greeting}"></h1>JSP文件的語法略有不同:
<h1><spring:message code="greeting" text="default"/></h1>如果想要訪問帶有兩個不同地區的頁面,則需要在 URL 中添加 lang 參數,格式如下:/international?lang=fr
如果 URL 中未包含 lang 參數,則應用程序將使用默認區域,在本例中為 US 區域。
讓我們為我們的 HTML 頁面添加一個下拉菜單,該菜單中的選項名稱也已在我們的屬性文件中本地化:
<span th:text="#{lang.change}"></span>:
<select id="locales">
<option value=""></option>
<option value="en" th:text="#{lang.eng}"></option>
<option value="fr" th:text="#{lang.fr}"></option>
</select>然後,我們可以添加一個 jQuery 腳本,該腳本將調用 international</em/> URL,並根據用户選擇的下拉選項,使用相應的 lang</em/> 參數:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js">
</script>
<script type="text/javascript">
$(document).ready(function() {
$("#locales").change(function () {
var selectedOption = $('#locales').val();
if (selectedOption != ''){
window.location.replace('international?lang=' + selectedOption);
}
});
});
</script>7. 運行應用程序
為了初始化我們的應用程序,我們需要添加一個主類並使用 @SpringBootApplication 標註它:
@SpringBootApplication
public class InternationalizationApp {
public static void main(String[] args) {
SpringApplication.run(InternationalizationApp.class, args);
}
}根據所選區域設置,運行應用程序時,頁面將以英語或法語顯示。
讓我們看看英語版本:
現在,讓我們看看法語版本:
8. 結論
在本教程中,我們展示瞭如何在 Spring Boot 應用程序中使用國際化支持的方法。