Skip to content

Instantly share code, notes, and snippets.

@kshala-ford
Last active November 24, 2020 14:04
Show Gist options
  • Save kshala-ford/8daecf33d482a565d13ea61d69ef3225 to your computer and use it in GitHub Desktop.
Save kshala-ford/8daecf33d482a565d13ea61d69ef3225 to your computer and use it in GitHub Desktop.
Get SDL language from iOS app language
// this method must be added into the class which implements SDLManagerDelegate
// at least you should return an empty object if you support the language.
- (nullable SDLLifecycleConfigurationUpdate *)managerShouldUpdateLifecycleToLanguage:(SDLLanguage)language hmiLanguage:(SDLLanguage)hmiLanguage {
SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] init];
return update;
}
+ (SDLLanguage)sdlLanguageFromAppLanguage {
NSArray<SDLLanguage> *sdlLanguageList = @[
SDLLanguageArSa, SDLLanguageCsCz, SDLLanguageDaDk, SDLLanguageDeDe, SDLLanguageElGr, SDLLanguageEnUs /*en*/, SDLLanguageEnAu, SDLLanguageEnGb, SDLLanguageEnIn, SDLLanguageEnSa, SDLLanguageEsEs /*es*/, SDLLanguageEsMx, SDLLanguageFiFi, SDLLanguageFrFr /*fr*/, SDLLanguageFrCa, SDLLanguageHeIl, SDLLanguageHiIn, SDLLanguageHuHu, SDLLanguageIdId, SDLLanguageItIt, SDLLanguageJaJp, SDLLanguageKoKr, SDLLanguageMsMy, SDLLanguageNlNl /*nl*/, SDLLanguageNlBe, SDLLanguageNoNo, SDLLanguagePlPl, SDLLanguagePtPt /*pt*/, SDLLanguagePtBr, SDLLanguageRoRo, SDLLanguageRuRu, SDLLanguageSkSk, SDLLanguageSvSe, SDLLanguageThTh, SDLLanguageTrTr, SDLLanguageUkUa, SDLLanguageViVn, SDLLanguageZhCn, SDLLanguageZhTw
];
NSArray<NSString *> *localizations = NSBundle.mainBundle.preferredLocalizations;
NSString *localization = localizations.count > 0 ? localizations[0] : @"en";
NSDictionary<NSString *, NSString *> *components = [NSLocale componentsFromLocaleIdentifier:localization];
NSString *language = components[NSLocaleLanguageCode].uppercaseString;
NSString *country = components[NSLocaleCountryCode].uppercaseString;
NSString *script = components[NSLocaleScriptCode];
if (language == nil || language.length == 0) return SDLLanguageEnUs;
if (country == nil || country.length == 0) country = nil;
if (script == nil || script.length == 0) script = nil;
if (country) {
SDLLanguage test = [NSString stringWithFormat:@"%@-%@", language, country];
if ([sdlLanguageList containsObject:test]) {
return test;
} else {
country = nil; // country is not recognized by SDL so the best matching locale should be selected.
}
}
// SDL has only two chinese language locales for Taiwan and other chinese regions. If country could not be matched it's possible to match with script.
if ([language isEqual:@"ZH"]) {
if ([script isEqual:@"Hant"]) {
return SDLLanguageZhTw; // traditional script is used in Taiwan
} else {
return SDLLanguageZhCn; // any other chinese speaking region
}
}
// check for language code, fallback to EnUs
__block SDLLanguage match = SDLLanguageEnUs;
[sdlLanguageList indexOfObjectPassingTest:^BOOL(SDLLanguage _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj hasPrefix:language]) {
match = obj;
*stop = YES;
return YES;
}
}];
return match;
}
SDLLifecycleConfiguration *config = [SDLLifecycleConfiguration defaultConfigurationWithAppName:AppName fullAppId:AppId];
config.language = [self sdlLanguageFromAppLanguage];
config.languagesSupported = @[
SDLLanguageArSa, SDLLanguageCsCz, SDLLanguageDaDk, SDLLanguageDeDe, SDLLanguageElGr, SDLLanguageEnUs /*en*/, SDLLanguageEnAu, SDLLanguageEnGb, SDLLanguageEnIn, SDLLanguageEnSa, SDLLanguageEsEs /*es*/, SDLLanguageEsMx, SDLLanguageFiFi, SDLLanguageFrFr /*fr*/, SDLLanguageFrCa, SDLLanguageHeIl, SDLLanguageHiIn, SDLLanguageHuHu, SDLLanguageIdId, SDLLanguageItIt, SDLLanguageJaJp, SDLLanguageKoKr, SDLLanguageMsMy, SDLLanguageNlNl /*nl*/, SDLLanguageNlBe, SDLLanguageNoNo, SDLLanguagePlPl, SDLLanguagePtPt /*pt*/, SDLLanguagePtBr, SDLLanguageRoRo, SDLLanguageRuRu, SDLLanguageSkSk, SDLLanguageSvSe, SDLLanguageThTh, SDLLanguageTrTr, SDLLanguageUkUa, SDLLanguageViVn, SDLLanguageZhCn, SDLLanguageZhTw
];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment