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,SPI
JDK 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
に関する項を参照してください。