2011-01-17 17 views
7

Java 1.6で使用可能なロケールにさらにロケールを追加する方法を探しています。しかし、私が作成したいロケールには、ISO-3166の国コードやISO-639の言語コードはありません。とにかくこれを行う方法はありますか?私は小さな民族グループがされて唯一の言語名が異なる追加したい、しかし、より多くの好き嫌いは、彼らが自分のアイデンティティについての取得ロケール;-)利用可能なJavaロケールのリストを拡張する方法

は、だから私は、既存のロケールを拡張について

のようなものを考えました
UserDefinedLocale extends Locale { 
    UserDefinedLocale (Locale parentLocale) {...} 
} 

が、java.util.Localeのは、それが特に難しいの周りに何かをハックすることができた、最終的なもので...

ので、Javaのロケールのリストは網羅的であるという考えはありますか?もう少しロケールを逃すのは初めてですか?

答えて

1

this answerを参照してください:

を...あなたは(hereを説明した)のSPIを経由して、追加のロケールのサポートをプラグインすることができます。たとえば、新しいロケールの日付フォーマッタを提供するには、DateFormatProviderサービスを実装します。既存の実装をデコレートすることでこれを行うことができます。ICU4Jライブラリを参照して、必要なサポートが提供されているかどうかを確認してください。

+0

ありがとうございました。悲しいことに、すべてのユーザーを操作するJREは、私のアプリケーションのオプションではありません。 "ロケールセンシティブサービスSPIは標準Java拡張メカニズムに基づいているため、JARファイルとしてパッケージ化できます(マニフェストファイルでここにあります)、それを拡張ディレクトリに置きます。 – alfonx

4

java.util Localeのjavadocをお読みください。

それは言う: は「このクラスのコンストラクタを使用してロケールオブジェクトを作成します。」

をまた言う: を「Localeオブジェクトは、地域のためだけの識別子であるため、何の妥当性チェックをするときに実行されません "ロケールは、取得したいオブジェクトの種類(NumberFormat)を識別するメカニズムです。ロケールは、オブジェクトを識別するためのメカニズムであり、オブジェクトを識別するためのメカニズムではありません。オブジェクト自体 "

そして最後に、getAvailableLocalesのjavadoc()メソッドは言う:

「返される配列は、Javaランタイム環境によっておよびインストールLocaleServiceProvider実装によってサポートされているロケールの和集合を表し、」だから、あなただけの言語コードを考案する必要がどの標準リストにはありません。あなたのロケールの識別子として使用してください。

+0

_ "標準のリストにない言語コードを作成し、それをあなたのロケールの識別子として使用するだけです。" _ - あなたはLocaleServiceProviderのインストールに関してあなたが引用したビットが欠けていましたか? –

+0

私はそれがショートカットであることに同意します。しかしOPが「利用可能なロケールのリストを拡張する」という意味を明示的に説明していないので、新しいインスタンスを生成するために必要だっただけのものだと思った。 ResourceBundleを使用するには、新しいLocale以外は必要ありません。番号と日付の書式設定は、別の言語のルールを再利用することができます。その場合、新しい国コードまたはバリアントコードを使用するだけで済みます。 –

関連する問題