I18N TRONG SPRING MVC LÀ GÌ HƯỚNG DẪN TẠO ỨNG DỤNG WEB ĐA NGÔN NGỮ

i18n trong Spring MVC là gì? Hướng dẫn tạo ứng dụng web đa ngôn ngữ

Khi ứng dụng của bạn là chỉ dành riêng cho người dùng Việt Nam, tất nhiên chúng ta không cần nghĩ đến việc tạo một ứng dụng web đa ngôn ngữ. Nhưng ngược lại, nếu ứng dụng là global cho tất cả các quốc gia, việc sử dụng i18n trong Spring MVC là một điều nên làm.

Demo sẽ làm được sau bài viết:

i18n là gì?

i18n hay còn gọi là quốc tế hóa trong tiếng Anh viết tắc của từ Internationalization, vì có 18 chữ cái ở giữa chữ cái i và chữ cái n nên hay được gọi ngắn gọn là i18n. Tring bài viết này mình xin sẽ hướng dẫn các bạn các để cấu hình cũng như sử dụng i18n, áp dụng vào dự án thực tế với Spring MVC.

Tạo ứng dụng web đa ngôn ngữ

Với Spring MVC đã hỗ trợ các lớp có sẵn từ các library mà chúng ta depencdencty  trong file pom.xml hay download về và đặt các tập tin file jar vào thư mục WEB-INF/lib,

Trong bài viết này, các bạn vui lòng nếu chưa biết gì spring mvc, xem lại loạt bài hướng dẫn của tôi tại đây.

Chúng ta cùng nhau bắt đầu một dự án đa ngôn ngữ:

Tạo controller: DemoController.java

View: login.jsp

File distpatcher-servlet.xml

Nhìn vào file dispatcher-servlet.xml trên,  chúng ta hãy đi đến những giải thích trong file cấu hình spring để hiểu hơn về cách sử dụng i18n.

Đầu tiên ta cấu hình view spring spring mvc, và trong bài viết này đang sử dụng view InternalResourceViewResolver.

Tiếp theo, ta thêm vào file cấu hình để khởi tạo một đối tượng của lớp ReloadableResourceBundleMessageSource. Trong class này có một thuộc tính là baseName, ta phải chỉ ra rằng giá trị của thuộc tính baseName là tên của file tài nguyên mà ở đó ta lấy nội dung ra từ các file tương ứng với các đoạn text khác nhau vì tùy theo mỗi quốc gia. Với defaultEncoding để set font chữ hiển thị được tiếng việt.

Thuộc tính  “classpath:” chỉ ra rằng vị trí của các file tài nguyên là nằm trong class path. Với project bình thường với web, chúng ta đặt trong classes, nhưng với project bằng maven các bạn đặt trong src hay resource..

Như vậy chúng cần phải tạo ra các file .properties tương ứng. Tên của các file này sẽ bao gồm tên gốc mà chúng ta chỉ ra ở trên. Ngoài ra tiếp nối theo sau sẽ là mã của một ngôn ngữ nhất định.

Ví dụ : english : en / Việt Nam : vi , Pháp : fr … vv

Với ứng dụng như demo trên, chúng ta đang sử dụng hai ngôn ngữ chính là viet nam và english nên các bạn cần tọa ra hai file properties là messageslà messages_vi.properties và messages.properties.

Tiếp đến ta có class  org.springframework.web.servlet.i18n.LocaleChangeInterceptor. Trước khi request được xử lý bởi Controller, nó phải đi qua các Interceptors, và ở đây bạn cần đăng ký LocaleChangeInterceptor,Interceptor này xử lý các thay đổi Locale từ phía người dùng. Nghĩa là một ứng dụng chạy lên, thì mức độ ưu tiên của intercepter trước servlet, vậy nên mọi request đến trước lhi đến controller xử lý nó được xử lý bởi intercepter.

Với spring mvc, chúng ta chỉ cần nói cho spring biết chúng ta đang muốn đăng ký quốc tế hóa ngôn ngữ bằng sử dụng bean cấu hình và áp dụng class như trên. ( org.springframework.web.servlet.i18n.LocaleChangeInterceptor.)Trong class trên chúng ta có thuộc tính là paramName, thuộc tính paramName dùng để khởi tạo biến param, dựa vào biến này mà i18n có thể biết được chúng ta đang muốn sử dụn ngôn ngữ nào.

Ở đây các bạn có thể hiểu nôm là tham số trên url, ví dụ như ?lang=vi, hay ?lang=en…vv

SessionLocaleResolver  là một class được tạo ra để lưu giá trị của ngôn ngữ hiện tại vào session. Nếu như không tìm được thông tin trong session thì sẽ báo interceptor để load thông tin từ file tài nguyên của ngôn ngữ mặc định. Và tất nhiên chúng ta có thể cho giá trịnh mặc định là ngôn ngữ nào bằng cách sử dụng thuộc tính: defaultLocale.Trong ví dụ này tôi đang sử dụng là Việt Nam.

Nội dung của hai file như sau:

messages_vi.properties

messages.properties

 

Chúng ta sửa lại view login,jsp

Như đã thấy ở trên, muốn hiển thị ra được nội dung từ các file messages thì chúng ta sử dụng <spring:message code=”key”/>

Qua bài viết này, chúng ta đã hiểu hơn về i18n trong java cũng như biết cách áp dụng qua project thực tế như form login. Hy vọng sẽ giúp ích cho các bạn!

 

00

Leave a Reply

Your email address will not be published. Required fields are marked *