+1

Internationalization Spring boot Kotlin and Thymeleaf

Trong bài viết này sẽ đưa ra các bước về phát triển ứng dụng web và cách Spring boot framework xử lý đa ngôn ngữ gồm tiếng Anh, Nhật, Khmer thông qua tải các message resources của Spring boot.

Prerequisites

  • Spring 5.3.6
  • Spring boot 2.4.5
  • Java SDK 11
  • Gradle 6.7.1

I18n on Spring Boot

Đầu tiên hãy tạo một ứng dụng Spring boot sử dụng Gradle.

Tiếp đến bổ sung các dependencies trong build.gradle.kts như sau:

Define messages for internationalize

Tạo 3 file messages tương ứng 3 ngôn ngữ trong src/main/resources/i18n

  • messages_en.properties
contact.name=Kimhuor
contact.address=No99, 10BT, 100000
contact.phone=+855 99 999 999
view.title=Contact
view.name=Name
view.address=Address
view.phone=Phone
  • messages_kh.properties
contact.name=គឹមហួរ
contact.address=ផ្ទះលេខ ៩៩ ផ្លូវ ១០ ១០០០០០
contact.phone=+៨៥៥ ៩៩ ៩៩៩ ៩៩៩
view.title=ទំនាក់ទំនង
view.name=ឈ្មោះ
view.address=អាស័យដ្នាន
view.phone=ទូរសព្ទ័
  • messages_ja.properties

Đối với tiếng Nhật trong Java cần biến đổi thành dạng unicode mới hiển thị đúng. Ở đây sử dụng https://r12a.github.io/app-conversion/ để biến đổi

contact.name=\u30AD\u30DF\u30FC\u30A6\u30A2\u30FC
contact.address=\u3012130-0004 \u6771\u4EAC\u90FD\u58A8\u7530\u533A\u672C\u6240\uFF11\u4E01\u76EE\uFF12\uFF19\u22121 \u30E9\u30F3\u30C0\u30E0\u30B9\u30AF\u30A6\u30A8\u30A2\u672C\u6240\u30D3\u30EB
contact.phone=+855 99 999 999
view.title=\u9023\u7D61\u5148
view.name=\u540D\u524D
view.address=\u4F4F\u6240
view.phone=\u96FB\u8A71

Config WebMvcConfig

Để Spring boot thực thi internationalize cần

  • Bean messsageSource giúp Thymeleaf có thể lấy được nội dung định nghĩa trong file message thông qua hàm setBasename
  • Bean localeResolver lưu value locale cookie
  • Bean localeInterceptor để nhận locale từ param lang

Create model, view, controller

  • Define một model để định dạng dữ liệu Contact
  • Ở sử dụng thêm một object I18n để giúp tạo dữ liệu theo locale, sử dụng ResourceBundle để lấy nội dung

  • Define view để biểu diễn dữ liệu trong src/main/resources/templates/index.html

  • Define controller để xử lý request đến một trang theo url, ở đây sẽ sử dụng root path để mô phỏng

Demo

Sau khi xử lý coding xong chúng ta có thể chạy ứng dụng và truy cập vào http://localhost:8080/

  • Default là locale EN

  • Tiếng Khmer

  • Tiếng Nhật

  • Chọn lại tiếng Anh

Như đã trình bày chung ta có thể lấy được nội dung từ file message ở trong code logic và trong view

Cảm ơn các bạn đã đọc!

References


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí