NSLocale currentLocale всегда возвращает «en_US», а не текущий язык пользователя

Я участвую в процессах интернационализации приложения iPhone – мне нужно внести программные изменения в определенные представления, основываясь на том, что представляет собой текущий язык пользователя. Я схожу с ума, потому что независимо от того, какие языковые предпочтения на симуляторе iPhone или на самом современном оборудовании, locale всегда оценивается как «en_US»:

 NSString *locale = [[NSLocale currentLocale] localeIdentifier]; NSLog(@"current locale: %@", locale); 

Сумасшедшая вещь заключается в том, что остальная часть приложения ведет себя так, как ожидалось. Правильные строки выбираются из файла Localization.strings и используются в интерфейсе, и используются правильные .xib-файлы для выбранной локали.

Я также пробовал следующее, безрезультатно и с тем же результатом:

 NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier]; NSLog(@"current locale: %@", locale); 

Есть что-то простое, что мне не хватает? Предпочтение или импорт возможно?

То, что я раньше делал:

Как говорит Даррен, предпочтение, которое я ищу, не в NSLocale , скорее оно здесь:

 NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"]; NSString* preferredLanguage = [languages objectAtIndex:0]; NSLog(@"preferredLanguage: %@", preferredLang); 

Ответ Питера кажется лучшим решением:

 NSArray* preferredLanguages = [NSLocale preferredLanguages]; NSLog(@"preferredLanguages: %@", preferredLanguages); 

Вместо того, чтобы напрямую запрашивать значения по умолчанию с помощью недокументированного ключа, обратитесь к classу NSLocale для массива предпочтительных языков .

[NSLocale currentLocale] основана на настройках Region Format устройства, а не на языке. Если регион установлен в Соединенные Штаты, вы получите en_US, независимо от того, какой язык вы используете.

Вместо этого используйте этот язык устройства:

 NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; 

Как описано здесь: Получение текущего языка устройства в iOS?

для меня, оба

 NSString *localeString = [[NSLocale currentLocale] localeIdentifier]; 

а также

 NSArray *array = [NSLocale preferredLanguages]; self.label.text = array[0]; 

вы получите тот же результат, когда вы находитесь в симуляторе.

Для нас проблема заключалась в том, что мы переопределили язык приложений и область приложений в нашей схеме dev. Убедитесь, что Язык приложения установлен в «Системный язык» в параметрах схемы («Изменить схему -> Параметры»).

я обнаружил, что если я оставлю «en_US», но имею локализацию «en», которая является копией «en_US», симулятор автоматически начнет соблюдать языковые настройки, но как только «en_US» будет вариантом, он всегда выбирает его независимо настроек.

У меня возникла проблема, когда имена месяцев форматирования выходили на английском языке на устройстве, установленном на французский язык.

Мое решение состояло в том, чтобы использовать это:

  NSLocale *locale = [NSLocale localeWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0] ]; [self.monthNameFormatter setLocale:locale]; [self.monthNameFormatter setDateFormat:@"MMMM"]; [self.monthNameFormatter stringFromDate:myDate]; 

Вопрос слишком стар, но этот код может помочь многим:

Главное.m должно выглядеть так:

  NSString *localecode=[[NSLocale currentLocale] localeIdentifier]; localecode=[localecode substringToIndex:2]; //en_GB -> en NSArray *arr = [NSLocale preferredLanguages]; NSMutableArray * mutable = [arr mutableCopy]; NSString *prefered = [mutable firstObject]; if(![localecode isEqualToString:prefered]){ if(![prefered isEqualToString:@"es"] && ![prefered isEqualToString:@"en"] && ![prefered isEqualToString:@"pt"]){ int index = [mutable indexOfObject:@"en"]; [mutable replaceObjectAtIndex:0 withObject:@"en"]; [mutable replaceObjectAtIndex:index withObject:prefered]; [[NSUserDefaults standardUserDefaults] setObject:mutable forKey:@"AppleLanguages"]; } else{ int index = [mutable indexOfObject:localecode]; [mutable replaceObjectAtIndex:0 withObject:localecode]; [mutable replaceObjectAtIndex:index withObject:prefered]; [[NSUserDefaults standardUserDefaults] setObject:mutable forKey:@"AppleLanguages"]; } } return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

Что это? Если текущий язык устройства на испанском, английском или португальском языках использует приложение, использует локализованные строки, с другой стороны, если текущий язык не является одним из тех и не поддерживается приложением, устанавливается на английский язык.

Он показывает правильную локаль, когда на реальном iPad. Тем не менее, у симулятора есть свой iOS, который по умолчанию установлен в en-US. Перейдите к настройкам iOS симулятора и переключите язык и регион на тот, который вы хотите.

Это делает трюк.

  • NSString tokenize в Objective-C
  • Как называется эта форма определения?
  • Как преобразовать NSInteger в int?
  • Как получить столбец datetime в SQLite с Objective C
  • Префикс имен свойств с подчеркиванием в Objective C
  • Должен ли я использовать свойства или прямую ссылку при доступе к переменным экземпляра внутри?
  • "F" после числа / float в Objective-C / C
  • Почему обесцвечиваются зонтичные frameworks?
  • Получение NSDecimalNumber из определенной в локали строки?
  • Как использовать C ++ с Objective-C в XCode
  • Извлечение текста pdf в Objective C
  • Interesting Posts

    Как я могу представить очень большое целое число в .NET?

    Почему подключение к моей работе VPN приводит к тому, что мой интернет не работает?

    ipad safari: отключить прокрутку и эффект отскока?

    Как установить изображение экрана блокировки Android

    замените String другим в java

    Невозможно создать рабочий проект meteor.js на бродячем боксе

    Как запустить полностью независимый процесс из Java-программы?

    Обнаружение, когда SerialPort отключается

    Как сказать Windows 7 «спать, когда ноутбук закрыт, если не подключен внешний монитор; То используйте это?

    Как использовать ключевое слово C # в качестве имени свойства?

    В чем разница между размером и размером на диске?

    Вложенные круглые скобки

    Невозможно использовать определенный раздел для установки Ubuntu

    Иконки для Chrome и Firefox пропали без изменений после обновления Windows-10 до ноября Обновление 1511

    Как отключить объекты в Entity Framework Code First?

    Давайте будем гением компьютера.