在我们开始之前,先来看看三个重要术语:
- 国际化(i18n):这意味着一个网站提供了不同版本的翻译成访问者的语言或国籍的内容。
- 本地化(l10n):这意味着向网站添加资源,以使其适应特定的地理或文化区域,例如网站翻译成印地文(Hindi)。
- 区域设置(locale):这是一个特殊的文化或地理区域。它通常指语言符号后跟一个下划线和一个国家符号。例如 "en_US" 表示针对 US 的英语区域设置。
当建立一个全球性的网站时有一些注意事项。本教程不会讲解这些注意事项的完整细节,但它会通过一个很好的实例向您演示如何通过差异化定位(即区域设置)来让网页以不同语言呈现。
Servlet 可以根据请求者的区域设置拾取相应版本的网站,并根据当地的语言、文化和需求提供相应的网站版本。以下是 request 对象中返回 Locale 对象的方法。
java.util.Locale request.getLocale()
检测区域设置
下面列出了重要的区域设置方法,您可以使用它们来检测请求者的地理位置、语言和区域设置。下面所有的方法都显示了请求者浏览器中设置的国家名称和语言名称。
| 序号 | 方法 & 描述 |
|---|---|
| 1 |
String getCountry() 该方法以 2 个大写字母形式的 ISO 3166 格式返回该区域设置的国家/地区代码。 |
| 2 |
String getDisplayCountry() 该方法返回适合向用户显示的区域设置的国家的名称。 |
| 3 |
String getLanguage() 该方法以小写字母形式的 ISO 639 格式返回该区域设置的语言代码。 |
| 4 |
String getDisplayLanguage() 该方法返回适合向用户显示的区域设置的语言的名称。 |
| 5 |
String getISO3Country() 该方法返回该区域设置的国家的三个字母缩写。 |
| 6 |
String getISO3Language() 该方法返回该区域设置的语言的三个字母的缩写。 |
实例
本实例演示了如何显示某个请求的语言和相关的国家:
1 import java.io.*; 2 import javax.servlet.*; 3 import javax.servlet.http.*; 4 import java.util.Locale; 5 6 public class GetLocale extends HttpServlet{ 7 8 public void doGet(HttpServletRequest request, 9 HttpServletResponse response) 10 throws ServletException, IOException 11 { 12 // 获取客户端的区域设置 13 Locale locale = request.getLocale(); 14 String language = locale.getLanguage(); 15 String country = locale.getCountry(); 16 17 // 设置响应内容类型 18 response.setContentType("text/html"); 19 PrintWriter out = response.getWriter(); 20 21 String title = "检测区域设置"; 22 String docType = 23 "<!doctype html public \"-//w3c//dtd html 4.0 " + 24 "transitional//en\">\n"; 25 out.println(docType + 26 "<html>\n" + 27 "<head><title>" + title + "</title></head>\n" + 28 "<body bgcolor=\"#f0f0f0\">\n" + 29 "<h1 align=\"center\">" + language + "</h1>\n" + 30 "<h2 align=\"center\">" + country + "</h2>\n" + 31 "</body></html>"); 32 } 33 }