国際化についての FAQ


このページでは、JDK ソフトウェアプラットフォームでの国際化に関する FAQ に回答しています。詳細は、JDK ソフトウェアの国際化のホームページを参照してください。

一般的な質問

国際化とは何ですか。

国際化により、ソフトウェアを任意の言語と文化的慣習に適応させることができます。国際化のプロセスにおいてプログラマは、プログラム内で言語と文化に依存する部分を分離させます。たとえば、プログラマがエラーメッセージを分離させるのは、地域対応の際にエラーメッセージは翻訳する必要があるためです。

地域対応とは何ですか。

地域対応とは、特定のロケールで使用するために、プログラムを適応させるプロセスです。ロケールとは、同じ言語と習慣を共有する地理的または政治的な領域のことです。地域対応には、GUI ラベル、エラーメッセージ、オンラインヘルプなどの翻訳が含まれます。地域対応には、通貨や時間、日付や数値など、そのロケールの文化によって異なるデータ項目の書式設定も含まれます。

既存のプログラムを国際化する方法を教えてください。

Java チュートリアル「Checklist」で解説されている手順を参照してください。

ロケール

ロケールとは何ですか。

ロケールとは、同じ言語と習慣を共有する地理的または政治的な領域のことです。Java プログラミング言語で、ロケールは Locale オブジェクトで表されます。ロケールに依存する動作 (照合やデータの形式など) は、Locale によって異なります。

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

Java チュートリアル「Setting the Locale」を参照してください。

どのロケールがサポートされていますか。

JDK ソフトウェアでサポートされているロケールのリストは、「サポートされているロケール」 にあります。JDK 以外のプラットフォームでは、サポートされるロケールはこれとは異なります。

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

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

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

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

リソースバンドル

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

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」の書式設定を参照してください。

Java アプリケーションのタイムゾーンが正しくありません。なぜでしょうか。

JDK ソフトウェアのリリース 1.1.6 のバグが原因です。このバグは、すでに修正されています。

フォント

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

font.properties ファイルは、Soloris や Win32 などのホストプラットフォームのフォントを Java の仮想フォントに割り当てます。このファイルは $JAVAHOME/lib ディレクトリにあります。

フォントを追加する方法を教えてください。

「Java Runtime へのフォントの追加」を参照してください。

TextField コンポーネントと TextArea コンポーネントで、特定の文字が表示されません。なぜですか。

適切なフォントがプラットフォームにインストールされていません。

Unicode フォントをインストールしたのですが、プログラムで表示されない Unicode 文字があります。何が問題なのでしょうか。

その文字が、フォントの中に入っていないと思われます。

JDK ソフトウェアは、Win32 と Solaris でどのタイプのフォントをサポートしていますか。

Win32 プラットフォーム用のリリースでは TrueType フォントをサポートしています。Solaris 用のリリースでは、X11 サーバで処理できる F3、Type1、TrueType などのアウトラインフォントをサポートしています。

Java Runtime Environment でサポートされているフォントのクラスを教えてください。

JDK ソフトウェアのバージョン 1.0 には、TimesRoman、Courier、Helvetica というフォント名が含まれていますが、これらは特殊なので適用できるロケールはそれほど多くありません。バージョン 1.1 でサポートされているフォントのクラスは、次のとおりです。

仮想フォント名とプラットフォームフォント名の違いを教えてください。

仮想フォント名は、Java Runtime Environment によって認識されるフォントの名前です。プラットフォームフォント名は、ホストプラットフォーム上の実際のフォント名です。たとえば、Dialog と Serif は仮想フォント名で、Times と Helvetica は Win32 または Solaris プラットフォーム上のプラットフォームフォント名です。

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

できます。多言語の表示を実装するには、font.properties ファイルに必要な変更を加え、言語に依存する font.properties.xx ファイルを削除します。詳細については、「Java Runtime へのフォントの追加」を参照してください。

Windows NT では Big5 コードの中国語フォントが正しく動作するのに、Windows 95 では動作しません。

Windows NT の内部コードは Unicode なので、Big5 フォントがインストールされていれば Unicode の中国語フォントをサポートします。しかし、Windows 95 は 8859-1 コードページに限定される ANSI コードページを使用しています。そのため、Windows 95 では TextArea コンポーネントで Big5 コードの文字は正しく動作しません。

