自上次更新以来,我无法将语言代码(en,fr等)翻译成各自的名称(英语,法语等)。
它适用于真实设备,但不适用于模拟器。它使用的是旧版Xcode。我知道它在发行说明中写了[NSLocale currentLocale]
在某些情况下可能会返回en_US
,但这并不能解释为什么它们不再是&#34 ;翻译&#34 ;.我使用这段代码:
NSString* lang = @"en";
NSLog(@"%@",
[[NSLocale currentLocale]
displayNameForKey:NSLocaleIdentifier
value:lang]
);
显示(null)
,而不是English
。
问题是我的应用程序因某些地方而崩溃,所以我想知道是否有解决方法。
奇怪的是,Apple提供的以下示例效果非常好。
NSLocale *frLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"];
NSString *displayNameString = [frLocale displayNameForKey:NSLocaleIdentifier value:@"fr_FR"];
NSLog(@"displayNameString fr_FR: %@", displayNameString);
displayNameString = [frLocale displayNameForKey:NSLocaleIdentifier value:@"en_US"];
NSLog(@"displayNameString en_US: %@", displayNameString);
答案 0 :(得分:2)
在某些情况下,[NSLocale currentLocale]可能会返回en_US 在iOS 8.1模拟器中选择的语言环境。 (18512161)
+ (NSLocale *)autoupdatingCurrentLocale NS_AVAILABLE(10_5, 2_0); // generally you should use this method
+ (NSLocale *)currentLocale; // an object representing the user's current locale
解决方法是使用第一个。在currentLocal实例上使用objectForKey可以正常工作。
NSString* lang = @"en_US";
NSLocale *currentLocal = [NSLocale autoupdatingCurrentLocale];
//get the localeIdentifier and create a new NSLocale.
id localIdentifier = [currentLocal objectForKey:NSLocaleIdentifier];
NSLocale *theLocal = [NSLocale localeWithLocaleIdentifier:localIdentifier];
NSLog(@"%@",[theLocal displayNameForKey:NSLocaleIdentifier
value:lang]
);
答案 1 :(得分:0)
这是仅适用于iOS 8.1 模拟器的已知Apple问题 - 在8.1设备上无法重现。请参阅以下Xcode 6.1发行说明中的问题说明:
本地化和键盘设置(包括第三方键盘)是 iOS中的Safari,地图和开发人员应用程序未正确兑现 8.1模拟器。 [NSLocale currentLocale]返回en_US ,只有英语和表情符号键盘可用。 (18418630,18512161)。
有关详细信息,请参阅Xcode 6.1 Release Notes。