クライアントのブラウザがサポートする言語のリストを取得することは、サーブレットや JSP をローカライズするときの重要な手順です。クライアントは、各リクエストで HTTP Accept-Language ヘッダーを送信します。ターゲットのサーブレットや JSP は、リクエスト内のヘッダーの値を読み込み、これを使用して、コンテンツタイプを設定し、カスタムレスポンスを生成できます。
サーブレット API には、クライアントのロケールを取得するための次の便利なメソッドがあります。
HttpServletRequest オブジェクトには、次のメソッドがあります。
getLocale
getLocales
getLocale メソッドは Locale オブジェクトを返します。このロケールは、クライアントのブラウザの設定で定義されます。この方法は、Accept-Language HTTP ヘッダーの値を取得するには便利です。getLocales メソッドは、重要度の降順でロケールのリストを返します。
HttpServletResponse オブジェクトには、レスポンスに割り当てられた local オブジェクトを返す getLocale メソッドもあります。
次の例は、getLocale を呼び出してリクエストのロケールを取得し、ダイナミックに文字セットを設定し、レスポンスのコンテンツを条件付きで返します。
...
<%
String charset = "";
Locale locale = request.getLocale();
if(locale.getLanguage().equals("ko")) {
charset = "EUR_KR";
} else {
charset = "ISO-8859-1";
}
response.setContentType("text/html; charset=" + charset);
response.setLocale(locale);
out.println("<p>charset :" + charset + "</p>");
%>
<%@ page import="java.util.*" %>
<% if(locale.getLanguage().equals("ko")) { %>
// 韓国語のリクエストに特有のレスポンス
<% } else { %>
// その他のすべてのレスポンス
<% } %>
...
JSP では、page ディレクティブはスタティックメソッドです。つまり、これを使用して文字セットをダイナミックに変更することはできません。その結果、前の例では、スクリプトレットで response.setContentType メソッドを使用して、文字セットを識別しています。
サーブレットや JSP での文字セットの使用については、 「文字セットとエンコードの理解」 を参照してください。