JSP - 国际化 | i18n | l10n



在本章中,我们将讨论 JSP 中国际化的概念。在继续之前,让我们了解以下三个重要术语:

  • 国际化 (i18n) - 这意味着使网站能够提供内容的不同版本,这些版本已翻译成访问者的语言或国籍。

  • 本地化 (l10n) - 这意味着向网站添加资源,以使其适应特定的地理或文化区域,例如将网站翻译成印地语。

  • 区域设置 (locale) - 这是特定的文化或地理区域。它通常被称为语言符号后跟国家/地区符号,它们之间用下划线分隔。例如,“en_US”表示美国的英语区域设置。

在构建全球网站时,需要考虑许多事项。本教程不会详细介绍所有内容,但它将为您提供一个很好的示例,说明如何通过区分其位置(即区域设置)为互联网社区提供不同语言的网页。

JSP 可以根据请求者的区域设置选择合适的网站版本,并根据本地语言、文化和需求提供相应的网站版本。以下是返回 Locale 对象的 request 对象的方法。

java.util.Locale request.getLocale() 

检测区域设置

以下是可以用于检测请求者的位置、语言以及当然还有区域设置的重要区域设置方法。所有以下方法都显示在请求者浏览器中设置的国家/地区名称和语言名称。

序号 方法和描述
1

String getCountry()

此方法以 ISO 3166 2 个字母格式返回此区域设置的大写国家/地区代码。

2

String getDisplayCountry()

此方法返回适合显示给用户的区域设置国家/地区的名称。

3

String getLanguage()

此方法以 ISO 639 格式返回此区域设置的小写语言代码。

4

String getDisplayLanguage()

此方法返回适合显示给用户的区域设置语言的名称。

5

String getISO3Country()

此方法返回此区域设置国家/地区的三个字母缩写。

6

String getISO3Language()

此方法返回此区域设置语言的三个字母缩写。

示例

以下示例显示如何在 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>

语言设置

JSP 可以输出用西欧语言(如英语、西班牙语、德语、法语、意大利语、荷兰语等)编写的页面。这里重要的是将 Content-Language 标头设置为正确显示所有字符。

另一个要点是使用 HTML 实体显示所有特殊字符;例如,"&#241;" 表示 "ñ""&#161;" 表示 "¡",如下所示:

<%@ 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>

特定于区域设置的日期

您可以使用java.text.DateFormat类及其静态getDateTimeInstance( )方法来格式化特定于区域设置的日期和时间。以下示例显示如何格式化特定于给定区域设置的日期:

<%@ 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>

特定于区域设置的货币

您可以使用java.txt.NumberFormat类及其静态getCurrencyInstance( )方法以特定于区域设置的货币格式化数字(例如 long 或 double 类型)。以下示例显示如何格式化特定于给定区域设置的货币:

<%@ 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>

特定于区域设置的百分比

您可以使用java.txt.NumberFormat类及其静态getPercentInstance( )方法获取特定于区域设置的百分比。以下示例显示如何格式化特定于给定区域设置的百分比:

<%@ 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>
广告