Menu

Liferay 6.2: Các vấn đề liên quan đến đa ngôn ngữ trong Liferay

Multi-language
English version
Trong một thế giới rộng lớp, nếu muốn giới thiệu tới tất cả mọi người ứng dụng của mình bạn phải thể hiện nó với nhiều ngôn ngữ khác nhau. May mắn thay, Liferay đã hỗ trợ tính năng này và cung cấp những cách dễ dàng nhất để làm điều đó. Mình sẽ giới thiệu làm thế nào để sử dụng đa ngôn ngữ trong một portlet. Hãy bắt đầu nào.

Đầu tiên, mình sẽ cho các bạn thấy nơi mà Liferay lưu trữ các bản dịch. Các bản dịch ở mức cổng sẽ được lưu trữ trong tệp tin portal-impl.jar và thư viện này được lưu tại thư mục Liferay-portal/tomcat-x.y.zz/webapps/ROOT/WEB-INF/lib. Thư mục này có chứa nhiều thư viện (jar). Trong tệp tin portal-impl.jar, mở tệp tin này (bằng một chương trình mở file nén như WinRAR chẳng hạn) và click vào thư mục content. Lúc này, bạn thấy có rất nhiều tệp tin *.properties. Để mình giải thích ý nghĩa của chúng nhé, Language.properties là tệp tin lưu trữ các bản dịch mặc định, nó chứa một danh sách các bản dịch bằng Tiếng Anh. Tệp tin Language_xy.properties là bản dịch với ngôn ngữ có mã là xy. Ví dụ, các bản dịch Tiếng Việt được lưu trữ trong tệp tin Language_vi.properties.
Thứ hai, các bản dịch mức portlet sẽ được lưu trữ trong chính portlet của bạn. Bạn có thể đặt vị trí để lưu các bản dịch này khi tạo mới portlet. 
Creating portlet and setup language translation
Nếu bạn không đánh dấu vào lưuạ chọn Create resource bundle file, bạn cũng có thể đặt vị trí lưu trữ các bản dịch bằng cách thêm thẻ resource-bundle trong tệp tin portlet.xml. Ví dụ, bạn thêm thẻ content.Language trong tệp tin portlet.xml có nghĩa là các bản dịch của portlet sẽ được lưu trữ tại thư mục Project Name/docroot/src/content/Language_xx.properties. Và lúc này, bạn có thể tạo ra bất kỳ bản dịch ngôn ngữ nào và lưu trữ tại thư mục Project Name/docroot/src/content.

Định dạng của các tệp tin *.properties là origin-sentence=translation-sentence hoặc origin-sentence-with-parameter-x=translation-sentence-with-parameter-{0}. Phần câu gốc chỉ chứa các ký tự alphabet thường, _ (dấu gạch dưới), . (dấu chấm), - (dấu trừ). Các câu ở phần dịch có thể chứa bất kỳ ký tự nào và các biểu tượng tham số ({0}, {1}...). Sau đây là một vài ví dụ:

Sau khi tạo các tệp tin properties, Mình sẽ chỉ bạn làm thể nào để sử dụng các bản dịch đó.

Front-end

Có hai phần mà chúng ta cần quan tâm. Đó là đa ngôn ngữ trong các tệp tin *.jsp và trong javascript.

On jsp file

Trong các tệp tin properties, bạn có một vài bản dịch (xem portlet ví dụ, link ở cuối). Ví dụ: student-code, student-name, student-birthday, student-gender, student-address, student-hello-x. Vậy, làm thế nào để hiển thị các bản dịch này trên các tệp tin jsp? Liferay đã cung cấp một vài cách đơn giản như sau:
  1. Sử dụng thẻ liferay-ui:message. Đây là cách đơn giản nhất. Nếu bản dịch của bạn không có tham số, bạn chỉ cần viết <liferay-ui:message key="origin-sentence"></liferay-ui:message>. Sau khi triển khai và refresh lại portal, bạn sẽ thấy bản dịch của mình trên màn hình. Nếu bản dịch của bạn chứa (các) tham số, thì hãy đặt (các) giá trị tham số đó vào thuộc tính  arguments.
  2. Sử dụng tiện ích LanguageUtilLanguageUtil có hai phương thức hữu ích đó là phương thức get sử dụng trong trường hợp không có tham số và phương thức format sử dụng trong trường hợp có tham số.
  3. Các thẻ khác: Liferay đã cung cấp vài thẻ nó có thể dịch các bản dịch. Bạn nhập các bảng gốc vào các thuộc tính label hoặc message. Ví dụ này sẻ hiển thị bản dịch của chuỗi student-code.

Trên javascript

AUI script là một công cụ javascript mạnh. Trong các ứng dụng web, bạn luôn sử dụng các đoạn mã javascript để hoàn thành các tác vụ. Liferay đã cung cấp một công cụ hay để giải quyết vài vấn đề về đa ngôn ngữ.
Liferay.Language.get(...);
Phương thức này sẽ giúp bạn dịch dựa trên ngôn ngữ hiện tại của bạn. Nếu không có tham số bạn chỉ cần gọi:
Liferay.Language.get('student-name');
Phương thức này sẽ trả lại câu đã được dịch cho bạn. Và nếu bản dịch của bạn có một vài tham số thì bạn có thể gọi hàm này với hai tham số như sau:
Liferay.Language.get('student-hello-x', ['Peter']);
Như đã thấy, tham số thứ hai là một mảng. Số phần tử của mảng này ít nhất là bằng số lượng tham số trong câu gốc.

Back-end

Nói chung, bạn không thường xyên sử dụng đa ngôn ngữ trong phần back-end. Bạn chỉ thực hiện các thuật toán, cấu trúc dữ liệu, và tương tác với cơ sở dữ liệu mà thôi. Trong một số trường hợp đặc biệt, sử dụng tiện ích LanguageUtil là lựa chọn tốt nhất. Theo mình, bạn chỉ sử dụng hai phương thức là formatget với tham số đầu tiên là một đối tượng của lớp PortletConfig. Bạn có thể tạo ra đối towngj này bằng cách đơn giản như sau:
PortletConfig portletConfig = (PortletConfig) renderRequest.getAttribute(JavaConstants.JAVAX_PORTLET_CONFIG);

Tổng kết

Có nhiều vấn đề về đa ngôn ngữ trong các ứng dụng thực tế. Bài này chỉ giúp các bạn một vài trường hợp đơn giản. Và quan trọng nhất, bạn cần phải cài đặt ngôn ngữ của portal, của site và của người dùng để đạt được kết quả tốt.
Click vào đây để tải về mã nguồn đầy đủ.

Không có nhận xét nào:

Đăng nhận xét