1 国際化の拡張機能

JDKの最近のリリースでは、国際化プロセスに拡張機能が追加され、最新標準に対応しています。

JDK 11における国際化の拡張機能

JDK 11における国際化の拡張機能には、次のものがあります。

Unicode 10.0.0

Unicode 10.0.0のためのサポートが追加されています。Java Platform, Standard Edition (Java SE) 9および10ではUnicode 8.0をサポートしていました。

Unicode 10.0標準には、Unicode 8.0以降で導入された16,018文字と10スクリプトが含まれており、これらのすべてがJava SE 11でサポートされています。

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における国際化の拡張機能

Oracle Java Development Kit 9の国際化の拡張機能には、次のものがあります。

Unicode 8.0

Unicode 8.0のためのサポートが追加されています。Java Platform, Standard Edition (Java SE) 8ではUnicode 6.2をサポートしていました。

Unicode 6.37.0および8.0標準では、10,555文字、29スクリプトおよび42ブロックを導入し、これらのすべてがJava SE 9でサポートされています。

デフォルトで有効になっているCLDRロケール・データ

最初にJDK 8に追加されたUnicode Common Locale Data Repository (CLDR)のXMLベースのロケール・データが、JDK 9でのデフォルトのロケール・データです。以前のリリースでは、デフォルトはJREでした。

ロケール・データには、次のキーワードで識別される異なる4つのソースがあります。

  • CLDRは、Unicode CLDRプロジェクトから提供されるロケール・データを表します。

  • HOSTは、基盤となるオペレーティング・システムの設定に対する現在のユーザーによるカスタマイズを表します。これはそのユーザーのデフォルト・ロケールでのみ機能します。カスタマイズ可能な設定はオペレーティング・システムによって異なる場合があります。ただし、主に日付、時間、数値および通貨の書式がサポートされます。

  • SPIは、インストール済サービス・プロバイダ・インタフェース(SPI)・プロバイダによって実装された、ロケールに依存するサービスを表します。

  • COMPAT(旧称JRE)は、JDK 9より前のリリースと互換性のあるロケール・データを表します。JREを値として使用できますが、COMPATの方がより適切です。

ロケール・データ・ソースを選択するには、java.locale.providersシステム・プロパティを使用して、データ・ソースを優先順に並べます。プロバイダがリクエストされたロケール・データを提供できない場合、検索は順に次のプロバイダに進みます。たとえば:

java.locale.providers=HOST,SPI,CLDR,COMPAT

このプロパティを設定しない場合、デフォルトの動作は次の設定と同等です。

java.locale.providers=CLDR,COMPAT,SPI

JDK 8と互換性のある動作を有効にするには、java.locale.providersシステム・プロパティをCLDRの左にCOMPATの値に設定します。

サポートされているロケールについては、JDK 9およびJRE 9でサポートされるロケールに関するページを参照してください。関連するAPIについてはjava.util.spi.LocaleServiceProvider API仕様に関する項を参照してください。

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