第16章 国際化とローカリゼーションおよびテーマ
アプリケーションの国際化およびローカライズにはいくつかのステージが必要となります。
注記
国際化の機能は JSF コンテキストでのみ使用可能です。
16.1. アプリケーションの国際化 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Java EE 5 アプリケーションは数多くのコンポーネントから構成されています。アプリケーションをローカライズするにはこれらのコンポーネントすべてが正しく設定されていなければなりません。
開始する前に、 データベースのサーバーとクライアントがロケールに対応する正しい文字エンコーディングを使用していることを確認します。 通常、 UTF-8 エンコーディングを使用するのが一般的です (正しいエンコーディングの設定方法については本チュートリアルの範囲外です)。
16.1.1. アプリケーションサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションサーバーが要求パラメータを正しいエンコーディングでクライアントの要求から受け取るようにするには、Tomcat コネクタを設定する必要があります。
URIEncoding="UTF-8" 属性を $JBOSS_HOME/server/$PROFILE/deploy/jboss-web.deployer/server.xml のコネクタ設定に追加します。
<Connector port="8080" URIEncoding="UTF-8"/>
<Connector port="8080" URIEncoding="UTF-8"/>
代わりに、JBoss AS に要求パラメータの適切なエンコーディングはその要求から取得するよう指示することもできます。
<Connector port="8080" useBodyEncodingForURI="true"/>
<Connector port="8080" useBodyEncodingForURI="true"/>
16.1.2. 翻訳されたアプリケーション文字列 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
アプリケーション内のすべての メッセージ にも翻訳された文字列が必要となります (ビューのフィールドラベルなど)。 まず、 リソースバンドルが目的の文字エンコーディングを使ってコード化されることを確認します。 デフォルトでは ASCII が使用されます。 ASCII は十分多くの言語に対応していますが、 すべての言語の文字を取り扱っているわけではありません。
リソースバンドルは ASCII で作成されるか、Unicode 文字の表示に Unicode エスケープのコードを使用する必要があります。 バイトコードに対してプロパティファイルをコンパイルしないため、使用する文字セットを JVM に伝える方法がありません。 このため、 ASCII 文字または ASCII 文字セットにはないエスケープ文字を使用しなければなりません。
\uXXXX を使用するといずれの Java ファイルでも Unicode 文字を表すことができます。 XXXX はその文字を表す 16 進数です。
ラベルの翻訳はメッセージリソースバンドルにネイティブエンコーディングで書き込むことができます (「ラベル」)。ネイティブエンコーディングで書き込んだファイルの内容は、JDK で提供される
native2ascii ツールを使って、Unicode エスケープシーケンスで ASCII 以外の文字を表すものに変換することができます。
このツールの使い方は Java 6 の場合はこちら に記載されています。 たとえば、 あるファイルを UTF-8 から変換するには次のようにします。
native2ascii -encoding UTF-8 messages_cs.properties > messages_cs_escaped.properties
$ native2ascii -encoding UTF-8 messages_cs.properties > messages_cs_escaped.properties
16.1.3. その他のエンコーディング設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
確認する必要があるのは、正しい文字セットを使ってローカライズされたデータとメッセージが表示されること、 そしてサブミットされたデータがすべて正しいエンコーディングを使用することです。
表示文字のエンコーディングを設定するには
<f:view locale="cs_CZ"/> タグを使用します (この locale 値は JSF にチェコ語を使用するよう指示します)。XML にローカライズされた文字列を埋め込む場合に、XML ドキュメント自体のエンコーディングを変更したいと思われるかもしれません。これを行うには XML 宣言の <?xml version="1.0" encoding="UTF-8"?> にある encoding 属性値を変更します。
JSF や Facelet は指定文字エンコーディングを使った要求をサブミットするはずです。ただし、 エンコーディングを指定していない要求がサブミットされるようにするには、 要求エンコーディングにサーブレットフィルタを強制的に使用させることができます。
components.xml で設定します。
<web:character-encoding-filter encoding="UTF-8" override-client="true"
url-pattern="*.seam" />
<web:character-encoding-filter encoding="UTF-8" override-client="true"
url-pattern="*.seam" />