Servlets - Quốc tế hóa
Trước khi tiếp tục, hãy để tôi giải thích ba thuật ngữ quan trọng -
Internationalization (i18n) - Điều này có nghĩa là cho phép một trang web cung cấp các phiên bản nội dung khác nhau được dịch sang ngôn ngữ hoặc quốc tịch của khách truy cập
Localization (l10n) - Điều này có nghĩa là thêm tài nguyên vào một trang web để thích ứng với một khu vực địa lý hoặc văn hóa cụ thể.
locale- Đây là một vùng văn hóa hoặc địa lý cụ thể. Nó thường được gọi là ký hiệu ngôn ngữ theo sau là ký hiệu quốc gia được phân tách bằng dấu gạch dưới. Ví dụ "en_US" đại diện cho ngôn ngữ tiếng Anh cho Hoa Kỳ.
Có một số mục cần được quan tâm khi xây dựng một trang web toàn cầu. Hướng dẫn này sẽ không cung cấp cho bạn chi tiết đầy đủ về điều này nhưng nó sẽ cung cấp cho bạn một ví dụ điển hình về cách bạn có thể cung cấp trang web của mình bằng các ngôn ngữ khác nhau cho cộng đồng internet bằng cách phân biệt vị trí của họ tức là ngôn ngữ.
Một servlet có thể lấy phiên bản thích hợp của trang web dựa trên ngôn ngữ của người yêu cầu và cung cấp phiên bản trang web phù hợp theo ngôn ngữ, văn hóa và yêu cầu của địa phương. Sau đây là phương thức của đối tượng request trả về đối tượng Locale.
java.util.Locale request.getLocale()
Phát hiện ngôn ngữ
Sau đây là các phương pháp ngôn ngữ quan trọng mà bạn có thể sử dụng để phát hiện vị trí, ngôn ngữ và tất nhiên là ngôn ngữ của người yêu cầu. Tất cả các phương pháp dưới đây hiển thị tên quốc gia và tên ngôn ngữ được đặt trong trình duyệt của người yêu cầu.
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | String getCountry() Phương thức này trả về mã quốc gia / vùng ở dạng chữ hoa cho ngôn ngữ này ở định dạng ISO 3166 2 chữ cái. |
2 | String getDisplayCountry() Phương thức này trả về tên cho quốc gia của ngôn ngữ phù hợp để hiển thị cho người dùng. |
3 | String getLanguage() Phương thức này trả về mã ngôn ngữ bằng chữ thường cho ngôn ngữ này ở định dạng ISO 639. |
4 | String getDisplayLanguage() Phương thức này trả về một tên cho ngôn ngữ của miền địa phương thích hợp để hiển thị cho người dùng. |
5 | String getISO3Country() Phương thức này trả về ba chữ cái viết tắt cho quốc gia của ngôn ngữ này. |
6 | String getISO3Language() Phương thức này trả về một chữ viết tắt gồm ba chữ cái cho ngôn ngữ của miền địa phương này. |
Thí dụ
Ví dụ này cho thấy cách bạn hiển thị ngôn ngữ và quốc gia liên quan cho một yêu cầu -
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
public class GetLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Get the client's Locale
Locale locale = request.getLocale();
String language = locale.getLanguage();
String country = locale.getCountry();
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Detecting Locale";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + language + "</h1>\n" +
"<h2 align = \"center\">" + country + "</h2>\n" +
"</body>
</html>"
);
}
}
Cài đặt ngôn ngữ
Một servlet có thể xuất ra một trang được viết bằng ngôn ngữ Tây Âu như tiếng Anh, tiếng Tây Ban Nha, tiếng Đức, tiếng Pháp, tiếng Ý, tiếng Hà Lan, v.v. Ở đây, điều quan trọng là phải đặt tiêu đề ContentLanguage để hiển thị tất cả các ký tự đúng cách.
Điểm thứ hai là hiển thị tất cả các ký tự đặc biệt bằng cách sử dụng các thực thể HTML, Ví dụ: "& # 241;" đại diện cho "ñ" và "& # 161;" đại diện cho "¡" như sau:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
public class DisplaySpanish extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Set spanish language code.
response.setHeader("Content-Language", "es");
String title = "En Español";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1>" + "En Español:" + "</h1>\n" +
"<h1>" + "¡Hola Mundo!" + "</h1>\n" +
"</body>
</html>"
);
}
}
Ngày cụ thể theo ngôn ngữ
Bạn có thể sử dụng lớp java.text.DateFormat và phương thức getDateTimeInstance () tĩnh của nó để định dạng ngày và giờ cụ thể cho ngôn ngữ. Sau đây là ví dụ cho thấy cách định dạng ngày cụ thể cho một ngôn ngữ nhất định -
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.DateFormat;
import java.util.Date;
public class DateLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
String date = DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.SHORT, locale).format(new Date( ));
String title = "Locale Specific Dates";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + date + "</h1>\n" +
"</body>
</html>"
);
}
}
Đơn vị tiền tệ cụ thể của địa phương
Bạn có thể sử dụng lớp java.txt.NumberFormat và phương thức getCurrencyInstance () tĩnh của nó để định dạng một số, chẳng hạn như kiểu dài hoặc kiểu kép, trong một loại tiền tệ cụ thể của ngôn ngữ. Sau đây là ví dụ cho thấy cách định dạng tiền tệ cụ thể cho một ngôn ngữ nhất định -
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
public class CurrencyLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
String formattedCurr = nft.format(1000000);
String title = "Locale Specific Currency";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + formattedCurr + "</h1>\n" +
"</body>
</html>"
);
}
}
Tỷ lệ phần trăm cụ thể theo ngôn ngữ
Bạn có thể sử dụng lớp java.txt.NumberFormat và phương thức getPercentInstance () tĩnh của nó để nhận tỷ lệ phần trăm địa phương cụ thể. Sau đây là ví dụ cho thấy cách định dạng tỷ lệ phần trăm cụ thể cho một ngôn ngữ nhất định -
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
public class PercentageLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getPercentInstance(locale);
String formattedPerc = nft.format(0.51);
String title = "Locale Specific Percentage";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + formattedPerc + "</h1>\n" +
"</body>
</html>"
);
}
}