If you have the ISO country code `US`, `FR`, how do you get the Locale code (`Locale.US`, `Locale.FRANCE`)?

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.


In Java7 there is the Locale.Builder, but before that there isn't an easy way. You can, however create a utility method:

  1. loop Locale.getAvailableLocales()
  2. for each check if locale.getCountryCode().equals(countryCodeParam) and return it

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.