Подтвердить что ты не робот

Если у вас есть код страны ISO `US`,` FR`, как вы получаете код Locale (`Locale.US`,` Locale.FRANCE`)?

Если у вас есть код страны US, FR (код страны ISO-3166-1 альфа-2), как вы получите код Locale (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 €
4b9b3361

Ответ 1

Вы не можете, потому что язык используется для хранения языка, а не для страны. Он может содержать язык для конкретной страны и для конкретного варианта в этой стране, но это язык в первую очередь. И между человеком и страной нет взаимно однозначных отношений. Большинство языков говорят в разных странах, и во многих странах имеется несколько языков.

Если у вас есть код страны для языка, вы можете использовать new Locale(code). Но с кодом страны все, что вы можете сделать, это позвонить getAvailableLocales, просмотреть результаты и найти ту, которая имеет код страны. Но может быть несколько.

Ответ 2

Вы можете создать локаль,

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

или

итерации через Locale.getAvailableLocales(), пока вы не найдете свой язык, а затем используйте этот экземпляр.

Ответ 3

Языковой стандарт ISO-639 наиболее важен для локали, возможно, также код страны ISO-3166 и вариант. Класс Locale имеет конструкторы, которые принимают либо только код языка, либо дополнительно код страны, либо дополнительно вариант.

Если у вас есть только код страны, вам сначала нужна карта, которая преобразует ее в код языка, но это не обязательно дает уникальный результат, многие страны используют более одного официального языка.

Ответ 4

В Java7 есть Locale.Builder, но для этого нет непростого пути. Однако вы можете создать полезный метод:

  • loop Locale.getAvailableLocales()
  • для каждой проверки, если locale.getCountryCode().equals(countryCodeParam) и вернуть его