Java

国際化
国際化についての 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 でサポートされるロケールについては、「サポートされているロケール」 についてのドキュメントを参照してください。

Java アプリケーションでは複数のロケールを使用できますか。

できます。 この機能により、多言語対応のアプリケーションを作成することができます。


リソースバンドル

リソースバンドルとは何ですか。

ResourceBundle オブジェクトにより、アプリケーションの地域対応できる要素を他の要素から分離させることができます。すべてのリソースをバンドルに分ければ、アプリケーションは実際に使用するロケールに適したバンドルをロードするだけで済みます。ユーザがロケールを切り替えた場合は、アプリケーションは別のバンドルをロードします。

ResourceBundle オブジェクトを使ったコード例はどこにありますか。

Java チュートリアル「Isolating Locale-Specific Data」を参照してください。

プロパティファイルに ASCII 以外の文字列を指定する方法を教えてください。

任意の Unicode 文字を、\uXXXX という表記によって指定できます (XXXX は、文字の Unicode 値を構成する 4 桁の 16 進数を表す)。たとえば、プロパティファイルに、次のエントリを入力できます。

s1=hello there
s2=\uff2d\uff33\u30b4

ファイルを ASCII コード以外で編集して保存した場合には、native2ascii ツールを使って ASCII コードに変換することができます。 たとえば、一般的な日本語のコードであるシフト JIS を使ってプロパティファイルを編集する場合には、この操作が必要になります。

ASCII 以外の ListResourceBundle をコンパイルする方法を教えてください。

ソースファイルが ASCII 以外のコードで記述されている場合は、Unicode に変換するようコンパイラに指示します。 たとえば、一般的な日本語コードであるシフト JIS で記述された日本語のリソースバンドルをコンパイルするには、次のようにします。

javac -encoding SJIS LabelsResource_ja.java


テキスト処理

日付の書式設定の方法を教えてください。

ロケールに依存する形式で書かれている日付の書式設定と文法解析には、SimpleDateFormat を使用します。Java チュートリアル「Dates and Times」の書式設定を参照してください。

デフォルトのロケールを設定すると、ソートの結果にどのように影響しますか。

ソートルーチンの構築には、Collator クラスとそのサブクラスが使用されます。これらのクラスはロケールに依存し、引数なしのコンストラクタで作成された場合には、デフォルトロケールの照合シーケンスを使用します。

Collator オブジェクトは、さまざまなレベルの decomposition および strength プロパティをサポートします。あるロケールで、適切な decomposition と strength を選択する方法を教えてください。

複合語の解析には時間がかかるため、decomposition をオフにすると、比較が高速になります。ただし、ラテン系の言語では、テキストにアクセント記号が含まれている場合には NO_DECOMPOSITION モードは役に立ちません。明確な目的がない限り、デフォルトの decomposition を使用してください。

strength プロパティの選択は、アプリケーションの目的によって異なります。たとえば、テキスト検索を行うときに、大文字と小文字の区別およびアクセントを無視する、「弱い」マッチングを許可する場合があります。このタイプの検索では、PRIMARY の strength を採用します。単語のリストをソートする場合には、strength に TERTIARY を使うことがあります。このモードでは、ベースの文字、アクセント、大文字と小文字の区別が一致する必要があります。


文字エンコーディング

文字エンコーディングとは何ですか。

文字エンコーディングとは、文字とコード値の間の割り当てです。

Unicode とは何ですか。

Java プログラミング言語では、char 値は Unicode の値を表します。Unicode は世界の主要言語をサポートする 16 ビットの文字エンコーディングです。Unicode 標準の詳細については、Unicode Consortium の Web サイトを参照してください。

Unicode と他の文字エンコーディング間でデータを変換する方法を教えてください。

アプリケーションの内部で変換を行う方法は、Java チュートリアル「Converting Non-Unicode Text」に説明されています。 データファイルを変換するには、 native2ascii ツールを使用します。

Unicode との間での変換がサポートされている文字エンコーディングは何ですか。

