Đa ngôn ngữ (Internationalization| i18n| l10n) trong JSP



Trước khi vào chương, bạn nên biết các khái niệm sau:

  • Internationalization (i18n): Nghĩa là kích hoạt một trang có khả năng cung cấp nhiều phiên bản với các ngôn ngữ khác nhau.

  • Localization (l10n): Nghĩa là thêm Resources tới một Website để thích nghi với một khu vực địa lý hoặc miền văn hóa cụ thể.

  • locale: Đây là một khu vực địa lý hoặc văn hóa cụ thể. Nó thường là một ký hiệu ngôn ngữ được theo sau bởi một ký hiệu quốc gia, phân biệt nhau bởi dấu gạch dưới. Ví dụ: en_US biểu diễn English locale cho US.

Có một số khái niệm bạn nên quan tâm trong khi xây dựng một Global Website. Chương này không cung cấp cho bạn chi tiết về điều này, nhưng sẽ cung cấp một ví dụ về cách bạn làm Webpage của bạn thể hiện trong nhiều ngôn ngữ khác nhau tới cộng đồng internet..

Một JSP có thể chọn lựa phiên bản thích hợp của Site dựa trên Locale của người yêu cầu và cung cấp phiên bản Site thích hợp tương ứng với ngôn ngữ, văn hóa, và các yêu cầu khác. Dưới đây là các phương thức của đối tượng Request mà trả về đối tượng Locale:

java.util.Locale request.getLocale() 

Nhận ra Locale

Bảng dưới liệt kê các phương thức quan trọng có thể sử dụng để thăm dò vị trí, ngôn ngữ, văn hóa và locale của người yêu cầu. Tất cả các phương thức này hiển thị tên quốc gia và bộ tên ngôn ngữ trong trình duyệt của người yêu cầu.

STTPhương thức và Miêu tả
1

String getCountry()

Phương thức này trả về mã hóa country/region trong dạng chữ hoa cho Locale này trong định dạng ISO 3166 2-letter

2

String getDisplayCountry()

Phương thức này trả về một tên của country của locale đó mà thích hợp để hiển thị cho người dùng

3

String getLanguage()

Phương thức này trả về mã hóa ngôn ngữ trong dạnh chữ thường cho Locale này trong định dạng ISO 639

4

String getDisplayLanguage()

Phương thức này trả về một tên ngôn ngữ của locale đó mà thích hợp hiển thị cho người dùng

5

String getISO3Country()

Phương thức này trả về một tên 3 ký tự viết tắt cho country của Locale này

6

String getISO3Language()

Phương thức này trả về một tên 3 ký tự viết tắt cho language của Locale này

Quảng cáo

Ví dụ

Đây là ví dụ minh họa cách bạn hiển thị một language và country liên kết với nó cho một request trong một JSP:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
   //Get the client's Locale
   Locale locale = request.getLocale();
   String language = locale.getLanguage();
   String country = locale.getCountry();
%>
<html>
<head>
<title>Detecting Locale</title>
</head>
<body>
<center>
<h1>Detecting Locale</h1>
</center>
<p align="center">
<% 
   out.println("Language : " + language  + "<br />");
   out.println("Country  : " + country   + "<br />");
%>
</p>
</body>
</html>

Thiết lập ngôn ngữ trong JSP

Một JSP có thể đưa ra một trang được viết bằng một Western European language chẳng hạn như English, Spanish, German, French, Italian, Dutch, …. Ở đây, nó là quan trọng để thiết lập trường Content-Language Header để hiển thị tất cả ký tự một cách chính xác.

Điểm thứ hai là để hiển thị tất cả ký tự đặc biệt bởi sử dụng các thực thể (đối tượng) HTML. Ví dụ: "&#241;" biểu diễn "ñ", và "&#161;" biểu diễn "¡" như sau:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
    // Set response content type
    response.setContentType("text/html");
    // Set spanish language code.
    response.setHeader("Content-Language", "es");
    String title = "En Español";

%>
<html>
<head>
<title><%  out.print(title); %></title>
</head>
<body>
<center>
<h1><%  out.print(title); %></h1>
</center>
<div align="center">
<p>En Español</p>
<p>¡Hola Mundo!</p>
</div>
</body>
</html>
Quảng cáo

Định dạng Date cụ thể cho Locale

Bạn có thể sử dụng lớp java.text.DateFormat và phương thức Static của nó là getDateTimeInstance() để định dạng date và time cụ thể cho Locale. Ví dụ sau minh họa cách định dạng Date cụ thể tới một Locale đã cho:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.DateFormat,java.util.Date" %>

<%
    String title = "Locale Specific Dates";
    //Get the client's Locale
    Locale locale = request.getLocale( );
    String date = DateFormat.getDateTimeInstance(
                                  DateFormat.FULL, 
                                  DateFormat.SHORT, 
                                  locale).format(new Date( ));
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>Local Date: <%  out.print(date); %></p>
</div>
</body>
</html>

Định dạng Currency cụ thể cho Locale

Bạn có thể sử dụng lớp java.txt.NumberFormat và phương thức Static của nó là getCurrencyInstance() để định dạng Currency cụ thể (kiểu long hoặc double) trong một Locale. Ví dụ sau minh họa cách định dạng Currency cụ thể tới một Locale đã cho:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>

<%
    String title = "Locale Specific Currency";
    //Get the client's Locale
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
    String formattedCurr = nft.format(1000000);
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>Formatted Currency: <%  out.print(formattedCurr); %></p>
</div>
</body>
</html>

Định dạng Percentage cụ thể cho Locale

Bạn có thể sử dụng lớp java.txt.NumberFormat và phương thức Static của nó là getPercentInstance() để nhận Percentage cụ thể của một Locale. Ví dụ sau minh họa cách định dạng Percentage cụ thể tới một Locale đã cho.

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>

<%
    String title = "Locale Specific Percentage";
    //Get the client's Locale
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getPercentInstance(locale);
    String formattedPerc = nft.format(0.51);
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>Formatted Percentage: <%  out.print(formattedPerc); %></p>
</div>
</body>
</html>

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Các bài học JSP khác tại VietJack:




Tài liệu giáo viên