6 国際化の拡張機能
JDKの最近のリリースでは、国際化プロセスに拡張機能が追加され、最新標準に対応しています。
JDK 10における国際化の拡張機能
JDK 10における国際化の拡張機能には、次のものがあります。
追加のUnicode言語タグ拡張
Java SE 7以降のロケール・クラスでサポートされているIETF BCP (現在のベスト・プラクティス) 47言語タグ標準には、Unicode拡張サブタグが含まれています。Java SE 9では、-ca (カレンダ)および-nu (数値)拡張のみがサポートされます。
Java SE 10では、関連するJDKクラスで次の追加の拡張のサポートが追加されています。
-
-cu(通貨タイプ) -
-fw(週の最初の日) -
-rg(リージョン・オーバーライド) -
-tz(タイム・ゾーン)
JDK 10以降では、アプリケーションがロケールen-US-u-cu-EUR (米国英語とユーロ通貨)を指定した場合、java.util.Currency.getInstance(locale)によってユーロのCurrencyがインスタンス化されます。ロケールがen-US-u-cu-JPYの場合は、日本円のCurrencyがインスタンス化されます。
JDK 9における国際化の拡張機能
JDK 9における国際化の拡張機能には、次のものがあります。
Unicode 8.0
Unicode 8.0のためのサポートが追加されています。Java SE 8ではUnicode 6.2がサポートされていました。
Unicode 6.3、7.0および8.0標準では、10,555文字、29スクリプトおよび42ブロックを導入し、これらのすべてがJava SE 9でサポートされています。
デフォルトで有効になっているCLDRロケール・データ
最初にJDK 8に追加されたUnicode Common Locale Data Repository (CLDR)のXMLベースのロケール・データが、JDK 9以降でのデフォルトのロケール・データです。
ロケール・データには、次のキーワードで識別される異なる4つのソースがあります。
-
CLDRは、Unicode CLDRプロジェクトから提供されるロケール・データを表します。 -
HOSTは、基盤となるオペレーティング・システムの設定に対する現在のユーザーによるカスタマイズを表します。これはそのユーザーのデフォルト・ロケールでのみ機能します。カスタマイズ可能な設定はオペレーティング・システムによって異なる場合があります。ただし、主に日付、時間、数値および通貨の書式がサポートされます。 -
SPIは、インストール済サービス・プロバイダ・インタフェース(SPI)・プロバイダによって実装された、ロケールに依存するサービスを表します。 -
COMPATは、JDK 9より前のリリースと互換性のあるロケール・データを表します。
ロケール・データ・ソースを選択するには、java.locale.providersシステム・プロパティを使用して、データ・ソースを優先順に並べます。プロバイダがリクエストされたロケール・データを提供できない場合、検索は順に次のプロバイダに進みます。次に例を示します。
java.locale.providers=HOST,SPI,CLDR,COMPATこのプロパティを設定しない場合、デフォルトの動作は次の設定と同等です。
java.locale.providers=CLDR,COMPAT,SPIJDK 8と互換性のある動作を有効にするには、java.locale.providersシステム・プロパティをCLDRの左にCOMPATの値に設定します。
サポートされるロケールについては、Oracleの技術リソース・ページの検索フィールドを使用し、「サポートされるロケール」を検索してください。関連するAPIについては、java.util.api.LocaleServiceProviderに関する項を参照してください。
UTF-8プロパティ・ファイル
Java SE 9以降では、プロパティ・ファイルはUTF-8エンコーディングでロードされます。以前のリリースでは、ISO-8859-1エンコーディングがプロパティ・リソース・バンドルのロードに使用されました。UTF-8は、非Latin文字の表現により適した方法です。
ほとんどの既存のプロパティ・ファイルは影響を受けません。UTF-8およびISO-8859-1はASCII文字に対してエンコーディングが同じであり、人間が判読可能な非ASCII ISO-8859-1エンコーディングは有効なUTF-8ではありません。無効なUTF-8バイト・シーケンスが検出された場合、Javaランタイムではファイルを自動的にISO-8859-1で再読込みします。
-
プロパティ・ファイルをUTF-8エンコーディングに変換する。
-
プロパティ・ファイルのエンコーディングに対して、ランタイム・システム・プロパティを次の例のように指定する。
java.util.PropertyResourceBundle.encoding=ISO-8859-1
java.util.PropertyResourceBundleに関する項を参照してください。