Search code examples
javaandroidlocalereverse-geocoding

How to get Geocoder’s results on the LatLng’s country language?


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;


Solution

  • 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!