2014-10-26 2 views
2

Со времени последнего обновления я не могу перевести код языка (en, fr и т. Д.) В их соответствующие имена (английский, французский и т. Д.).Перевести код языка с Xcode 6.1 с помощью NSLocale

Он работает на реальном устройстве, но не в эмуляторе. Он работал с использованием прежних версий 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); 
+0

Возможный дубликат [NSLocale currentLocale всегда возвращает «en \ _US» не текущий язык пользователя] (http://stackoverflow.com/questions/1522210/nslocale-currentlocale-always-returns-en-us-not-users- current-language) – Zorayr

ответ

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 

Чтобы обойти проблему, использовать первый. Использование objectForKey в экземпляре currentLocal работает.

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] 
    ); 
+0

Хмм, мне кажется, что то, что вы делаете, точно так же, как код в конце моего вопроса, но я принимаю его, потому что он решает мою проблему. Благодаря! –

0

Это известная проблема для Apple, IOS 8.1 тренажере только - не воспроизводимого на 8.1 устройств. Ниже описание проблемы с Xcode примечаний 6,1 выпуска:

Локализация и настройка клавиатуры (в том числе 3-клавишных партий) являются не правильно честь Safari, Карт и приложениями для разработчиков в IOS 8.1 Simulator. [NSLocale currentLocale] возвращает en_US и доступны только английские и Emoji клавиатуры. (18418630, 18512161).

См. Xcode 6.1 Release Notes для получения более подробной информации.

Смежные вопросы