Spring Boot - Quốc tế hóa
Quốc tế hóa là một quá trình làm cho ứng dụng của bạn có thể thích ứng với các ngôn ngữ và khu vực khác nhau mà không cần thay đổi kỹ thuật trên mã nguồn. Nói cách khác, Quốc tế hóa là sự sẵn sàng của Bản địa hóa.
Trong chương này, chúng ta sẽ tìm hiểu chi tiết về Cách triển khai Internationalization trong Spring Boot.
Sự phụ thuộc
Chúng ta cần sự phụ thuộc vào Spring Boot Starter Web và Spring Boot Starter Thymeleaf để phát triển một ứng dụng web trong Spring Boot.
Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Gradle
compile('org.springframework.boot:spring-boot-starter-web')
compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf'
LocaleResolver
Chúng tôi cần xác định Ngôn ngữ mặc định của ứng dụng của bạn. Chúng ta cần thêm bean LocaleResolver vào ứng dụng Spring Boot của mình.
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setDefaultLocale(Locale.US);
return sessionLocaleResolver;
}
LocaleChangeInterceptor
LocaleChangeInterceptor được sử dụng để thay đổi Ngôn ngữ mới dựa trên giá trị của tham số ngôn ngữ được thêm vào một yêu cầu.
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("language");
return localeChangeInterceptor;
}
Để có hiệu lực này, chúng ta cần thêm LocaleChangeInterceptor vào bộ chặn đăng ký của ứng dụng. Lớp cấu hình nên mở rộng lớp WebMvcConfigurerAdapter và ghi đè phương thức addInterceptors ().
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
Nguồn tin nhắn
Ứng dụng Spring Boot theo mặc định lấy các nguồn tin nhắn từ src/main/resourcestrong thư mục classpath. Tên tệp tin nhắn ngôn ngữ mặc định phải làmessage.properties và các tệp cho từng ngôn ngữ phải có tên là messages_XX.properties. "XX" đại diện cho mã ngôn ngữ.
Tất cả các thuộc tính thông báo nên được sử dụng làm giá trị cặp khóa. Nếu không tìm thấy bất kỳ thuộc tính nào trên ngôn ngữ, ứng dụng sẽ sử dụng thuộc tính mặc định từ tệp tin messages.properties.
Các message.properties mặc định sẽ được hiển thị như sau:
welcome.text=Hi Welcome to Everyone
Các message_fr.properties bằng tiếng Pháp sẽ được hiển thị như sau -
welcome.text=Salut Bienvenue à tous
Note - Tệp nguồn tin nhắn phải được lưu ở định dạng tệp “UTF-8”.
Tệp HTML
Trong tệp HTML, sử dụng cú pháp #{key} để hiển thị các thông báo từ tệp thuộc tính.
<h1 th:text = "#{welcome.text}"></h1>
Mã hoàn chỉnh được cung cấp bên dưới
Maven - pom.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle - build.gradle
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
group = 'com.tutorialspoint'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf'
testCompile('org.springframework.boot:spring-boot-starter-test')
}
Tệp lớp ứng dụng Spring Boot chính được cung cấp bên dưới:
package com.tutorialspoint.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Tệp lớp bộ điều khiển được cung cấp bên dưới:
package com.tutorialspoint.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ViewController {
@RequestMapping("/locale")
public String locale() {
return "locale";
}
}
Lớp cấu hình để hỗ trợ quốc tế hóa
package com.tutorialspoint.demo;
import java.util.Locale;
import org.springframework.context.annotation.Bean;
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
public class Internationalization extends WebMvcConfigurerAdapter {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setDefaultLocale(Locale.US);
return sessionLocaleResolver;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("language");
return localeChangeInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
Nguồn tin nhắn - messages.properties như được minh họa -
welcome.text = Hi Welcome to Everyone
Nguồn tin nhắn - message_fr.properties như được hiển thị -
welcome.text = Salut Bienvenue à tous
Tệp HTML locale.html nên được đặt trong thư mục mẫu trên classpath như được hiển thị -
<!DOCTYPE html>
<html>
<head>
<meta charset = "ISO-8859-1"/>
<title>Internationalization</title>
</head>
<body>
<h1 th:text = "#{welcome.text}"></h1>
</body>
</html>
Bạn có thể tạo tệp JAR thực thi và chạy ứng dụng khởi động Spring bằng cách sử dụng các lệnh Maven hoặc Gradle sau:
Đối với Maven, sử dụng lệnh sau:
mvn clean install
Sau khi “XÂY DỰNG THÀNH CÔNG”, bạn có thể tìm thấy tệp JAR trong thư mục đích.
Đối với Gradle, sử dụng lệnh sau:
gradle clean build
Sau khi “XÂY DỰNG THÀNH CÔNG”, bạn có thể tìm thấy tệp JAR trong thư mục build / libs.
Bây giờ, chạy tệp JAR bằng cách sử dụng lệnh như minh họa -
java –jar <JARFILE>
Bạn sẽ thấy rằng ứng dụng đã khởi động trên cổng Tomcat 8080.
Bây giờ hãy nhấn vào URL http://localhost:8080/locale trong trình duyệt web của bạn và bạn có thể thấy kết quả sau:
URL http://localhost:8080/locale?language=fr sẽ cung cấp cho bạn đầu ra như được hiển thị -