Reputation: 253
If you have the country code US
, FR
(ISO-3166-1 alpha-2 country code), how do you get the Locale code (Locale.US
, Locale.FRANCE
) to do something like this:
System.out.println(DecimalFormat.getCurrencyInstance(Locale.US).format(12.34));
System.out.println(DecimalFormat.getCurrencyInstance(Locale.FRANCE).format(12.34));
$12.34
12,34 €
Upvotes: 25
Views: 55884
Reputation: 4423
The accepted answer is of course correct, but a solution is still needed. So, here is my attempt to implement it:
public static Locale countryCodeToLocate(String countryCode) {
for(Locale l : Locale.getAvailableLocales()) {
// try to convert `en_US` into `us`
String lang = l.toString().toLowerCase();
String prefix = l.getLanguage().toLowerCase();
if (lang.startsWith(prefix + "_" + countryCode)) {
return l;
}
}
return Locale.getDefault();
}
Upvotes: 0
Reputation: 597124
In Java7 there is the Locale.Builder
, but before that there isn't an easy way. You can, however create a utility method:
Locale.getAvailableLocales()
locale.getCountryCode().equals(countryCodeParam)
and return itUpvotes: 7
Reputation: 691775
You can't, because a Locale is used to hold a language, not a country. It can hold a language for a specific country, and for a specific variant in this country, but it's a language first. And there is no one-to-one relationship between a language and a country. Most languages are spoken in various countries, and many countries have several languages.
If you had the country code for a language, you could use new Locale(code)
. But with a country code, all you can do is call getAvailableLocales
, loop through the results, and find one which has your country code. But there might be several ones.
Upvotes: 28
Reputation: 346307
A locale is specified most importantly by the ISO-639 language code, possible also a ISO-3166 country code and a variant. The Locale
class has constructors that take either only a language code, or additionally a country code, or additionally a variant.
If you only have the country code, you first need a map that converts it to a language code - but that does not necessarily produce a unique result, many countries use more than one official language.
Upvotes: 2
Reputation: 4572
You can either create the locale,
new Locale("en", "US")
new Locale("fr", "FR")
or
iterate through Locale.getAvailableLocales()
till you find your locale and then use that instance.
Upvotes: 6