Java SE technologies provide the functionality to develop and run applications
» Get Java SE
Java 国際化 FAQ
言語: English - 日本語
このページは、J2SE バージョン 5.0、1.4.2、1.3.1、J2EE web 層コンポーネントの国際化についてよくある質問に答えます。このページや他の製品マニュアルにない質問については Java 国際化フォーラム を参照してください。
国際化とは、ソフトウェアが容易に、低コストで、尚且つソフトウェアに技術的な変更を加える事なく、 様々な言語や地域に対応(地域化)できる様にする為のソフトウェア設計の過程です。 地域化する際に、ソフトウェアに技術的な変更を加える必要が無いというのが中でもとりわけ重要なポイントです。 通常、国際化には、プログラムから言語や文化に依存する部分を取り除く処理が含まれます。たとえば、エラーメッセージのテキスト は、地域対応化の過程で翻訳する必要があるので、プログラムのソースコードから切り離しておかなければなりません。 地域対応とは、特定のロケールで使用するために、プログラムを適応させるプロセスです。ロケールと は、同じ言語と習慣を共有する地理的または政治的な領域のことです。地域対応化には、ユーザインタフェースのラベル、エラーメッセージ、オンラインヘルプ などの翻訳が含まれます。地域対応には、通貨や時間、日付や数値など、そのロケールの文化によって異なるデータ項目の書式設定も含まれます。 プログラムの国際化を行いたいのですが、どこから始めたらよいでしょうか。 最初から始めることをお勧めします。具体的には、ソフトウェアの要件を決定するときから始めます。地域対応化を簡単に行える柔軟なソフトウェアを設 計するには、サポート予定のすべての国、すべての言語 (ロケール) で、要件がどのように異なるかを把握しておく必要があります。このプロセスでは、Sun Software Product Internationalization Taxonomy を利用するとよいでしょう。Java チュートリアルにも、いくつかの共通の問題の特定に役立つ簡単なチェックリストが付いていま す。要件を特定できたら、Java チュートリアルの「Internationalization Trail」や、「Java Internationalization」のページから参照されているその他の資料を参考に、設計および実装上の適切なソリューションを見つけ てください。 Sun の JRE は、ユーロ (通貨単位) をサポートしていますか。 サポートしています。Sun の JRE では、ユーロ文字の入力、レンダリング、さまざまな文字エンコーディングへの変換が可能です。また、数値を通貨に変換する際にユーロ文字を使用することも できます。テキストを入力およびレンダリングする場合、ホストオペレーティングシステムの適切なサポートが必要です。詳細は、 のドキュメントおよび Solaris のドキュメントを参照してください。通貨文字の書式に関して、Sun の JRE のバージョン 1.4 では、欧州通貨同盟の加盟国のデフォルト通貨はユーロになっています。JRE 1.3.1 では、EURO バリアントを使ってロケールを選択する必要があります。
Java プラットフォームではテキストはどのように表示されますか。 Java プログラミング言語は Unicode
文字セットをベースにしており、いくつかのライブラリでは Unicode 標準が実装されています。Java
プログラミング言語の基本データ型 Unicode は、世界の主要な書記法すべてに加えて、基本的な学術記号をサポートしています。Unicode 仕様では最初、各文字を 16 ビット固定長の実体として定義していましたが、その後、16 ビットより長い表現を必要とする文字も取り扱えるように Unicode 標準が変更されました。有効なコードポイントの範囲は現在、U+ 0000 ~ U+10FFFF です。Unicode 標準の詳細については、Unicode Consortium の Web サイトを参照してください。 J2SE プラットフォームでサポートされる Unicode 標準のバージョンと、補助文字について教えてください。 J2SE 5 では、文字処理が Unicode 標準のバージョン 4.0 に基づいて行われるようになりました。このアップグレードの一環として、補助文字のサポートが JSR 204 エキスパートグループによって規定され、JDK 全体に実装されました。詳細については、「Java プラットフォームにおける補助文字のサポート」および「Java Specification Request 204」の各資料と、Character クラスのドキュメントを参照してください。 J2SE 1.4 では Unicode 標準のバージョン 3.0、J2SE 1.3 では Unicode 標準のバージョン 2.1 が使用されます。通常、補助文字のサポートはありません。 コードポイント、 コードユニット、補助文字などについて教えてください。 「コード化文字セット」は文字セット (一揃いの文字) の一種です。この文字セットに含まれる各文字には、固有の番号が割り当てられています。Unicode 標準の核となるのは、文字 A に数字 004116、 文字 € (ユーロ記号) に数字 20AC16 を割り当てるコード化文字セットです。Unicode 標準では、常に 16 進数が使用されます。これらの 16 進数には「U+」という接頭辞が付けられるので、たとえば文字 A は「U+0041」のように記述されます。 コードポイントは、コード化文字セットで使用可能な数字です。コード化文字セッ トでは、有効なコードポイントが定義されています。ただし、コードポイント全部に文字が割り当てられているとは限りません。Unicode では、U+0000 ~ U+10FFFF の範囲のコードポイントが有効です。Unicode 4.0 では、100 万以上に及ぶコードポイントのうち 96,382 個に文字が割り当てられています。 補助文字は、U+10000 ~ U+10FFFF の範囲のコードポイントを持つ文字です。これらは、元の 16 ビット方式では表現できない文字に該当します。U+0000 ~ U+FFFF の範囲の文字セットは、「基本多言語面 (BMP: Basic Multilingual Plane)」と呼ばれます。このように、Unicode の各文字は、BMP か補助文字のどちらかになります。 文字エンコーディングスキーマは、1 つまたは複数のコード化文字セットの番号を 1 つまたは複数の固定長コードユニットのシーケンスに対応付けるものです。もっともよく使用されるコードユニットは 8 ビットバイトですが、内部処理には 16 ビットや 32 ビットの整数も使用できます。UTF-32、UTF-16、UTF-8 は、Unicode 標準のコード化文字セットに対応する文字エンコーディングスキーマです。 文字エンコーディングは、コードユニットのシーケンスに文字セットを対応付けるもの です。文字エンコーディングスキーマは、1 つまたは複数のコード化文字セットに適用されます。もっともよく使用される文字エンコーディングは、UTF-8、ISO-8859-1、GB18030、 Shift_JIS です。 UTF-16 は、符号なしの 16 ビットコードユニットを 1 ~ 2 個使って、Unicode のコードポイントを符号化します。U+0000 ~ U+FFFF の値は、同じ値の 16 ビットユニット 1 個で符号化されます。補助文字はコードユニット 2 個でエンコードされます。1 つめのコードユニットは上位サロゲート範囲 (U+D800 ~ U+DBFF)、2 つめのコードユニットは下位サロゲート範囲 (U+DC00 ~ U+DFFF) に対応しています。これは複数バイトのエンコーディングと概念上よく似ていますが、重要な違いがあります。U+D800 ~ U+DFFF の値は UTF-16 用に予約されていて、これらの値にコードポイントとして文字が割り当てられることはありません。つまり、文字列内の個々のコードユニットが 1 ユニットの文字を表しているのか、2 ユニットの文字の最初のユニットまたは 2 番目のユニットを表しているのかをソフトウェアで判断できるということです。これにより、0x41 が文字 A であるのか 2 バイト文字の 2 番目のバイトであるのか判りづらかった、従来の複数バイト文字エンコーディングが大幅に改善されました。
ロケールとは、同じ言語と習慣を共有する地理的または政治的な領域のことです。Java
プラットフォームでは、ロケールは、
『Java チュートリアル』の「Setting the Locale」を 参照してください。 サポートされるロケールは、Java プラットフォームの実装により、また機能範囲により異なります。Sun の JRE でサポートされるロケールについては、J2SE 5.0、J2SE 1.4.2、 および J2SE 1.3.1 の「サポートされているロケール」または「サポートするロケール」に記載されています。 Java アプリケーションでは複数のロケールを使用できますか。 ロケールの影響を受ける API では、多くの場合、ロケールの指定が可能です。このため、複数の異なったロケールを同時に処理できるアプリケーションを作成できます。たとえば、Java で作成された Web アプリケーションでは、複数のロケールを同時に使用して、異なった要求を処理できます。 アプリケーションの外部からデフォルトのロケールを設定できますか。 使用している Java プラットフォームの実装によって異なります。通常、初期のデフォルトロケールは、ホストオペレーティングシステムのロケールによって決まります。Sun
の JRE のバージョン 1.4 以降では、コマンド行から user.language、user.country、および
user.variant
の各システムプロパティを設定することで、初期のデフォルトロケールを変更できます。たとえば、初期のデフォルトロケールとして java -Duser.language=th -Duser.country=TH -Duser.variant=TH MainClass この機能を使用できない実行環境もあるため、この機能はテスト目的だけに使用してください。
『Java チュートリアル』の「Isolating Locale-Specific Data」を参照してください。 プロパティファイルに ASCII 以外の文字列を指定する方法を教えてください。 任意の Unicode 文字を、\uXXXX というエスケープシーケンスによって指定できます。補助文字の場合、UTF-16 のコード単位 (2 個) それぞれに 1 つずつ、合計 2 個のエスケープシーケンスが必要です。XXXX は、UTF-16 コード単位の値を表す 4 桁の 16 進数字です。たとえ ば、プロパティファイルに、次のエントリを入力できます。 s1=hello there ファイルを ASCII 以外のエンコーディングで編集して保存した場合には、native2ascii ツールを使って ASCII コードに変換することができます。たとえば、一般的な日本語コードである Shift_JIS を使ってプロパティファイルを編集する場合には、この操作が必要になります。 ASCII 以外の文字を含む ソースファイルに ASCII 文字以外の文字が含まれている場合は、コンパイラにファイルのエンコーディングを指定する必要があります。たとえば、Shift_JIS で書かれている日本語のリソースバンドルをコンパイルするには、次のようにします。 javac -encoding Shift_JIS LabelsResource_ja.java
ロケールに依存する形式で書かれている日付の書式設定と文法解析には、 通常、 デフォルトのロケールを設定すると、ソー トの結果にどのように影響しますか。 ソートルーチンの構築には、 Collator オブジェクトは、さまざまなレベルの decomposition および strength プロパティをサポートします。あるロケールで、適切な decomposition と strength を選択する方法を教えてください。 複合語の解析には時間がかかるため、decomposition
をオフにすると、比較が高速になります。ただし、ラテン系の言語では、テキストにアクセント記号が含まれている場合には strength プロパティの選択は、アプリケーションの目的によって異なります。たとえば、テキ
スト検索を行うときに、大文字と小文字の区別およびアクセントを無視する、「弱い」マッチングを許可する場合があります。このタイプの検索では、
上記の説明を参照してください。 国際化関連の仕様や Java API では、「charset」という語を「文字エンコーディング」 の同義語として使用しています。charset と「文字セット」、「コード化文字セット」はまったく別物ですの で、注意してください。charset の名前の多く (ただし全部ではない) は、IANA に登録されています。 Unicode とほかの文字エンコーディング間でデータを変換する方法を教えてください。 アプリケーションの内部で変換を行う場合は、Java チュートリアルの「Converting
Non-Unicode Text」に説明されているように、 Unicode との間での変換がサポートされている文字エンコーディングは何ですか。 サポートされるエンコーディングは、Java プラットフォームの実装によって異なります。Sun の JRE でサポートされるエンコーディングについては、J2SE 5.0、J2SE 1.4.2、および J2SE 1.3.1 の「サポートされているロケール」または「サポートするロケール」に記載されています。 ほ かのソフトウェアと通信する場合、どの文字エンコーディングを使ったらよいでしょうか。 通信するソフトウェアの種類や、テキストを記述する言語によって異なります。状況が許すならば、次のような理由で、UTF-8 の利用をお勧めします。
以下に、UTF-8 を使用できないケースを紹介します。
UTF-8 は、Unicode (または UCS) Transformation Format の 8 ビットエンコード形式を表します。Unicode の 8 ビットコード単位の伝送形式です。 デフォルトエンコーディングは、ホストオペレーティングシステムおよびそのロケールに基づく JRE により選択されます。たとえば、Windows の US ロケールでは、windows-1252 が使用されます。Solaris の簡体字中国語ロケールでは、Solaris へのログイン時の選択に基づき、GB2312、GBK、GB18030、UTF-8 のいずれかがデフォルトエンコーディングになります。 デフォルトエンコーディングは、通常、JRE とホストオペレーティングシステム間でやりとりされるテキストに使用される、重要なエンコーディングです。 正確な相互変換を保証するために、デフォルトエンコーディングを、ホストオペレーティングシステムが使用 するエンコーディングに一致させる必要がありま す。 アプリケーションは、J2SE 5 から提供されている (new OutputStreamWriter(new ByteArrayOutputStream())).getEncoding() なぜ Solaris では一部の欧文文字を使用できないのですか。 文字エンコーディングの中には、一部の欧文文字 (たとえば「ß」や「é」) をサポートしないものが多数存在します。この問題は、Solaris C ロケールのユーザから多く寄せられています。Solaris や Linux では、JRE は、デフォルトエンコーディングを特定する際に nl_langinfo 関数を呼び出します。C ロケールでは、この関数の戻り値は 646 です。これは、デフォルトエンコーディングが US-ASCII であることを示しています。US-ASCII には、ISO-8859-1 の半分の文字数しか含まれません。つまり、よく使用される欧文文字の多くは除外されています。 欧文文字を使用したい場合、簡単な方法としては文字エンコーディングとして ISO-8859-1 を使用する Solaris en_US ロケールを使用します。ログイン画面で Solaris のロケールを設定する方法や、LC_ALL 環境変数を設定する方法があります。このほか、使用するすべてのインタフェースの文字エンコーディングを明示的に指定して、エンコーディング変換を実行さ せる方法もあります。 windows-1252 と ISO-8859-1 は同じものですか。 違います。windows-1252 には、0x80 から 0x9F の範囲の文字が追加されています。詳細は、Microsoft のドキュメントを参照してください。 J2SE 1.4 から提供されている
Input Method Framework とは何ですか。 Input Method Framework により、すべてのテキスト編集コンポーネントはインプットメソッドを通じて日本語、中国語、韓国語のテキスト入力を受け取ることができます。ユーザはイン プットメソッドにより、ごく少数のキーを使って、キーボードから多くの異なった文字を入力することができます。通常は、複数の文字のシーケンスを入力して から 1 つまたは複数の文字に変換します。仕様と例については、「Input Method Framework」を 参照してください。 ユーザが複数のインプットメソッドを利用できる場合があります。たとえば、複数の異なる言語のための インプットメソッドがある場合や、さまざまなタイプの入力を受け付けるインプットメソッドがある場合などです。この場合、ユーザは特定の言語に使うイン プットメソッドや、もっとも早く入力できるインプットメソッドを選択できます。 プログラムを使って、インプットメソッドを選択してアクティブにすることはできますか。 アプリケーションは、 アプリケーションは、 AWT コンポーネントと Swing (JFC) テキストコンポーネントでは、インプットメソッドが機能しますか。 『国際化の概要』の「Input Method Framework」を参照してください。
アプリケーションでフォ ントを選択する場合、どんな方法がありますか。 軽量コンポーネントを使用するアプリケーションは、次の 4 通りの方法でフォントを選択できます。
ピア AWT コンポーネントを使用するアプリケーションでは、論理フォント名のみ使用できます。 以下に概要を示します。
中国語、日本 語、または韓国語のフォントがインストールされているのに、アプリケーションでこれらの言語の文字が表示されないのはなぜですか。 アプリケーションからのフォントの選択方法によって異なります。上記を参照してください。
フォント構成ファ イルと font.properties ファイルについて教えてください。 フォント構成ファイルは、論理フォント名と物理フォントのマッピングに使用されます。Sun の JRE 5.0 より前のバージョンでは、フォント構成ファイルの代わりに font.properties ファイルが使用されていました。ホストオペレーティングシステムのバージョンに応じて、異なるマッピン グをサポートする複数のファイルが存在します。ファ イルの位置は、JRE のインストール先の lib ディレクトリです。 フォント構成ファイルと font.properties ファイルは実装に依存しています。Java プラットフォームの実装すべてでこのファイルが使用されるわけではありません。また、その内容と形式は実行環境およびリリースにより異なります。 論理 フォントのマッピングに物理フォントを追加する方法を教えてください。 論理フォントから物理フォントへのマッピングは実装に 依存しているため、複数の回答が存在します。Sun の JRE 5.0 では、JRE の lib/fonts/fallback ディレクトリにフォントをインストールする方法が一番簡単です。このディレクトリにインストールされたフォントは、すべての論理フォントの 2D レンダリング用フォールバックフォントとして追加されます。AWT では、場合によって、フォント構成ファイルを変更する必要がありま す。 詳細は、「Font Configuration Files」の Web ページを参照してください。Sun の以前のバージョンの JRE では、font.properties ファイルを編集する必要があります。詳細については、J2SE 1.4.2 および J2SE 1.3.1 の「font.properties ファイル」を参照してください。ただし、これらのファイルを編集すると JRE が変更される点、Sun は変更後の JRE をサポートしない点に注意してください。ほかの実装については、該当するドキュメントを参照してください。 Swing コンポーネントでは表示されるある文字が、ピア AWT コンポーネントでは表示されません。なぜですか。 Swing ユーザインタフェースコンポーネントが使用するテキストのレンダリング機構は、ピア
AWT コンポーネントが使用するレンダリング機構とは異なります。Swing コンポーネントは、 Solaris および Linux の J2SE 5.0 から提供されるようになった XAWT ツールキットのコンポーネントは、 Unicode フォントをインストールしましたが、アプリケーションですべての Unicode 文字を表示できません。なぜですか。 上記の「中国語/日本語/韓国語の場合」で説明したように、 原因は、Unicode フォントを使ってテキストが全く、または一部しかレンダリングされないことにあります。アプリケーションが物理フォント名を使っ て Unicode フォントを選択していても、すべての文字をレンダリングできない場合、その Unicode フォントが実はすべての Unicode 文字セットをカバーしていない可能性があります。あるフォントの提供するテーブルが Unicode 文字エンコーディングをサポートしているだけで、そのフォントが Unicode フォントと呼ばれる場合があります。 Sun の JRE がサポートするフォントについて教えてください。 J2SE 5.0 および J2SE 1.4.2 の「サポートされているフォント」を参照してください。 Sun の JRE で複数の言語を表示することはできますか。 簡単に言えば、それは可能です。詳しい説明としては、同時に表示する言語、およびアプリケーションで フォントを選択する方法を調査する必要があります。
Sun の JRE では、タイ語、ラオ語、ビルマ語、またはインド語派の文字体系のテキストレンダリングが可能ですか。 Sun の JRE では、バージョン 1.4 から、南アジアおよび東南アジア言語の文字のうちタイ文字とデヴァーナーガリ文字がサポートされるようになりました。サポート対象のすべての書き込みシス テムの一覧については、J2SE 5.0、J2SE 1.4.2 および J2SE 1.3.1 の「サポートするロケール」または「サポートされているロケール」を参照してください。 その他の書記体系のサポートは、今後のリリースで追加される可能性があります。
Sun の JRE では、どのユーザインタフェースを使ってコンポーネントの向きを設定しますか。 コンポーネントの向きのプロパティは、Swing コンポーネントとレイアウトマネージャでのみ考慮されます。ピア AWT コンポーネントでは考慮されません。このプロパティはホストオペレーティングシステムには依存しません。J2SE 5.0 および J2SE 1.4.2 でコンポーネントの向きをサポートするのは、以下のクラスです。
J2SE 1.3.1 では、上記の表に含まれるクラスのうち、コンポーネントの向きをサポートしないものがあります。該当するクラスは、 java.awt.GridBagLayout、javax.swing.BoxLayout、javax.swing.JColorChooser、 javax.swing.JComboBox、javax.swing.JFileChooser、javax.swing.JOptionPane です。
JSP ベースのアプリケーションを使用しています。応答文字エンコーディングを設定しても変更されてしまうのはなぜですか。 Web アプリケーションで応答文字エンコーディング (コンテンツ形式の charset の値に対応) を設定しても、ブラウザに送信される Web ページのエンコーディングが異なる場合があります。これは、Servlet 2.3 ベースのコンテナと JavaServer Pages Standard Tag Library を同時に使用する場合に起こりうる問題です。以下に、イベントの順序を示します。
Servlet 2.4
仕様では、明示的な文字エンコーディングの指定と暗黙的な文字エンコーディングの指定が区別されるようになったため、この問題は解決されました。明示的な
文字エンコーディングの指定とは、コンテンツ形式や新しいメソッド アプリケーションに以前の仕様に準拠したコンテナとの互換性を持たせる必要がある場合は、明示的に文字エンコーディングを指定したあと、文字エン
コーディングを暗黙的に決定するようなカスタムアクションを実行する前に、 JSP ベースのアプリケーションの国際化について詳しく学べる参考資料を教えてください。 注意するべき事柄の多くは、『Designing Enterprise Applications with the J2EE Platform』の「Internationalization and Localization」の章と、「JavaServer Pages 技術による多言語 Web アプリケーションの開発」という記 事に紹介されています。
|
Getting Started? | |||||||||||||||||||||||
Oracle is reviewing the Sun product roadmap and will provide guidance to customers in accordance with Oracle's standard product communication policies. Any resulting features and timing of release of such features as determined by Oracle's review of roadmaps, are at the sole discretion of Oracle. All product roadmap information, whether communicated by Sun Microsystems or by Oracle, does not represent a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. It is intended for information purposes only, and may not be incorporated into any contract.
|
| ||||||||||||