I use reverse geocoding in my app to transform LatLng objects to string addresses. I have to get its results not on device’s default language, but on the language of the country where given location is settled. Is there a way to do this?
Here’s my code:
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
List addresses;
try {
addresses = geocoder.getFromLocation(location.latitude, location.longitude, 1);
}
catch (IOException | IndexOutOfBoundsException | NullPointerException ex) {
addresses = null;
}
return addresses;
In your code, Geocoder returns address text in device locale(language).
1 From first element of "addresses" list, get Country Code.
Address address = addresses.get(0);
String countryCode = address.getCountryCode
Then returns Country Code (e.g. "MX")
2 Get Country Name.
String langCode = null;
Locale[] locales = Locale.getAvailableLocales();
for (Locale localeIn : locales) {
if (countryCode.equalsIgnoreCase(localeIn.getCountry())) {
langCode = localeIn.getLanguage();
break;
}
}
3 Instantiate Locale and Geocoder again, and request again.
Locale locale = new Locale(langCode, countryCode);
geocoder = new Geocoder(this, locale);
List addresses;
try {
addresses = geocoder.getFromLocation(location.latitude, location.longitude, 1);
}
catch (IOException | IndexOutOfBoundsException | NullPointerException ex) {
addresses = null;
}
return addresses;
This worked for me, hopefully for you too!