[ios, macos] Update for streets-v8 data and coalesced name fields in v11 styles
This commit is contained in:
@@ -79,7 +79,7 @@
|
||||
An array of locale codes with dedicated name fields in the Mapbox Streets
|
||||
source.
|
||||
|
||||
https://www.mapbox.com/vector-tiles/mapbox-streets-v7/#overview
|
||||
https://www.mapbox.com/vector-tiles/mapbox-streets-v8/
|
||||
*/
|
||||
static NSArray * const MGLMapboxStreetsLanguages = @[
|
||||
@"ar", @"de", @"en", @"es", @"fr", @"ja", @"ko", @"pt", @"ru", @"zh",
|
||||
@@ -141,7 +141,7 @@ static NSArray * const MGLMapboxStreetsAlternativeLanguages = @[
|
||||
return NO;
|
||||
}
|
||||
NSArray *identifiers = [url.host componentsSeparatedByString:@","];
|
||||
return [identifiers containsObject:@"mapbox.mapbox-streets-v7"] || [identifiers containsObject:@"mapbox.mapbox-streets-v6"];
|
||||
return [identifiers containsObject:@"mapbox.mapbox-streets-v8"] || [identifiers containsObject:@"mapbox.mapbox-streets-v7"];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -1398,12 +1398,16 @@ NSDictionary<NSNumber *, NSExpression *> *MGLLocalizedStopDictionary(NSDictionar
|
||||
- (NSExpression *)mgl_expressionLocalizedIntoLocale:(nullable NSLocale *)locale {
|
||||
switch (self.expressionType) {
|
||||
case NSConstantValueExpressionType: {
|
||||
NSDictionary *stops = self.constantValue;
|
||||
if ([stops isKindOfClass:[NSDictionary class]]) {
|
||||
NSDictionary *localizedStops = MGLLocalizedStopDictionary(stops, locale);
|
||||
if (localizedStops != stops) {
|
||||
if ([self.constantValue isKindOfClass:[NSDictionary class]]) {
|
||||
NSDictionary *localizedStops = MGLLocalizedStopDictionary(self.constantValue, locale);
|
||||
if (localizedStops != self.constantValue) {
|
||||
return [NSExpression expressionForConstantValue:localizedStops];
|
||||
}
|
||||
} else if ([self.constantValue isKindOfClass:[NSArray class]]) {
|
||||
NSArray *localizedValues = MGLLocalizedCollection(self.constantValue, locale);
|
||||
if (localizedValues != self.constantValue) {
|
||||
return [NSExpression expressionForConstantValue:localizedValues];
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -1422,19 +1426,18 @@ NSDictionary<NSNumber *, NSExpression *> *MGLLocalizedStopDictionary(NSDictionar
|
||||
if ([localizedKeyPath isEqualToString:@"name"]) {
|
||||
return [NSExpression expressionForKeyPath:localizedKeyPath];
|
||||
}
|
||||
// If the keypath is `name_zh-Hans`, fallback to `name_zh` to `name`
|
||||
// The `name_zh-Hans` field was added since Mapbox Streets v7
|
||||
// See the documentation of name fields for detail https://www.mapbox.com/vector-tiles/mapbox-streets-v7/#overview
|
||||
// CN tiles might using `name_zh-CN` for Simplified Chinese
|
||||
// If the keypath is `name_zh-Hans`, fallback to `name_zh` to `name`.
|
||||
// CN tiles might using `name_zh-CN` for Simplified Chinese.
|
||||
if ([localizedKeyPath isEqualToString:@"name_zh-Hans"]) {
|
||||
return [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K, %K, %K})",
|
||||
localizedKeyPath, @"name_zh-CN", @"name_zh", @"name"];
|
||||
}
|
||||
// Mapbox Streets v8 has `name_zh-Hant`, we should fallback to Simplified Chinese if the filed has no value
|
||||
// Mapbox Streets v8 has `name_zh-Hant`, we should fallback to Simplified Chinese if the field has no value.
|
||||
if ([localizedKeyPath isEqualToString:@"name_zh-Hant"]) {
|
||||
return [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K, %K, %K, %K})",
|
||||
localizedKeyPath, @"name_zh-Hans", @"name_zh-CN", @"name_zh", @"name"];
|
||||
}
|
||||
|
||||
// Other keypath fallback to `name`
|
||||
return [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", localizedKeyPath, @"name"];
|
||||
}
|
||||
|
||||
@@ -1072,10 +1072,19 @@ using namespace std::string_literals;
|
||||
}
|
||||
{
|
||||
NSExpression *original = [NSExpression expressionForKeyPath:@"name_en"];
|
||||
NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K, %K, %K})",
|
||||
@"name_zh-Hans", @"name_zh-CN", @"name_zh", @"name"];
|
||||
NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K, %K, %K})", @"name_zh-Hans", @"name_zh-CN", @"name_zh", @"name"];
|
||||
XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"zh-Hans"]], expected);
|
||||
}
|
||||
{
|
||||
NSExpression *original = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_en", @"name"];
|
||||
NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce:({mgl_coalesce:({name_en, name}), mgl_coalesce:({name_en, name})})"];
|
||||
XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:nil], expected);
|
||||
}
|
||||
{
|
||||
NSExpression *original = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_en", @"name"];
|
||||
NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce:({mgl_coalesce:({name_ja, name}), mgl_coalesce:({name_ja, name})})"];
|
||||
XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"ja-JP"]], expected);
|
||||
}
|
||||
{
|
||||
NSExpression *original = [NSExpression expressionForKeyPath:@"name_en"];
|
||||
NSExpression *expected = [NSExpression expressionForKeyPath:@"name"];
|
||||
|
||||
@@ -15,6 +15,7 @@ Mapbox welcomes participation and contributions from everyone. Please read [CONT
|
||||
* Added an `-[MGLStyle removeSource:error:]` method that returns a descriptive error if the style fails to remove the source, whereas `-[MGLStyle removeSource:]` fails silently. ([#13399](https://github.com/mapbox/mapbox-gl-native/pull/13399))
|
||||
* Added the `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient` property. ([#13463](https://github.com/mapbox/mapbox-gl-native/pull/13463))
|
||||
* Added support for setting `MGLCollisionBehaviorPre4_0` in `NSUserDefaults`. ([#13426](https://github.com/mapbox/mapbox-gl-native/pull/13426))
|
||||
* `-[MGLStyle localizeLabelsIntoLocale:]` and `-[NSExpression(MGLAdditions) mgl_expressionLocalizedIntoLocale:]` can automatically localize styles that use version 8 of the Mapbox Streets source. ([#13481](https://github.com/mapbox/mapbox-gl-native/pull/13481))
|
||||
|
||||
### Map snapshots
|
||||
|
||||
|
||||
@@ -686,7 +686,7 @@ CLLocationCoordinate2D randomWorldCoordinate() {
|
||||
switch (indexPath.row)
|
||||
{
|
||||
case MBXSettingsMiscellaneousLocalizeLabels:
|
||||
[self styleCountryLabelsLanguage];
|
||||
[self toggleStyleLabelsLanguage];
|
||||
break;
|
||||
case MBXSettingsMiscellaneousWorldTour:
|
||||
[self startWorldTour];
|
||||
@@ -1432,7 +1432,7 @@ CLLocationCoordinate2D randomWorldCoordinate() {
|
||||
}
|
||||
}
|
||||
|
||||
-(void)styleCountryLabelsLanguage
|
||||
-(void)toggleStyleLabelsLanguage
|
||||
{
|
||||
_localizingLabels = !_localizingLabels;
|
||||
[self.mapView.style localizeLabelsIntoLocale:_localizingLabels ? [NSLocale localeWithLocaleIdentifier:@"mul"] : nil];
|
||||
@@ -1538,8 +1538,8 @@ CLLocationCoordinate2D randomWorldCoordinate() {
|
||||
|
||||
- (NSString *)bestLanguageForUser
|
||||
{
|
||||
// https://www.mapbox.com/vector-tiles/mapbox-streets-v7/#overview
|
||||
NSArray *supportedLanguages = @[ @"ar", @"en", @"es", @"fr", @"de", @"pt", @"ru", @"zh", @"zh-Hans" ];
|
||||
// https://www.mapbox.com/vector-tiles/mapbox-streets-v8/#name-text--name_lang-code-text
|
||||
NSArray *supportedLanguages = @[ @"ar", @"de", @"en", @"es", @"fr", @"ja", @"ko", @"pt", @"ru", @"zh", @"zh-Hans", @"zh-Hant" ];
|
||||
NSArray<NSString *> *preferredLanguages = [NSBundle preferredLocalizationsFromArray:supportedLanguages forPreferences:[NSLocale preferredLanguages]];
|
||||
NSString *mostSpecificLanguage;
|
||||
|
||||
@@ -1920,7 +1920,6 @@ CLLocationCoordinate2D randomWorldCoordinate() {
|
||||
[MGLStyle darkStyleURL],
|
||||
[MGLStyle satelliteStyleURL],
|
||||
[MGLStyle satelliteStreetsStyleURL]
|
||||
|
||||
];
|
||||
NSAssert(styleNames.count == styleURLs.count, @"Style names and URLs don’t match.");
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
* Added an `-[MGLStyle removeSource:error:]` method that returns a descriptive error if the style fails to remove the source, whereas `-[MGLStyle removeSource:]` fails silently. ([#13399](https://github.com/mapbox/mapbox-gl-native/pull/13399))
|
||||
* Added the `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient` property. ([#13463](https://github.com/mapbox/mapbox-gl-native/pull/13463))
|
||||
* Added support for setting `MGLCollisionBehaviorPre4_0` in `NSUserDefaults`. ([#13426](https://github.com/mapbox/mapbox-gl-native/pull/13426))
|
||||
* Added support for automatic localization of version 8 of the Mapbox Streets source. ([#13481](https://github.com/mapbox/mapbox-gl-native/pull/13481))
|
||||
|
||||
### Other changes
|
||||
|
||||
|
||||
Reference in New Issue
Block a user