在我们开始之前,让我来解释一下三个重要术语:
国际化(i18n): 这意味着使一个网站,提供了不同版本的内容翻译成访问者的语言或国籍。
本地化(l10n): 这意味着将资源添加到一个网站,例如印地文翻译到一个网站,以使其适应特定的地理或文化区域。
区域设置: 这是一个特殊的文化或地理区域。它通常被称为后跟一个下划线被分离的一个国家符号作为语言符号。例如用“en_US”表示美国英语语言环境。
有一些项目需要建立一个全球性的网站。本在线教程将不会给你完整的细节上,但它会给你一个很好的例子可以提供您的网页在不同的语言,通过差异化的定位,即以互联网社区。语言环境。
servlet可以根据请求者的语言环境拾取相应的版本的网站,并根据当地的语言,文化和要求,提供相应的网站版本。以下是请求对象的方法返回的Locale对象。
java.util.Locale request.getLocale()
下面,你可以用它来检测请求者的地理位置,语言和区域设置,这是重要的语言环境方法。下面的方法显示国家名称和语言名称在请求者的浏览器中设置。
S.N. | 方法 & 描述 |
---|---|
1 |
String getCountry() 此方法返回此语言环境的国家/地区代码大写的2个字母的ISO 3166格式。 |
2 |
String getDisplayCountry() 此方法返回用于向用户显示的语言环境的国家的名称。 |
3 |
String getLanguage() 此方法以小写字母返回的语言代码,此区域设置在ISO 639的格式。 |
4 |
String getDisplayLanguage() 适合向用户显示的语言环境的语言,这是该方法返回一个名称。 |
5 |
String getISO3Country() 该方法返回该语言环境的国家一个三个字母的缩写。 |
6 |
String getISO3Language() 此方法返回此语言环境语言的三个字母的缩写。 |
这个例子演示了如何显示语言和相关国家的请求:
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 - by www.gitbook.net 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>"); } }
servlet可以在页面西输出欧语言,如英语,西班牙语,德语,法语,意大利语,荷兰语等在这里,它是重要的设置内容语言头,以正确显示所有的字符。
第二点是使用HTML实体显示所有的特殊字符,例如, "ñ" 代表 "ñ", and "¡" 代表 "¡" vk:
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 -by www.gitbook.net 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>"); } }
可以使用java.text.DateFormat类的静态方法getDateTimeInstance()来格式化日期和时间,特定的语言环境。下面的例子展示了如何对一个给定的语言环境特定的格式日期:
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>"); } }
可以使用的java.txt.NumberFormat类的静态方法getCurrencyInstance()格式化一个数字,如long长整型或double类型,在特定的语言环境货币。下面的例子展示了如何格式化一个给定的语言环境的货币:
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-by www.gitbook.net 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>"); } }
您可以使用java.txt.NumberFormat的类及其的静态getPercentInstance()方法来获得特定于语言环境的百分比。下面的例子演示了如何格式化到一个给定的语言环境特定的百分比:
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 - by www.gitbook.net 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>"); } }