Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
Add a fallback for name_zh-Hant
Browse files Browse the repository at this point in the history
  • Loading branch information
lloydsheng committed Jul 18, 2018
1 parent 9f4eda2 commit 70cac0e
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 22 deletions.
22 changes: 12 additions & 10 deletions platform/darwin/src/NSExpression+MGLAdditions.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1507,23 +1507,25 @@ - (NSExpression *)mgl_expressionLocalizedIntoLocale:(nullable NSLocale *)locale
localizedKeyPath = [NSString stringWithFormat:@"name_%@", preferredLanguage];
}
}
// If the keypath is `name` or `name_en`, no need to fallback
if ([localizedKeyPath isEqualToString:@"name"] || [localizedKeyPath isEqualToString:@"name_en"]) {
// If the keypath is `name`, no need to fallback
if ([localizedKeyPath isEqualToString:@"name"]) {
return [NSExpression expressionForKeyPath:localizedKeyPath];
}
// If the keypath is `name_zh-Hans`, fallback to `name_zh`. If `name_zh` is empty, fallback to `name`
// 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 ([localizedKeyPath isEqualToString:@"name_zh-Hans"]) {
return [NSExpression expressionWithFormat:@"mgl_coalesce(%@)",
@[[NSExpression expressionForKeyPath:localizedKeyPath],
[NSExpression expressionForKeyPath:@"name_zh"],
[NSExpression expressionForKeyPath:@"name"],]];
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
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(%@)",
@[[NSExpression expressionForKeyPath:localizedKeyPath],
[NSExpression expressionForKeyPath:@"name"],]];
return [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", localizedKeyPath, @"name"];
}
return self;
}
Expand Down
16 changes: 5 additions & 11 deletions platform/darwin/test/MGLExpressionTests.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1054,7 +1054,7 @@ - (void)testLocalization {
}
{
NSExpression *original = [NSExpression expressionForKeyPath:@"name_en"];
NSExpression *expected = original;
NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_en", @"name"];
XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:nil], expected);
}
{
Expand All @@ -1064,17 +1064,13 @@ - (void)testLocalization {
}
{
NSExpression *original = [NSExpression expressionForKeyPath:@"name_en"];
NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce(%@)",
@[[NSExpression expressionForKeyPath:@"name_fr"],
[NSExpression expressionForKeyPath:@"name"]]];
NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_fr", @"name"];
XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"fr-CA"]], expected);
}
{
NSExpression *original = [NSExpression expressionForKeyPath:@"name_en"];
NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce(%@)",
@[[NSExpression expressionForKeyPath:@"name_zh-Hans"],
[NSExpression expressionForKeyPath:@"name_zh"],
[NSExpression expressionForKeyPath:@"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);
}
{
Expand All @@ -1091,9 +1087,7 @@ - (void)testLocalization {
NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, short, %@)", @{
@1: [NSExpression expressionForKeyPath:@"abbr"],
@2: @"",
@3: [NSExpression expressionWithFormat:@"mgl_coalesce(%@)",
@[[NSExpression expressionForKeyPath:@"name_es"],
[NSExpression expressionForKeyPath:@"name"]]]
@3: [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_es", @"name"]
}];
XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"es-PR"]], expected);
}
Expand Down
2 changes: 1 addition & 1 deletion platform/ios/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Mapbox welcomes participation and contributions from everyone. Please read [CONT
* Added the `collator` and `resolved-locale` expression operators to more precisely compare strings in style JSON. A subset of this functionality is available through predicate options when creating an `NSPredicate`. ([#11869](https://github.com/mapbox/mapbox-gl-native/pull/11869))
* Fixed a crash when trying to parse expressions containing legacy filters. ([#12263](https://github.com/mapbox/mapbox-gl-native/pull/12263))
* Fixed a crash that occurred when creating an `MGL_MATCH` expression using non-expressions as arguments. ([#12332](https://github.com/mapbox/mapbox-gl-native/pull/12332))
* Fixed an issue that no localized low-zoom labels when system language is Simplified Chinese ([#12164](https://github.com/mapbox/mapbox-gl-native/issues/12164))
* Fixed an issue causing country and ocean labels to disappear after calling -[MGLStyle localizeLabelsIntoLocale:] when the system language is set to Simplified Chinese. ([#12164](https://github.com/mapbox/mapbox-gl-native/issues/12164))

### Networking and storage

Expand Down

0 comments on commit 70cac0e

Please sign in to comment.