mapbox / mapbox-gl-native

Interactive, thoroughly customizable maps in native Android, iOS, macOS, Node.js, and Qt applications, powered by vector tiles and OpenGL
https://mapbox.com/mobile
Other
4.37k stars 1.33k forks source link

Automatically adapt Mapbox Streets–sourced layers for user preferred language #7031

Closed 1ec5 closed 7 years ago

1ec5 commented 7 years ago

When a user adjusts the Preferred Language Order setting in the Language & Region section of Settings to a language supported by the Mapbox Streets source, any style based on the Mapbox Streets source should automatically adjust by localizing the labels.

MGLMapView can observe NSCurrentLocaleDidChangeNotification and respond by obtaining NSLocale.autoupdatingCurrentLocale, determining the identifiers of the sources whose URL matches mapbox://mapbox.mapbox-streets-v*, and replacing {name*} tokens in the textField of any MGLSymbolStyleLayer whose sourceIdentifier is one of those source identifiers. We already do something similar in iosapp on demand: #6819.

We could also offer a way to extend this feature to arbitrary sources, by allowing the developer to specify which fields in the source correspond to which languages (see also mapbox/mapbox-gl#21).

Iterating over all the sources and style layers will require #6097. Discovering whether a source is Mapbox Streets will require #6584. #7030 would rely on a similar mechanism.

/ref #1108 /cc @incanus @pveugen @boundsj @frederoni

1ec5 commented 7 years ago

We should expose an option on MGLStyle that allows the developer to turn automatic localization on and off (for supported sources). I think it should be on by default, for parity with MapKit and the Google Maps SDK, but there definitely needs to be a way to turn the feature off, in case the developer wants a specific language to be displayed.

1ec5 commented 7 years ago

Note that macosapp already performs this automatic localization, as of #6097 and #7398, so this ticket tracks upstreaming that code to the iOS and macOS SDKs.

evgzor commented 7 years ago

Are any estimations when the issue would be fixed?

boundsj commented 7 years ago

This was done in https://github.com/mapbox/mapbox-gl-native/pull/9582 on the release-ios-v3.6.0-android-v5.1.0 branch and is expected to be in the 3.6.2 release. cc @fabian-guerra

evgzor commented 7 years ago

@boundsj Could u please provide any estimation when 3.6.2 would be released?

boundsj commented 7 years ago

@evgzor patch releases for v3.6.x are going out every 2 to three weeks so it should be this week or next.

evgzor commented 7 years ago

@boundsj please look:

screen shot 2017-08-28 at 13 59 34

Localization still does not work on iOS for German language.

fabian-guerra commented 7 years ago

Hi @evgzor did you set mapView.style.localizesLabels to YES?

localize

friedbunny commented 7 years ago

did you set mapView.style.localizesLabels to YES?

Additionally, this should be done in -[MGLMapViewDelegate mapView:didFinishLoadingStyle:] or later.

evgzor commented 7 years ago

@friedbunny @fabian-guerra on iOS all good but on Android Mapbox 5.1.3 still an issue: device-2017-09-01-134409 Could u help me and tell what could be wrong?

Guardiola31337 commented 7 years ago

Hey @evgzor 👋

That feature is not included in the Android binding and the idea to cover that functionality is implementing it as a plugin. 👀 https://github.com/mapbox/mapbox-plugins-android/issues/36

That ticket is still opened so in the meantime you could do it manually:

If you know the language in advance you could directly change label language as shown above ☝️

For further information check Change your map’s label language and the language switch example.

Contributions are more than welcome so I encourage you to take a stab at https://github.com/mapbox/mapbox-plugins-android/issues/36 and send a PR fixing it (follow the steps mentioned above) 😛

Thanks Eugene!