Last active
November 24, 2020 14:04
-
-
Save kshala-ford/8daecf33d482a565d13ea61d69ef3225 to your computer and use it in GitHub Desktop.
Get SDL language from iOS app language
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
+ (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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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