|
国際化についての FAQ |
|
このページでは、Java 2 プラットフォーム, Standard Edition, バージョン 1.3 および Sun の Java 2 Runtime Environment, Standard Edition, バージョン 1.3 の国際化に関する一般的な質問に答えています。 詳細については、「国際化」を参照してください。
国際化により、ソフトウェアを任意の言語と文化的慣習に適応させることができます。国際化のプロセスにおいてプログラマは、プログラム内で言語と文化に依存する部分を分離させます。たとえば、プログラマがエラーメッセージを分離させるのは、地域対応の際にエラーメッセージは翻訳する必要があるためです。
地域対応とは、特定のロケールで使用するために、プログラムを適応させるプロセスです。ロケールとは、同じ言語と習慣を共有する地理的または政治的な領域のことです。地域対応には、GUI ラベル、エラーメッセージ、オンラインヘルプなどの翻訳が含まれます。地域対応には、通貨や時間、日付や数値など、そのロケールの文化によって異なるデータ項目の書式設定も含まれます。
Java チュートリアルの「Checklist」で解説されている手順を参照してください。
ロケールとは、同じ言語と習慣を共有する地理的または政治的な領域のことです。Java プログラミング言語では、ロケールは、Locale
オブジェクトによって表されます。 照合、データ書式設定などロケールに依存する操作は、ロケールによって異なります。
Locale
オブジェクトを使ったコード例はどこにありますか。Java チュートリアルの 「Setting the Locale」を参照してください。
サポートされるロケールは、Java 2 プラットフォームの実装により、また機能範囲により異なります。 Sun の Java 2 Runtime Environment でサポートされるロケールについては、「サポートされているロケール」 についてのドキュメントを参照してください。
できます。 この機能により、多言語対応のアプリケーションを作成することができます。
ResourceBundle
オブジェクトにより、アプリケーションの地域対応できる要素を他の要素から分離させることができます。すべてのリソースをバンドルに分ければ、アプリケーションは実際に使用するロケールに適したバンドルをロードするだけで済みます。ユーザがロケールを切り替えた場合は、アプリケーションは別のバンドルをロードします。
ResourceBundle
オブジェクトを使ったコード例はどこにありますか。Java チュートリアルの「Isolating Locale-Specific Data」を参照してください。
任意の Unicode 文字を、\uXXXX という表記によって指定できます (XXXX は、文字の Unicode 値を構成する 4 桁の 16 進数を表す)。たとえば、プロパティファイルに、次のエントリを入力できます。
s1=hello there s2=\uff2d\uff33\u30b4
ファイルを ASCII コード以外で編集して保存した場合には、native2ascii ツールを使って ASCII コードに変換することができます。 たとえば、一般的な日本語のコードであるシフト JIS を使ってプロパティファイルを編集する場合には、この操作が必要になります。
ListResourceBundle
をコンパイルする方法を教えてください。
ソースファイルが ASCII 以外のコードで記述されている場合は、Unicode に変換するようコンパイラに指示します。 たとえば、一般的な日本語コードであるシフト JIS で記述された日本語のリソースバンドルをコンパイルするには、次のようにします。
javac -encoding SJIS LabelsResource_ja.java
ロケールに依存する形式で書かれている日付の書式設定と文法解析には、SimpleDateFormat
を使用します。Java チュートリアルの「Dates and Times」の書式設定を参照してください。
ソートルーチンの構築には、Collator
クラスとそのサブクラスが使用されます。これらのクラスはロケールに依存し、引数なしのコンストラクタで作成された場合には、デフォルトロケールの照合シーケンスを使用します。
複合語の解析には時間がかかるため、decomposition をオフにすると、比較が高速になります。ただし、ラテン系の言語では、テキストにアクセント記号が含まれている場合には NO_DECOMPOSITION
モードは役に立ちません。明確な目的がない限り、デフォルトの decomposition を使用してください。
strength プロパティの選択は、アプリケーションの目的によって異なります。たとえば、テキスト検索を行うときに、大文字と小文字の区別およびアクセントを無視する、「弱い」マッチングを許可する場合があります。このタイプの検索では、PRIMARY
の strength を採用します。単語のリストをソートする場合には、strength に TERTIARY
を使うことがあります。このモードでは、ベースの文字、アクセント、大文字と小文字の区別が一致する必要があります。
文字エンコーディングとは、文字とコード値の間の割り当てです。
Java プログラミング言語では、char
値は Unicode の値を表します。Unicode は世界の主要言語をサポートする 16 ビットの文字エンコーディングです。Unicode 標準の詳細については、Unicode Consortium の Web サイトを参照してください。
アプリケーションの内部で変換を行う方法は、Java チュートリアルの「Converting Non-Unicode Text」に説明されています。 データファイルを変換するには、 native2ascii ツールを使用します。
「サポートされているエンコーディング」を参照してください。
現在のところ、Java 2 プラットフォームは、アプリケーション開発者による独自の文字変換プログラムの作成を可能にする public インタフェースを提供していません。 そのような public インタフェースを 新規入出力 API の一部として定義するプロジェクトが進行中です。 独自の Java 2 Runtime Environment を作成するライセンス契約者は、sun.io パッケージの内部インタフェースを使って、独自の文字変換プログラムを作成できます。
デフォルトエンコーディングは、ホストオペレーティングシステムおよびそのロケールに基づく Java Runtime により選択されます。 たとえば、Windows の US ロケールでは、Cp1252 が使用されます。 Solaris の簡体字中国語ロケールでは、Solaris へのログイン時の選択に基づき、EUC_CN または GBK のいずれかがデフォルトエンコーディングになります。
Java プログラミング言語では文字の表現に Unicode を使用しますが、ホストオペレーティングシステムのファイルシステムでは通常別のエンコーディングを使用するため、デフォルトエンコーディングは重要です。 適切なやり取りを保証するために、デフォルトエンコーディングを、ホストオペレーティングシステムが使用するエンコーディングに一致させる必要があります。
UTF-8 は、Universal Transformation Format の 8 ビットエンコード形式を表します。 これは、さまざまなネットワークプロトコルや UNIX ファイルシステムでの使用に適した、Unicode の伝送フォーマットです。
違います。 Cp1252 には、0x80 から 0x9F の範囲の文字が追加されています。 詳細は、「Microsoft documentation」を参照してください。
Input Method Framework により、すべてのテキスト編集コンポーネントはインプットメソッドを通じて日本語、中国語、韓国語のテキスト入力を受け取ることができます。ユーザはインプットメソッドにより、ごく少数のキーを使って、キーボードから多くの異なった文字を入力することができます。通常は、複数の文字のシーケンスを入力してから 1 つまたは複数の文字に変換します。仕様と例については、「Input Method Framework」を参照してください。
ユーザが複数のインプットメソッドを利用できる場合があります。たとえば、複数の異なる言語のためのインプットメソッドがある場合や、さまざまなタイプの入力を受け取るインプットメソッドがある場合などです。 この場合、ユーザは特定の言語に使うインプットメソッドや、もっとも早く入力できるインプットメソッドを選択できます。
アプリケーションは、InputContext.selectInputMethod メソッドを使って、特定のロケールをサポートする入力メソッドを要求できますが、特定の入力メソッドを選択することはできません。選択を行えるのはユーザだけです。
アプリケーションは、InputContext.setCompositionEnabled メソッドを使って入力メソッドをアクティブにできます。
「Java 2 SDK 国際化の概要」の「Input Method Framework」を参照してください。
アプリケーションは、次の 3 通りの方法でフォントを選択できます。
以下に概要を示します。
アプリケーションからのフォントの選択方法によって異なります。上記を参照してください。
Sun の Java 2 Runtime Environment では、論理フォント名から物理フォントへのマッピングに font.properties ファイルが使用されます。 ホストオペレーティングシステムのバージョンおよびロケールに基づき、異なるマッピングをサポートする複数のファイルが存在します。 ファイルの位置は、J2RE のインストール先の lib ディレクトリです。
font.properties ファイルは実装に依存しています。 Java 2 プラットフォームの実装すべてでこのファイルが使用されるわけではありません。また、その内容と形式は実行環境およびリリースにより異なります。
論理フォントから物理フォントへのマッピングは実装に依存しているため、複数の回答が存在します。 Sun の Java 2 Runtime Environment では、font.properties ファイルを作成または変更する必要があります。Web ページ「font.properties ファイルの編集」を参照してください。 ただし、この操作により J2RE が変更されますが、Sun は変更後の J2RE をサポートしないことに留意してください。 他の実装については、該当するドキュメントを参照してください。
Swing ユーザインタフェースコンポーネントが使用するレンダリング機構は、ピア AWT コンポーネントが使用するレンダリング機構とは異なります。 Swing コンポーネントは、Graphics.drawString メソッドを使用します。このメソッドでは、一般に論理フォント名が指定されます。 次に論理フォント名から物理フォントセットへのマップが実行されて、広範囲の文字がカバーされます。 一方、AWT コンポーネントは、ホストオペレーティングシステムのコンポーネントを使って実装されます。 ホストオペレーティングシステムのコンポーネントでは、Unicode がサポートされていないことがよくあります。このため、ホストオペレーティングシステムおよびロケールに基づき、テキストが別の文字エンコーディングに変換されます。 これらのエンコーディングでは、論理フォント名の実装に使用される物理フォントに比べて、カバーする文字範囲が狭くなることがよくあります。 たとえば、日本語 Windows システムでは、アクセント記号付きの文字の多くは Swing コンポーネントでは Arial フォントにマッピングされますが、テキストをピア AWT コンポーネント用のシフト JIS エンコーディングに変換すると、これらの文字は失われてしまいます。
上記の「中国語/日本語/韓国語の場合」で説明したように、原因は、Unicode フォントを使ってテキストが全く、または一部しかレンダリングされないことにあります。 アプリケーションが物理フォント名を使って Unicode フォントを選択していても、すべての文字をレンダリングできない場合、その Unicode フォントが実はすべての Unicode 文字セットをカバーしていない可能性があります。あるフォントの提供するテーブルが Unicode 文字エンコーディングをサポートしているだけで、そのフォントが Unicode フォントと呼ばれる場合があります。
Sun の Windows 版 Java 2 Runtime Environment は、TrueType および Type1 フォントをサポートします。 Solaris 用 Java 2 Runtime Environment では、X11 サーバで処理できる F3、Type1、TrueType などのアウトラインフォントをサポートしています。
簡単に言えば、それは可能です。 詳しい説明としては、同時に表示する言語、およびアプリケーションでフォントを選択する方法を調査する必要があります。
いいえ。現在のところ、Java 2 Runtime Environment のフォントレンダリングシステムは、これらのスクリプトの複雑なレイアウト規則をサポートしていません。 将来のリリースでタイ語およびヒンディー語のサポートを追加するための作業が進行中です。 また、これらのスクリプトをサポートする他の Java 2 Runtime Environment が存在する可能性もあります。
Sun の Java 2 SDK および Runtime Environment バージョン 1.3 の Windows 版では、繁体字中国語に関係した 2 つの重大なバグが存在します。
これらのバグおよびその現状については、Java Bug Parade でバグ ID 4339627 および 4346273 を参照してください。
次の表に、コンポーネントの向きの設定 (左から右および右から左) がどちらの場合にも適切に処理する Swing コンポーネントおよび AWT レイアウトマネージャを示します。
アプレット |
リストボックス |
スライダ BorderLayout (AWT) |
次の表に、コンポーネントの向きの設定を適切に処理しない Swing コンポーネントおよび AWT レイアウトマネージャを示します。
ボックスレイアウト |
オプションペイン |
サポートしています。Sun の Java 2 Runtime Environment では、ユーロ文字の入力、レンダリング、さまざまな文字エンコーディングへの変換が可能です。また、数値を通貨に変換する際にユーロ文字を使用することもできます。 テキストを入力およびレンダリングする場合、ホストオペレーティングシステムの適切なサポートが必要です。詳細は、Windows のドキュメントおよび Solaris のドキュメント (「一般的な情報」 および 「パッチ」) を参照してください。 書式を設定する場合、必要な操作は "EURO" 拡張を使ってロケールを要求するだけです。
Copyright © 1996-2000 Sun Microsystems, Inc.All Rights Reserved. |
|