如何为 Google PlaceAutocomplete 设置语言

How to set language for Google PlaceAutocomplete

我正在使用 Google PlaceAutocomplete,因此用户可以 select 他的地址。

我的代码是:

mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
                .addApi(Places.GEO_DATA_API)
                .enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
                .addConnectionCallbacks(this)
                .build();
        AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()

                .setCountry("IQ")
                .build();


        mAutocompleteTextView.setOnItemClickListener(mAutocompleteClickListener);
        mPlaceArrayAdapter = new PlaceArrayAdapter(this, android.R.layout.simple_list_item_1,
                BOUNDS_MOUNTAIN_VIEW, typeFilter);
        mAutocompleteTextView.setAdapter(mPlaceArrayAdapter);

    }

    private AdapterView.OnItemClickListener mAutocompleteClickListener
            = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            final PlaceArrayAdapter.PlaceAutocomplete item = mPlaceArrayAdapter.getItem(position);
            final String placeId = String.valueOf(item.placeId);
            Log.i(TAG, "Selected: " + item.description);
            PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi
                    .getPlaceById(mGoogleApiClient, placeId);
            placeResult.setResultCallback(mUpdatePlaceDetailsCallback);
            Log.i(TAG, "Fetching details for ID: " + item.placeId);
        }
    };

    private ResultCallback<PlaceBuffer> mUpdatePlaceDetailsCallback
            = new ResultCallback<PlaceBuffer>() {
        @Override
        public void onResult(PlaceBuffer places) {
            if (!places.getStatus().isSuccess()) {
                Log.e(TAG, "Place query did not complete. Error: " +
                        places.getStatus().toString());
                return;
            }
            // Selecting the first object buffer.
            final Place place = places.get(0);
            CharSequence attributions = places.getAttributions();

            mNameView.setText(Html.fromHtml(place.getAddress() + ""));


        }
    };

我想要阿拉伯语的结果。经过一些研究,我发现它取决于用户系统语言,有没有办法让它只用阿拉伯语?

没有。您可以使用 web api,但是:

The language code, indicating in which language the results should be returned, if possible.

更多:https://developers.google.com/places/web-service/autocomplete

这是支持的语言列表https://developers.google.com/maps/faq#languagesupport,您可以从这里获取语言代码。

所以当你调用地方详情api时,你可以添加language参数,这个参数是可选的,详情见下面url https://developers.google.com/places/web-service/details

Places API returns 您使用短地址和 latlng 坐标放置 Place 对象,但要使用 [=13= 获取完整地址]EN locale 你可以这样做:

public Address getFullAddress(Place place){
        Address address;

        Locale aLocale = new Locale.Builder().setLanguage("en").build();
        Geocoder geocoder = new Geocoder(this, aLocale);

        try
        {
            List<Address> addresses = geocoder.getFromLocation(place.getLatLng().latitude,place.getLatLng().longitude, 1);

            address = addresses.get(0);

            return address;

        } catch (IOException e)
        {

            e.printStackTrace();
        }

        return null;
    }

您可以在 initialize 调用中更改它:

Places.initialize(applicationContext, "API_KEY", Locale.US)

第三个参数是语言。