始める前に、いくつかの重要な概念を説明する必要があります。
国際化 (i18n): 訪問者の言語または国に基づいて、ページが異なる翻訳で表示されることを示します。
ローカリゼーション (l10n): Web サイトにリソースを追加して、Web サイトをさまざまな地域や文化に適応させます。インド版のウェブサイトのようです。
地域: これは特定の地域または文化であり、通常は言語マーカーとアンダースコアで接続された国家マーカーと見なされます。たとえば、「en_US」は米国の英語圏を表します。
グローバルな Web サイトを構築したい場合は、一連の項目に注意する必要があります。この章では、国際化の問題にどのように対処するかを詳しく説明し、理解を深めるためにいくつかの例を示します。
JSP コンテナは、リクエストのロケール属性に基づいて正しいページ バージョンを提供できます。次に、リクエスト オブジェクトを通じて Locale オブジェクトを取得する方法の構文を示します。
java.util.Locale request.getLocale()
次の表に、Locale オブジェクトのより重要なメソッドを示します。これらのメソッドは、リクエスト オブジェクトの地域、言語、地域を検出するために使用されます。これらのメソッドはすべて、ブラウザに国名と言語名を表示します。
シリアルナンバー | 方法と説明 |
---|---|
1 | String get Country() は、国/地域コードを英語の大文字で返すか、地域を ISO 3166 2 文字形式で返します。 |
2 | String getDisplay Country() は、ユーザーに表示される国名を返します。 |
3 | String getLanguage() は、英語の小文字バージョンの言語コード、または ISO 639 形式の領域を返します。 |
4 | String getDisplayLanguage() は、ユーザーに表示される言語名を返します。 |
5 | String getISO3 Country() は、国名の 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.get Country(); %><html><head><title>ロケール</title></head><body><center><h1>ロケールの検出</h1></center><p align="center"><% out.println("Language : " + language + " <br />"); out.println("国 : " + 国 + "<br />");%></p></body></html>
JSP は、英語、スペイン語、ドイツ語、フランス語、イタリア語などの西ヨーロッパ言語を使用してページを出力できます。すべての文字を正しく表示するには、Content-Language ヘッダーを設定することが重要であることがわかります。
2 番目のポイントは、特殊文字を表示するには HTML 文字エンティティを使用する必要があることです。たとえば、「ñ」は「?」を表します。
<%@ page import="java.io.*,java.util.Locale" %><%@ page import="javax.servlet.*,javax.servlet.http.* "%><% // 応答を設定しますcontent type response.setContentType("text/html"); // スペイン語コードを設定します。response.setHeader("Content-Language", "es"); %><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" //クライアントのロケールを取得します locale = request.getLocale( ); DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.SHORT, locale).format(new Date( )); %><html><head><title><% out.print(title); /head><body><center><h1><% out.print(title) %></h1></center><div align="center"><p>現地の日付: <% out.print(日付); %></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.NumberFormat,java.util.Date" %><% String title = "ロケール固有の通貨" //クライアントのロケールを取得します locale = request.getLocale( ); NumberFormat.getCurrencyInstance(locale); String formattedCurr = nft.format(1000000); %><html><head><title><% out.print(title); <center><h1><% out.print(title) %></h1></center><div align="center"><p>フォーマットされた通貨: <% 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" //クライアントのロケールを取得します locale = request.getLocale( ); NumberFormat.getPercentInstance(locale); String formattedPerc = nft.format(0.51); <center><h1><% out.print(title) %></h1></center><div align="center"><p>フォーマットされたパーセンテージ: <% out.print(formattedPerc); %></p></div></body></html>