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.
STT | Phươ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 |
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ụ: "ñ" biểu diễn "ñ", và "¡" 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>
Đị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>