web-dev-qa-db-ja.com

ISO国コード `US`、` FR`がある場合、ロケールコード( `Locale.US`、` Locale.FRANCE`)はどのように取得しますか?

国コードUSFR(ISO-3166-1 alpha-2国コード)がある場合、ロケールコード(Locale.USLocale.FRANCE)このようなことを行うには:

System.out.println(DecimalFormat.getCurrencyInstance(Locale.US).format(12.34));
System.out.println(DecimalFormat.getCurrencyInstance(Locale.FRANCE).format(12.34));

$12.34
12,34 €
20
Pascal

ロケールは国ではなく言語を保持するために使用されるため、できません。特定の国およびこの国の特定のバリアントの言語を保持できますが、それは最初に言語です。また、言語と国の間に1対1の関係はありません。ほとんどの言語はさまざまな国で話されており、多くの国にはいくつかの言語があります。

言語の国コードがある場合は、new Locale(code)を使用できます。しかし、国コードを使用すると、getAvailableLocalesを呼び出して結果をループし、国コードが含まれるコードを見つけるだけです。しかし、いくつかあるかもしれません。

16
JB Nizet

Java7には_Locale.Builder_がありますが、その前に簡単な方法はありません。ただし、ユーティリティメソッドを作成できます。

  1. ループLocale.getAvailableLocales()
  2. locale.getCountryCode().equals(countryCodeParam)かどうかをチェックして返す
3
Bozho

ロケールを作成するか、

_new Locale("en", "US")
new Locale("fr", "FR")
_

または

ロケールが見つかるまでLocale.getAvailableLocales()を繰り返し、そのインスタンスを使用します。

2
aldrin

ロケールはISO-639言語コードによって最も重要に指定されます。ISO-3166国コードとバリアントも可能です。 Localeクラスには、言語コードのみ、または追加の国コード、または追加バリアントのいずれかを取るコンストラクターがあります。

国コードしかない場合は、最初にそれを言語コードに変換するマップが必要ですが、必ずしも固有の結果が得られるわけではなく、多くの国では複数の公用語を使用しています。

2

Kotlinを実行していて、国コードが複数のロケールに対応していない場合、これは機能するはずです。

_val locale: Locale? = Locale.getAvailableLocales()
  .firstOrNull { it.country == isoCode }
_

nullがそこにある場合は、「デフォルト」のロケールを

  1. Locale.getDefault()(問題あり、問題をグーグルできます)
  2. LocaleProviderを挿入する(内部で回避策を実行するカスタムクラス)

これは私にとってはうまくいきます:

_val locale = Locale.getAvailableLocales()
  .firstOrNull { it.country == isoCode }
  ?: localeProvider.default
_

ただし、「デフォルト」のロケールはISO国コードとは異なる場合があることに注意してください。 ISOコードがどこから来ているかに依存します。

0
milosmns