JSP - 国际化| i18n| 10n


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

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

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

  • locale - 这是一个特定的文化或地理区域。它通常被称为语言符号,后跟国家/地区符号,并用下划线分隔。例如,“ en_US ”代表美国的英语语言环境。

建立全球网站时应注意许多事项。本教程不会向您提供有关此内容的完整详细信息,但它将为您提供一个很好的示例,说明如何通过区分不同的位置(即区域设置)向互联网社区提供不同语言的网页。

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

java.util.Locale request.getLocale() 

检测区域设置

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

编号 方法及说明
1

字符串 getCountry()

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

2

字符串 getDisplayCountry()

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

3

字符串 getLanguage()

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

4

字符串 getDisplayLanguage()

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

5

字符串 getISO3Country()

此方法返回该语言环境所在国家/地区的三个字母的缩写。

6

字符串 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 实体显示所有特殊字符;例如,“ñ” 代表“ñ”“¡” 表示“¡”如下 -

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