「サポートされているエンコーディング」を参照してください。

独自の文字変換プログラムの作成方法を教えてください。

現在のところ、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 エンコーディングとは何ですか。

UTF-8 は、Universal Transformation Format の 8 ビットエンコード形式を表します。 これは、さまざまなネットワークプロトコルや UNIX ファイルシステムでの使用に適した、Unicode の伝送フォーマットです。

Cp1252 エンコーディングと ISO8859_1 エンコーディングは同一ですか。

違います。 Cp1252 には、0x80 から 0x9F の範囲の文字が追加されています。 詳細は、「Microsoft documentation」を参照してください。


テキスト入力

Input Method Framework とは何ですか。

Input Method Framework により、すべてのテキスト編集コンポーネントはインプットメソッドを通じて日本語、中国語、韓国語のテキスト入力を受け取ることができます。ユーザはインプットメソッドにより、ごく少数のキーを使って、キーボードから多くの異なった文字を入力することができます。通常は、複数の文字のシーケンスを入力してから 1 つまたは複数の文字に変換します。仕様と例については、「Input Method Framework」を参照してください。

「インプットメソッドを切り替える」とはどういう意味ですか。

ユーザが複数のインプットメソッドを利用できる場合があります。たとえば、複数の異なる言語のためのインプットメソッドがある場合や、さまざまなタイプの入力を受け取るインプットメソッドがある場合などです。 この場合、ユーザは特定の言語に使うインプットメソッドや、もっとも早く入力できるインプットメソッドを選択できます。

プログラムを使って、インプットメソッドを選択してアクティブにすることはできますか。

アプリケーションは、InputContext.selectInputMethod メソッドを使って、特定のロケールをサポートする入力メソッドを要求できますが、特定の入力メソッドを選択することはできません。選択を行えるのはユーザだけです。

アプリケーションは、InputContext.setCompositionEnabled メソッドを使って入力メソッドをアクティブにできます。

AWT コンポーネントと Swing (JFC) テキストコンポーネントでは、インプットメソッドが機能しますか。

「Java 2 SDK 国際化の概要」「Input Method Framework」を参照してください。


テキストのレンダリング

アプリケーションでフォントを選択する場合、どんな方法がありますか。

アプリケーションは、次の 3 通りの方法でフォントを選択できます。

これら 3 通りの選択方法の利点と欠点を教えてください。

以下に概要を示します。

中国語、日本語、または韓国語のフォントがインストールされているのに、アプリケーションでこれらの言語の文字が表示されないのはなぜですか。

アプリケーションからのフォントの選択方法によって異なります。上記を参照してください。

font.properties ファイルとは何ですか。

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 ユーザインタフェースコンポーネントが使用するレンダリング機構は、ピア AWT コンポーネントが使用するレンダリング機構とは異なります。 Swing コンポーネントは、Graphics.drawString メソッドを使用します。このメソッドでは、一般に論理フォント名が指定されます。 次に論理フォント名から物理フォントセットへのマップが実行されて、広範囲の文字がカバーされます。 一方、AWT コンポーネントは、ホストオペレーティングシステムのコンポーネントを使って実装されます。 ホストオペレーティングシステムのコンポーネントでは、Unicode がサポートされていないことがよくあります。このため、ホストオペレーティングシステムおよびロケールに基づき、テキストが別の文字エンコーディングに変換されます。 これらのエンコーディングでは、論理フォント名の実装に使用される物理フォントに比べて、カバーする文字範囲が狭くなることがよくあります。 たとえば、日本語 Windows システムでは、アクセント記号付きの文字の多くは Swing コンポーネントでは Arial フォントにマッピングされますが、テキストをピア AWT コンポーネント用のシフト JIS エンコーディングに変換すると、これらの文字は失われてしまいます。

Unicode フォントをインストールしましたが、アプリケーションですべての Unicode 文字を表示できません。なぜですか。

