2

自上次更新以来,我无法将语言代码(en、fr 等...)翻译成各自的名称(英语、法语等...)。

它适用于真实设备,但不适用于模拟器。它使用以前版本的 Xcode 工作。我知道它写在发行说明中,在某些情况下[NSLocale currentLocale]可能会返回en_US,但这并不能解释为什么它们不再被“翻译”。我使用这段代码:

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);
4

2 回答 2

2

来自Xcode 发行说明

在某些情况下,[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]
      );
于 2014-10-29T15:22:56.633 回答
0

这是仅适用于 iOS 8.1模拟器的已知 Apple 问题- 无法在 8.1 设备上重现。请参阅 Xcode 6.1 发行说明中的​​以下问题描述:

iOS 8.1 模拟器中的 Safari、地图和开发者应用程序未正确支持本地化和键盘设置(包括 3rd 方键盘)。[NSLocale currentLocale] 返回 en_US并且只有英文和表情符号键盘可用。(18418630、18512161)。

有关更多详细信息,请参阅Xcode 6.1 发行说明

于 2014-11-05T23:41:50.017 回答