Solaris 2.7 の CJK (中国語、日本語、韓国語) 環境でのデフォルトのフォントは何ですか。

デフォルトのフォントは、次の表のとおりです。

言語 (ロケール) 画面表示幅 フォントタイプフェース フォントサイズ フォントエンコーディング
韓国語 (ko) WIDTH > 1175  Round Gothic 18 (ポイント) ksc5601.1987-0 
韓国語 (ko) 850<WIDTH<1176 Round Gothic 16 (ポイント) ksc5601.1987-0 
韓国語 (ko) 851 > WIDTH  Round Gothic 14 (ポイント) ksc5601.1987-0 
韓国語 (ko.UTF-8) 851 > WIDTH  Round Gothic 14 (ポイント) ksc5601.1992-3 
日本語 (ja) > 1175  Gothic 16 (ポイント) jisx0201.1976-0
日本語 (ja) < 1176 Gothic 14 (ポイント) jisx0201.1976-0
T-中国語 (zh_TW) > 1175  Sung 18 (ポイント) cns11643-[1..16] 
T-中国語 (zh_TW) < 1176 Sung 16 (ポイント) cns11643-[1..16] 
T-中国語 (BIG5) > 1175  Ming 18 (ポイント) big5-1
T-中国語 (BIG5) < 1176 Ming 16 (ポイント) big5-1
S-中国語 (zh) > 1175  Song 16 (ポイント) gb2312.1980-0 
S-中国語 (zh) < 1176 Song 14 (ポイント) gb2312.1980-0 

文字エンコーディング

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

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

Unicode とは何ですか。

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

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

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

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

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

CharToByteConverter クラスが見つかりません。文字エンコーディングの変換には何を使用すれば良いでしょうか。

CharToByteConverter クラスは、sun.io パッケージだけで利用可能です。このパッケージを使うと、プログラムはプラットフォームに依存します。java.io パッケージにある InputStreamReader クラスと OutputStreamReader クラスを代わりに使ってみてください。

独自の変換プログラムを追加できますか。

できます。ただし、通常これはアプリケーションプログラマではなくライセンス実施権者が行います。これを行うには、ByteToCharConverter クラスと CharToByteConverter クラスを拡張する必要があります。「Java Runtime へのフォントの追加」の「文字セットコンバータ」を参照してください。

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

UTF8 は Universal Transformation Format 8 を表します。これは、Unix のファイルシステムで安全に Unicode を伝送するためのフォーマットです。

ファイルエンコーディングとは何ですか。

ファイルエンコーディングとは、ファイル内の文字データをコード化するために使用される基準です。ファイルエンコーディングを識別する文字列は、System クラスの file.encoding プロパティに保存されています。Java プログラミング言語では文字に Unicode を使用しますが、ホストプラットフォームのファイルシステムでは別のエンコーディングを使用する場合があるので、ファイルエンコーディングは重要です。プラットフォームとロケールによって使用されるエンコーディングは異なります。使用されるエンコーディングが file.encoding プロパティと一致する場合は、プログラマは、Unicode への文字データの変換内容を容易に把握できます。

JDK ソフトウェアのデフォルトのファイルエンコーディングは何ですか。

JDK 1.1.7 および 1.2.0 のデフォルトのファイルエンコーディングは、Win32 では CP1252、Solaris では ISO8859_1 です。

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

違います。CP1252 には、¥u0080 から ¥u009F の範囲の文字が追加されています。

インプットメソッド

Input Method Framework とは何ですか。

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

漢字と英字の入力モードの切り替え方法を教えてください。

Solaris:

Win32:

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

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

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

JDK のリリース 1.1 では、インプットメソッドはユーザのキー操作によってだけアクティブにすることができます。リリース 1.2 の FCS では、プログラムによるインプットメソッドのアクティブ化が可能です。

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

「JDK ソフトウェアの国際化の概要」「Input Method Framework」を参照してください。

その他

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

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

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

JDK ソフトウェアは、ユーロ通貨をサポートしていますか。

ユーロ通貨のサポートは、バージョン 1.2 の FCS で利用可能になる予定です。リリース 1.1 でのサポートの詳細については、Web ページ「EURO CURRENCY PROPOSAL FOR JDK 1.1.x」を参照してください。

更新日: 1998 年 10 月 5 日

Copyright © 1996, 1997, 1998 Sun Microsystems, Inc. All rights reserved.