From 1cf0b31f7a447681acbbaa758fc574b7ac0a3c1a Mon Sep 17 00:00:00 2001 From: Julian Rex Date: Wed, 12 Dec 2018 15:44:19 -0500 Subject: [ios] Release v4.7.0 beta.2 preparation (#13561) --- platform/darwin/src/MGLMapSnapshotter.mm | 6 ++++++ platform/darwin/src/MGLVectorTileSource.mm | 4 ++-- platform/darwin/src/NSExpression+MGLAdditions.mm | 21 ++++++++++++--------- platform/darwin/test/MGLExpressionTests.mm | 13 +++++++++++-- platform/ios/CHANGELOG.md | 1 + platform/ios/app/MBXViewController.m | 9 ++++----- platform/ios/src/MGLMapAccessibilityElement.mm | 7 +++++-- platform/macos/CHANGELOG.md | 1 + 8 files changed, 42 insertions(+), 20 deletions(-) diff --git a/platform/darwin/src/MGLMapSnapshotter.mm b/platform/darwin/src/MGLMapSnapshotter.mm index 65937fde66..afcfc91109 100644 --- a/platform/darwin/src/MGLMapSnapshotter.mm +++ b/platform/darwin/src/MGLMapSnapshotter.mm @@ -17,6 +17,9 @@ #import "MGLAttributionInfo_Private.h" #import "MGLLoggingConfiguration_Private.h" #import "MGLRendererConfiguration.h" +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR +#import "MGLMapboxEvents.h" +#endif #if TARGET_OS_IPHONE #import "UIImage+MGLAdditions.h" @@ -155,6 +158,9 @@ const CGFloat MGLSnapshotterMinimumPixelSize = 64; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:nil]; #else [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:NSApplicationWillTerminateNotification object:nil]; +#endif +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + [MGLMapboxEvents pushTurnstileEvent]; #endif } return self; diff --git a/platform/darwin/src/MGLVectorTileSource.mm b/platform/darwin/src/MGLVectorTileSource.mm index a3241d3bce..f7a6869ade 100644 --- a/platform/darwin/src/MGLVectorTileSource.mm +++ b/platform/darwin/src/MGLVectorTileSource.mm @@ -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 diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm index 04152afffd..527cb64b3d 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ b/platform/darwin/src/NSExpression+MGLAdditions.mm @@ -1398,12 +1398,16 @@ NSDictionary *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 *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"]; } diff --git a/platform/darwin/test/MGLExpressionTests.mm b/platform/darwin/test/MGLExpressionTests.mm index 7c853b56d8..f869275dd3 100644 --- a/platform/darwin/test/MGLExpressionTests.mm +++ b/platform/darwin/test/MGLExpressionTests.mm @@ -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"]; diff --git a/platform/ios/CHANGELOG.md b/platform/ios/CHANGELOG.md index 4e39f2a02f..e3b361d398 100644 --- a/platform/ios/CHANGELOG.md +++ b/platform/ios/CHANGELOG.md @@ -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 diff --git a/platform/ios/app/MBXViewController.m b/platform/ios/app/MBXViewController.m index 2db2ad10d0..9e6cbf2a8e 100644 --- a/platform/ios/app/MBXViewController.m +++ b/platform/ios/app/MBXViewController.m @@ -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 *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."); diff --git a/platform/ios/src/MGLMapAccessibilityElement.mm b/platform/ios/src/MGLMapAccessibilityElement.mm index c1cc5304d7..240eab1545 100644 --- a/platform/ios/src/MGLMapAccessibilityElement.mm +++ b/platform/ios/src/MGLMapAccessibilityElement.mm @@ -78,7 +78,11 @@ NSMutableArray *facts = [NSMutableArray array]; // Announce the kind of place or POI. - if (attributes[@"type"]) { + NSString *languageCode = [MGLVectorTileSource preferredMapboxStreetsLanguage]; + NSString *categoryAttribute = [NSString stringWithFormat:@"category_%@", languageCode]; + if (attributes[categoryAttribute]) { + [facts addObject:attributes[categoryAttribute]]; + } else if (attributes[@"type"]) { // FIXME: Unfortunately, these types aren’t a closed set that can be // localized, since they’re based on OpenStreetMap tags. NSString *type = [attributes[@"type"] stringByReplacingOccurrencesOfString:@"_" @@ -88,7 +92,6 @@ // Announce the kind of airport, rail station, or mountain based on its // Maki image name. else if (attributes[@"maki"]) { - // TODO: Localize Maki image names. [facts addObject:attributes[@"maki"]]; } diff --git a/platform/macos/CHANGELOG.md b/platform/macos/CHANGELOG.md index c0affb631a..736e8be30a 100644 --- a/platform/macos/CHANGELOG.md +++ b/platform/macos/CHANGELOG.md @@ -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 -- cgit v1.2.1