Servlets 简明教程
Servlets - Internationalization
在我们继续之前,让我解释三个重要术语 −
Before we proceed, let me explain three important terms −
-
Internationalization (i18n) − This means enabling a web site to provide different versions of content translated into the visitor’s language or nationality
-
Localization (l10n) − This means adding resources to a web site to adapt to a particular geographical or cultural region.
-
locale − This is a particular cultural or geographical region. It is usually referred to as a language symbol followed by a country symbol which is separated by an underscore. For example "en_US" represents English locale for US.
在构建全球网站时,有许多事项需要照顾到。本教程不会为您提供这方面的完整详细信息,但会为您提供一个很好的示例,说明如何向互联网社区以不同的语言提供您的网页,方法是区分他们的位置,即语言环境。
There are number of items which should be taken care while building up a global website. This tutorial would not give you complete detail on this but it would give you a good example on how you can offer your web page in different languages to internet community by differentiating their location i.e. locale.
servlet 可以根据请求者的语言环境挑选网站的适当版本,并根据当地语言、文化和要求提供适当的网站版本。以下是返回 Locale 对象的请求对象的方法。
A servlet can pickup appropriate version of the site based on the requester’s locale and provide appropriate site version according to the local language, culture and requirements. Following is the method of request object which returns Locale object.
java.util.Locale request.getLocale()
Detecting Locale
以下是您可以用来检测请求者的位置、语言和语言环境的重要语言环境方法。以下所有方法都显示了请求者的浏览器中设置的国家名称和语言名称。
Following are the important locale methods which you can use to detect requester’s location, language and of course locale. All the below methods display country name and language name set in requester’s browser.
Sr.No. |
Method & Description |
1 |
String getCountry() This method returns the country/region code in upper case for this locale in ISO 3166 2-letter format. |
2 |
String getDisplayCountry() This method returns a name for the locale’s country that is appropriate for display to the user. |
3 |
String getLanguage() This method returns the language code in lower case for this locale in ISO 639 format. |
4 |
String getDisplayLanguage() This method returns a name for the locale’s language that is appropriate for display to the user. |
5 |
String getISO3Country() This method returns a three-letter abbreviation for this locale’s country. |
6 |
String getISO3Language() This method returns a three-letter abbreviation for this locale’s language. |
Example
此示例显示如何为请求显示语言和关联的国家/地区 −
This example shows how you display a language and associated country for a request −
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>"
);
}
}
Languages Setting
Servlet 可以输出以西欧语言(如英语、西班牙语、德语、法语、意大利语、荷兰语等)编写的页面。此处设置 ContentLanguage 标题以正确显示所有字符非常重要。
A servlet can output a page written in a Western European language such as English, Spanish, German, French, Italian, Dutch etc. Here it is important to set ContentLanguage header to display all the characters properly.
第二点是使用 HTML 实体显示所有特殊字符,例如,“ñ”代表“ñ”,而“¡”代表“¡”,如下所示:
Second point is to display all the special characters using HTML entities, For example, "ñ" represents "ñ", and "¡" represents "¡" as follows:
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>"
);
}
}
Locale Specific Dates
可使用 java.text.DateFormat 类及其静态 getDateTimeInstance() 方法来格式化特定于区域设置的日期和时间。以下示例显示如何格式化特定于给定区域设置的日期 −
You can use the java.text.DateFormat class and its static getDateTimeInstance() method to format date and time specific to locale. Following is the example which shows how to format dates specific to a given locale −
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>"
);
}
}
Locale Specific Currency
可使用 java.txt.NumberFormat 类及其静态 getCurrencyInstance() 方法来格式化数字,如 long 或 double 类型,以区域设置特定的货币。以下示例显示如何格式化特定于给定区域设置的货币 −
You can use the java.txt.NumberFormat class and its static getCurrencyInstance() method to format a number, such as a long or double type, in a locale specific currency. Following is the example which shows how to format currency specific to a given locale −
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>"
);
}
}
Locale Specific Percentage
可使用 java.txt.NumberFormat 类及其静态 getPercentInstance() 方法来获取区域设置特定的百分比。以下示例显示如何格式化特定于给定区域设置的百分比 −
You can use the java.txt.NumberFormat class and its static getPercentInstance() method to get locale specific percentage. Following is the example which shows how to format percentage specific to a given locale −
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>"
);
}
}