JSPの国際化


始める前に、いくつかの重要な概念を説明する必要があります:

  • 国際化 (i18n): 訪問者の言語または国に基づいて、ページが異なる翻訳で表示されることを示します。

  • ローカリゼーション (l10n): Web サイトにリソースを追加して、Web サイトをさまざまな地域や文化に適応させます。インド版のウェブサイトのようです。

  • 地域: これは特定の地域または文化であり、通常は言語マーカーとアンダースコアで接続された国家マーカーとみなされます。たとえば、「en_US」は米国の英語圏を表します。

グローバルなウェブサイトを構築したい場合は、一連のプロジェクトに注意を払う必要があります。この章では、国際化の問題にどのように対処するかを詳しく説明し、理解を深めるためにいくつかの例を示します。

JSP コンテナは、リクエストのロケール属性に基づいて正しいページ バージョンを提供できます。次に、リクエスト オブジェクトを通じて Locale オブジェクトを取得する方法の構文を示します:

java.util.Locale request.getLocale()

ロケールの検出

次の表は、地域、言語、およびリクエスト オブジェクトの地域を検出するために使用される Locale オブジェクトのより重要なメソッドを示しています。これらのメソッドはすべて、ブラウザに国名と言語名を表示します:

Serial NumberMethod & Description
1文字列 get Country()


国/地域コードを英語の大文字で返すか、地域を ISO 3166 の 2 文字形式で返します
2String getDisplay Country()


ユーザーに表示される国名を返します
3String getLanguage()


言語コードの英語の小文字、または ISO 639 形式の領域を返します
4String getDisplayLanguage()


ユーザーに表示する言語名を返します
5文字列getISO3 Country()


国名の 3 文字の略語を返します
6String getISO3Language()


言語名の 3 文字の略語を返します

サンプルデモンストレーション

この例は、JSP で言語と国を表示する方法を示しています:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
   //获取客户端本地化信息
   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 ヘッダーを設定することが重要であることがわかります。

2 番目のポイントは、特殊文字を表示するには HTML 文字エンティティを使用する必要があることです。たとえば、「¡」は「?」を表します。 ロケール固有の日付


日付と時刻は、java.text.DateFormat クラスとその静的メソッド getDateTimeInstance() を使用してフォーマットできます。次の例は、指定された範囲に従って日付と時刻をフォーマットする方法を示しています:

<%@ 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.NumberFormat クラスとその静的メソッド getCurrencyInstance() を使用して書式設定できます。たとえば、地域固有の通貨のロングやダブルなどです。次の例は、指定されたロケールに従って通貨をフォーマットする方法を示しています:

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