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>
廣告

© . All rights reserved.