iOS9 AppleLanguages 与旧版本不同 iOS
iOS9 AppleLanguages different from older iOS
我现在如何获得实际的系统语言?似乎他们在最后一个破折号之后加上了区域后缀。所以之前 cs
现在是 cs-DE
如果语言是捷克语并且区域设置是德语。但有些语言没有后缀,例如GB语言是en-GB
但区域设置是德语
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* language = [defs objectForKey:@"AppleLanguages"];
NSString* preferredLang = [language objectAtIndex:0];
NSLog(@"localeIdentifier: %@", preferredLang);
我最近 运行 遇到了这个问题。根据 Apple's documentation,您将获得带有区域指示符的区域设置 ID,例如 [language designator]-[region designator]
on iOS 9。
如果你只想获取语言环境 ID,我找到了一个解决方案,你可以使用
[[NSBundle mainBundle] preferredLocalizations]
.
还有一个解决方案,如果大家喜欢,
NSArray *languages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];
if ([[currentLanguage componentsSeparatedByString:@"-"] count] == 2)
currentLanguage = [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0];
// Only for chinese Language.
else if ([[currentLanguage componentsSeparatedByString:@"-"] count] == 3)
currentLanguage = [NSString stringWithFormat:@"%@-%@", [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0],
[[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:1]
];
"currentLanguage" 将为您提供当前语言,以便您可以将其用于本地化或任何其他用途。
使用 NSLocale
class
中的 componentsFromLocaleIdentifier
方法
你可以这样做:
NSString* localeID = [NSLocale currentLocale].localeIdentifier;
NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:localeID];
NSString* languageID = components[NSLocaleLanguageCode];
编辑
如果应用当前翻译的语言不是设备的语言,以这种方式获取语言会产生一些问题。的确,
components[NSLocaleLanguageCode]
将 return 设备的语言。
要获取应用程序的当前语言,您应该使用 [[NSBundle mainBundle] preferredLocalizations].firstObject
。
要获取设备的区域,您仍然可以使用components[NSLocaleCountryCode]
我现在如何获得实际的系统语言?似乎他们在最后一个破折号之后加上了区域后缀。所以之前 cs
现在是 cs-DE
如果语言是捷克语并且区域设置是德语。但有些语言没有后缀,例如GB语言是en-GB
但区域设置是德语
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* language = [defs objectForKey:@"AppleLanguages"];
NSString* preferredLang = [language objectAtIndex:0];
NSLog(@"localeIdentifier: %@", preferredLang);
我最近 运行 遇到了这个问题。根据 Apple's documentation,您将获得带有区域指示符的区域设置 ID,例如 [language designator]-[region designator]
on iOS 9。
如果你只想获取语言环境 ID,我找到了一个解决方案,你可以使用
[[NSBundle mainBundle] preferredLocalizations]
.
还有一个解决方案,如果大家喜欢,
NSArray *languages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];
if ([[currentLanguage componentsSeparatedByString:@"-"] count] == 2)
currentLanguage = [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0];
// Only for chinese Language.
else if ([[currentLanguage componentsSeparatedByString:@"-"] count] == 3)
currentLanguage = [NSString stringWithFormat:@"%@-%@", [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0],
[[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:1]
];
"currentLanguage" 将为您提供当前语言,以便您可以将其用于本地化或任何其他用途。
使用 NSLocale
class
componentsFromLocaleIdentifier
方法
你可以这样做:
NSString* localeID = [NSLocale currentLocale].localeIdentifier;
NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:localeID];
NSString* languageID = components[NSLocaleLanguageCode];
编辑
如果应用当前翻译的语言不是设备的语言,以这种方式获取语言会产生一些问题。的确,
components[NSLocaleLanguageCode]
将 return 设备的语言。
要获取应用程序的当前语言,您应该使用 [[NSBundle mainBundle] preferredLocalizations].firstObject
。
要获取设备的区域,您仍然可以使用components[NSLocaleCountryCode]