上記の「中国語/日本語/韓国語の場合」で説明したように、原因は、Unicode フォントを使ってテキストが全く、または一部しかレンダリングされないことにあります。 アプリケーションが物理フォント名を使って Unicode フォントを選択していても、すべての文字をレンダリングできない場合、その Unicode フォントが実はすべての Unicode 文字セットをカバーしていない可能性があります。あるフォントの提供するテーブルが Unicode 文字エンコーディングをサポートしているだけで、そのフォントが Unicode フォントと呼ばれる場合があります。

Sun の Java 2 Runtime Environment がサポートするフォントにはどのようなものがありますか。

Sun の Windows 版 Java 2 Runtime Environment は、TrueType および Type1 フォントをサポートします。 Solaris 用 Java 2 Runtime Environment では、X11 サーバで処理できる F3、Type1、TrueType などのアウトラインフォントをサポートしています。

Sun の Java 2 Runtime Environment で複数の言語を表示することはできますか。

簡単に言えば、それは可能です。 詳しい説明としては、同時に表示する言語、およびアプリケーションでフォントを選択する方法を調査する必要があります。

Sun の Java 2 Runtime Environment では、タイ語、ラオ語、ビルマ語、またはインド語派のスクリプトのテキストレンダリングが可能ですか。

いいえ。現在のところ、Java 2 Runtime Environment のフォントレンダリングシステムは、これらのスクリプトの複雑なレイアウト規則をサポートしていません。 将来のリリースでタイ語およびヒンディー語のサポートを追加するための作業が進行中です。 また、これらのスクリプトをサポートする他の Java 2 Runtime Environment が存在する可能性もあります。

繁体字中国語で疑問符や判読不能なテキストが表示されるのはなぜですか。

Sun の Java 2 SDK および Runtime Environment バージョン 1.3 の Windows 版では、繁体字中国語に関係した 2 つの重大なバグが存在します。

これらのバグおよびその現状については、Java Bug Parade でバグ ID 4339627 および 4346273 を参照してください。


コンポーネントの向き

Sun の Java 2 Runtime Environment で、コンポーネントの向きを実装しているのはどのユーザインタフェースコンポーネントですか。

次の表に、コンポーネントの向きの設定 (左から右および右から左) がどちらの場合にも適切に処理する Swing コンポーネントおよび AWT レイアウトマネージャを示します。

アプレット
ボタン
ボーダ
ボーダファクトリ
チェックボックス
チェックボックスのメニュー項目
デスクトップ
編集ペイン
フレーム
内部フレーム
JDialog
ラベル
階層ペイン

リストボックス
メニュー
メニューバー
メニュー項目
パネル
パスワードフィールド
ポップアップメニュー
進捗バー
進捗モニター
ラジオボタン
ラジオボタンのメニュー項目
ルートペイン
スクロールペイン

スライダ
タブ付きペイン
テキスト領域
テキストフィールド
テキストペイン
トグルボタン
ツールバー
ツールヒント
ツリー

BorderLayout (AWT)
FlowLayout (AWT)

次の表に、コンポーネントの向きの設定を適切に処理しない Swing コンポーネントおよび AWT レイアウトマネージャを示します。

ボックスレイアウト
カラーチューザ
コンボボックス
ファイルチューザ

オプションペイン
分割ペイン
TablesBox


その他

Sun の Java 2 Runtime Environment はユーロ通貨をサポートしていますか。

サポートしています。Sun の Java 2 Runtime Environment では、ユーロ文字の入力、レンダリング、さまざまな文字エンコーディングへの変換が可能です。また、数値を通貨に変換する際にユーロ文字を使用することもできます。 テキストを入力およびレンダリングする場合、ホストオペレーティングシステムの適切なサポートが必要です。詳細は、Windows のドキュメントおよび Solaris のドキュメント (「一般的な情報」 および 「パッチ」) を参照してください。 書式を設定する場合、必要な操作は "EURO" 拡張を使ってロケールを要求するだけです。


Copyright © 1996-2000 Sun Microsystems, Inc.All Rights Reserved.

Sun
Java ソフトウェア