Если у вас есть ISO-код страны `US`,` FR`, как вы получите код Locale (`Locale.US`,` Locale.FRANCE`)? - PullRequest
20 голосов
/ 02 июля 2011

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

Ответы [ 4 ]

16 голосов
/ 02 июля 2011

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

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

3 голосов
/ 02 июля 2011

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

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

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

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

2 голосов
/ 02 июля 2011

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

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

или

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

...