JavaTM Platform
Standard Ed. 6

java.util.spi
クラス LocaleServiceProvider

java.lang.Object
  上位を拡張 java.util.spi.LocaleServiceProvider
直系の既知のサブクラス:
BreakIteratorProvider, CollatorProvider, CurrencyNameProvider, DateFormatProvider, DateFormatSymbolsProvider, DecimalFormatSymbolsProvider, LocaleNameProvider, NumberFormatProvider, TimeZoneNameProvider

public abstract class LocaleServiceProvider
extends Object

これは、ロケールに依存するすべてのサービスプロバイダインタフェース (SPI) のスーパークラスです。  

ロケール依存サービスプロバイダインタフェースは、java.text および java.util パッケージ内のロケール依存クラスに対応するインタフェースです。これらのインタフェースを使えば、これらのパッケージでロケール依存オブジェクトを構築したりローカライズされた名前を取得したりできます。java.text および java.util パッケージ内のロケールに依存するファクトリメソッドや名前取得メソッドは、プロバイダインタフェースの実装を使用することで、Java 実行環境自体がサポートする一連のロケールに含まれないロケールをサポートします。  

ロケール依存サービスプロバイダ実装のパッケージ化

これらのロケール依存サービスの実装は、Java 拡張機能機構を使ってインストール型拡張機能としてパッケージ化されます。各プロバイダは、リソースディレクトリ META-INF/services 内のプロバイダ構成ファイルを使ってプロバイダ自体を識別しますが、その際、プロバイダインタフェースの完全修飾クラス名をファイル名として使用します。このファイルには、具象プロバイダクラスの完全修飾名が 1 行に 1 つずつ記述されます。行の終端は、改行 ('\n')、キャリッジリターン ('\r')、またはキャリッジリターンの直後に改行が続く組み合わせによって表されます。それぞれの名前を囲む空白文字とタブ文字、および空白行は無視されます。コメント文字は「#」(ハッシュ記号) です。各行では、最初のコメント文字以降の文字はすべて無視されます。このファイルは、UTF-8 方式で符号化する必要があります。 

特定の具象プロバイダクラスが複数の構成ファイル内、または同じ構成ファイル内で繰り返し指定されている場合、重複した指定は無視されます。特定のプロバイダを指定した構成ファイルを、プロバイダ自体と同じ JAR ファイル (またはその他の配布単位) 内に含める必要はありません。このプロバイダには、構成ファイルの検索時に最初に照会されたクラスローダーからアクセスできなければなりません。 なお、そのクラスローダーは、ファイルをロードしたクラスローダーと同一であるとは限りません。  

たとえば、DateFormatProvider クラスの実装は、次のファイルを含む JAR ファイルの形態をとるべきです。

META-INF/services/java.text.spi.DateFormatProvider 
 
そして、ファイル java.text.spi.DateFormatProvider には次のような行が含まれているべきです。
com.foo.DateFormatProviderImpl
 
これは、DateFormatProvider を実装するクラスの完全修飾クラス名です。

ロケール依存サービスの呼び出し

java.text および java.util パッケージ内のロケールに依存するファクトリメソッドや名前取得メソッドは、サービスプロバイダのメソッドを必要に応じて呼び出すことで、要求されたロケールをサポートします。それらのメソッドはまず、Java 実行環境自体が要求されたロケールをサポートするかどうかをチェックし、サポートが使用可能であればそのサポートを使用します。それ以外の場合、それらは、適切なインタフェースのインストール済みプロバイダの getAvailableLocales() メソッドを呼び出すことで、要求されたロケールをサポートするプロバイダを検索します。そのようなプロバイダが見つかった場合、そのプロバイダのその他のメソッドが呼び出され、要求されたオブジェクトまたは名前が取得されます。Java 実行環境自体、インストール済みプロバイダのどちらも要求されたロケールをサポートしない場合には、そのロケールのバリアント文字列、国文字列、言語文字列のうち、空文字列でない最初のものを空文字列で置き換えることでフォールバックロケールが構築され、検索処理が再開されます。バリアントに 1 つ以上の「_」が含まれている場合には、そのバリアントを、最後の「_」とそれに続く部分を除去した新しいバリアントで置き換えることで、フォールバックロケールが構築されます。フォールバックが実行される場合でも、そのフォールバックの前に、要求されたオブジェクトまたは名前を返すメソッドが元のロケールを指定して呼び出されます。この処理が必ず終了するためには、Java 実行環境がすべてのロケール依存サービスに対してルートロケールをサポートしなければいけません。  

名前のプロバイダ (その他のオブジェクトのプロバイダではない) は、getAvailableLocales の戻り値に含めることでサポートを宣言したロケールに対しても、一部の名前要求に null を返すことが許されています。同様に、Java 実行環境自体は、サポートするすべてのロケールのすべての名前を保持していなくてもかまいません。これは、名前の要求対象となるオブジェクト群が、規模が大きかったり時間の経過に従って変化したりする可能性があるため、それらを完全にカバーすることが常に実現可能とはかぎらないからです。Java 実行環境またはプロバイダが名前の代わりに null を返した場合、そのロケールがまるでサポートされていなかったかのように、上記で説明したとおりに検索処理が進みます。

導入されたバージョン:
1.6

コンストラクタの概要
protected LocaleServiceProvider()
          唯一のコンストラクタです。
 
メソッドの概要
abstract  Locale[] getAvailableLocales()
          このロケールサービスプロバイダがローカライズ済みのオブジェクトや名前を提供可能な、すべてのロケールを含む配列を返します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

LocaleServiceProvider

protected LocaleServiceProvider()
唯一のコンストラクタです。サブクラスのコンストラクタによる呼び出し用で、通常は暗黙的に呼び出されます。

メソッドの詳細

getAvailableLocales

public abstract Locale[] getAvailableLocales()
このロケールサービスプロバイダがローカライズ済みのオブジェクトや名前を提供可能な、すべてのロケールを含む配列を返します。

戻り値:
このロケールサービスプロバイダがローカライズ済みのオブジェクトや名前を提供可能な、すべてのロケールを含む配列

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。