JSP 国際化
始める前に、いくつかの重要な概念を説明する必要があります:
- 国際化(i18n):ページが訪問者の言語や国に応じて異なる翻訳バージョンを表示することを示します。
- ローカリゼーション(l10n):ウェブサイトにリソースを追加して、さまざまな地域や文化に適応させること。例えば、ウェブサイトのヒンディー語版など。
- ロケール:これは特定の地域または文化であり、通常は言語コードと国コードをアンダースコアで連結したものと見なされます。例えば「en_US」はアメリカ英語の地域を表します。
グローバルなウェブサイトを構築したい場合は、一連の項目に注意する必要があります。この章では、国際化の問題をどのように処理するかについて詳しく説明し、理解を深めるための例をいくつか示します。
JSPコンテナは、requestのlocaleプロパティに基づいて正しいページバージョンを提供できます。次に、requestオブジェクトを介してLocaleオブジェクトを取得する方法の構文を示します。
java.util.Locale request.getLocale()
Localeの検出
次の表に、requestオブジェクトの地域、言語、およびロケールを検出するためのLocaleオブジェクトの重要なメソッドを示します。これらのメソッドはすべて、ブラウザに国名と言語名を表示します。
| 番号 | メソッド & 説明 |
|---|---|
| 1 | String getCountry()国/地域コードの英語の大文字、またはISO 3166 2文字形式の地域を返します。 |
| 2 | String getDisplayCountry()ユーザーに表示する国名を返します。 |
| 3 | String getLanguage()言語コードの英語の小文字、またはISO 639形式の地域を返します。 |
| 4 | String getDisplayLanguage()ユーザーに表示する言語名を返します。 |
| 5 | String getISO3Country()国名の3文字の略称を返します。 |
| 6 | String 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文字実体を使用する必要があることです。例えば、「ñ」はñを表し、「¡」は¡を表します:
<%@ 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.text.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.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 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>
その他の拡張