diff --git a/platform/macos/app/Base.lproj/MainMenu.xib b/platform/macos/app/Base.lproj/MainMenu.xib
index 4efb8d4c4..cb9905d4a 100644
--- a/platform/macos/app/Base.lproj/MainMenu.xib
+++ b/platform/macos/app/Base.lproj/MainMenu.xib
@@ -434,6 +434,27 @@
+
+
+
diff --git a/platform/macos/app/MapDocument.m b/platform/macos/app/MapDocument.m
index c05a85f96..d2e6a0f81 100644
--- a/platform/macos/app/MapDocument.m
+++ b/platform/macos/app/MapDocument.m
@@ -64,6 +64,7 @@ NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id *)layer.textField rawValue];
+ textField = [nameTokenExpression stringByReplacingMatchesInString:textField
+ options:0
+ range:NSMakeRange(0, textField.length)
+ withTemplate:preferredNameToken];
+ layer.textField = [MGLStyleValue valueWithRawValue:textField];
+ } else if ([layer.textField isKindOfClass:[MGLStyleFunction class]]) {
+ MGLStyleFunction *function = (MGLStyleFunction *)layer.textField;
+ NSMutableDictionary *stops = function.stops.mutableCopy;
+ [stops enumerateKeysAndObjectsUsingBlock:^(NSNumber *zoomLevel, MGLStyleConstantValue *stop, BOOL *done) {
+ NSString *textField = stop.rawValue;
+ textField = [nameTokenExpression stringByReplacingMatchesInString:textField
+ options:0
+ range:NSMakeRange(0, textField.length)
+ withTemplate:preferredNameToken];
+ stops[zoomLevel] = [MGLStyleValue valueWithRawValue:textField];
+ }];
+ function.stops = stops;
+ layer.textField = function;
+ }
+ }
+}
+
+- (NSString *)preferredLanguageCode {
+ // Languages supported by Mapbox Streets v10.
+ NSSet *supportedLanguages = [NSSet setWithObjects:@"en", @"es", @"fr", @"de", @"ru", @"zh", nil];
+ NSArray *preferredLanguages = [NSLocale preferredLanguages];
+
+ for (NSString *language in preferredLanguages) {
+ NSString *languageCode = [[NSLocale localeWithLocaleIdentifier:language] objectForKey:NSLocaleLanguageCode];
+ if ([supportedLanguages containsObject:languageCode]) {
+ return languageCode;
+ }
+ }
+
+ return @"en";
+}
+
- (void)applyPendingState {
if (_inheritedStyleURL) {
self.mapView.styleURL = _inheritedStyleURL;
@@ -736,6 +793,14 @@ NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id = 0 || self.styleLayersTableView.selectedRow >= 0;
}
+ if (menuItem.action == @selector(setLabelLanguage:)) {
+ menuItem.state = menuItem.tag == _isLocalizingLabels ? NSOnState: NSOffState;
+ if (menuItem.tag) {
+ NSLocale *locale = [NSLocale localeWithLocaleIdentifier:[NSBundle mainBundle].developmentLocalization];
+ menuItem.title = [locale displayNameForKey:NSLocaleIdentifier value:self.preferredLanguageCode];
+ }
+ return YES;
+ }
if (menuItem.action == @selector(manipulateStyle:)) {
return YES;
}
@@ -922,6 +987,10 @@ NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id )annotation {
return YES;
}