Если у вас есть код страны 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 €
Ответы
Ответ 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)
и вернуть его