国コードUS
、FR
(ISO-3166-1 alpha-2国コード)がある場合、ロケールコード(Locale.US
、Locale.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 €
ロケールは国ではなく言語を保持するために使用されるため、できません。特定の国およびこの国の特定のバリアントの言語を保持できますが、それは最初に言語です。また、言語と国の間に1対1の関係はありません。ほとんどの言語はさまざまな国で話されており、多くの国にはいくつかの言語があります。
言語の国コードがある場合は、new Locale(code)
を使用できます。しかし、国コードを使用すると、getAvailableLocales
を呼び出して結果をループし、国コードが含まれるコードを見つけるだけです。しかし、いくつかあるかもしれません。
Java7には_Locale.Builder
_がありますが、その前に簡単な方法はありません。ただし、ユーティリティメソッドを作成できます。
Locale.getAvailableLocales()
locale.getCountryCode().equals(countryCodeParam)
かどうかをチェックして返すロケールを作成するか、
_new Locale("en", "US")
new Locale("fr", "FR")
_
または
ロケールが見つかるまでLocale.getAvailableLocales()
を繰り返し、そのインスタンスを使用します。
ロケールはISO-639言語コードによって最も重要に指定されます。ISO-3166国コードとバリアントも可能です。 Locale
クラスには、言語コードのみ、または追加の国コード、または追加バリアントのいずれかを取るコンストラクターがあります。
国コードしかない場合は、最初にそれを言語コードに変換するマップが必要ですが、必ずしも固有の結果が得られるわけではなく、多くの国では複数の公用語を使用しています。
Kotlinを実行していて、国コードが複数のロケールに対応していない場合、これは機能するはずです。
_val locale: Locale? = Locale.getAvailableLocales()
.firstOrNull { it.country == isoCode }
_
null
がそこにある場合は、「デフォルト」のロケールを
Locale.getDefault()
(問題あり、問題をグーグルできます)LocaleProvider
を挿入する(内部で回避策を実行するカスタムクラス)これは私にとってはうまくいきます:
_val locale = Locale.getAvailableLocales()
.firstOrNull { it.country == isoCode }
?: localeProvider.default
_
ただし、「デフォルト」のロケールはISO国コードとは異なる場合があることに注意してください。 ISOコードがどこから来ているかに依存します。