使用NSLocale使用Xcode 6.1翻译语言代码

时间:2014-10-26 05:48:44

标签: ios objective-c xcode nslocale xcode6.1

自上次更新以来,我无法将语言代码(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);

2 个答案:

答案 0 :(得分:2)

来自Xcode release note

  

在某些情况下,[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