50 lines
1.9 KiB
Objective-C
50 lines
1.9 KiB
Objective-C
#import "MGLVectorSource+MBXAdditions.h"
|
|
|
|
@implementation MGLVectorSource (MBXAdditions)
|
|
|
|
+ (NS_SET_OF(NSString *) *)mapboxStreetsLanguages {
|
|
// https://www.mapbox.com/vector-tiles/mapbox-streets-v7/#overview
|
|
static dispatch_once_t onceToken;
|
|
static NS_SET_OF(NSString *) *mapboxStreetsLanguages;
|
|
dispatch_once(&onceToken, ^{
|
|
mapboxStreetsLanguages = [NSSet setWithObjects:@"en", @"es", @"fr", @"de", @"ru", @"zh", nil];
|
|
});
|
|
return mapboxStreetsLanguages;
|
|
}
|
|
|
|
+ (nullable NSString *)preferredMapboxStreetsLanguage {
|
|
for (NSString *language in [NSLocale preferredLanguages]) {
|
|
NSString *languageCode = [[NSLocale localeWithLocaleIdentifier:language] objectForKey:NSLocaleLanguageCode];
|
|
if ([[MGLVectorSource mapboxStreetsLanguages] containsObject:languageCode]) {
|
|
return languageCode;
|
|
}
|
|
}
|
|
return nil;
|
|
}
|
|
|
|
- (BOOL)isMapboxStreets {
|
|
NSURL *url = self.configurationURL;
|
|
if (![url.scheme isEqualToString:@"mapbox"]) {
|
|
return NO;
|
|
}
|
|
NSArray *identifiers = [url.host componentsSeparatedByString:@","];
|
|
return [identifiers containsObject:@"mapbox.mapbox-streets-v7"] || [identifiers containsObject:@"mapbox.mapbox-streets-v6"];
|
|
}
|
|
|
|
- (NS_DICTIONARY_OF(NSString *, NSString *) *)localizedKeysByKeyForPreferredLanguage:(nullable NSString *)preferredLanguage {
|
|
if (!self.mapboxStreets) {
|
|
return @{};
|
|
}
|
|
|
|
// Replace {name} and {name_*} with the matching localized name tag.
|
|
NSString *localizedKey = preferredLanguage ? [NSString stringWithFormat:@"name_%@", preferredLanguage] : @"name";
|
|
NSMutableDictionary *localizedKeysByKey = [NSMutableDictionary dictionaryWithObject:localizedKey forKey:@"name"];
|
|
for (NSString *languageCode in [MGLVectorSource mapboxStreetsLanguages]) {
|
|
NSString *key = [NSString stringWithFormat:@"name_%@", languageCode];
|
|
localizedKeysByKey[key] = localizedKey;
|
|
}
|
|
return localizedKeysByKey;
|
|
}
|
|
|
|
@end
|