NSLocalizedString возвращает текст, который нигде не определен

Хорошо, я официально ошеломлен. Некоторое время назад я начал проект IOS и немного возился с локализацией в начале, что привело к некоторой путанице, потому что я еще не знал, как это сделать правильно.

Теперь я решил сделать локализацию с нуля, поэтому выбросил все файлы .string и создал правильную многоязычную структуру. Я начал с пустых файлов Localizable.strings и запустил приложение, чтобы проверить, все ли правильно очистил. Я предположил, что с пустыми файлами Localizable.string мои вызовы «NSLocalizedString» просто вернут ключ в виде текста. Они не делают. Они по-прежнему возвращают старый текст, который у меня был в старых файлах .strings.

На всякий случай я поместил оператор NSLog под одним из вызовов NSLocalizedString, как таковой:

NSString *text = NSLocalizedString( key, nil );
NSLog(@"key=%@ text=%@", key, text);

Затем я просматриваю весь свой жесткий диск в поисках возвращенного текста. Ни один файл на моем жестком диске не содержит строку, которую возвращает NSLocalizedString. И это совершенно другая строка, чем ключ, поэтому она также не может быть создана с помощью NSLocalizedString.

Кто-нибудь знает, как это может произойти? XCode где-то кэширует старую информацию? Как убедить инструмент использовать новые файлы Localizable.strings? Очевидно, я уже "очистил" и пересобрал весь проект.


person fishinear    schedule 24.01.2012    source источник
comment
Вы можете попробовать удалить приложение со своего устройства и снова запустить его. В прошлом я замечал, что удаленные ресурсы не удаляются на устройстве во время разработки.   -  person Brian Walker    schedule 24.01.2012


Ответы (3)


Попробуйте удалить приложение с телефона, затем очистите свой проект и установите приложение заново.

Если это все еще не работает, убедитесь, что вы как-то не напутали с правилами сборки (Xcode 4 -> выберите цель -> вкладка «Правила сборки»). Там проверьте, не слишком ли много «CopyStringsFile» правила, не использующие «CopyStringsFile». Если это так, вы можете удалить их все, кроме одного.

person Johann    schedule 24.01.2012
comment
Спасибо. Удаление приложения с устройства (симулятор в моем случае) помогло. - person fishinear; 24.01.2012

Если вы тестируете на симуляторе, попробуйте сбросить настройки симулятора с помощью опции «Сбросить содержимое и настройки…» в меню приложения «Симулятор iOS».

Когда вы повторно развертываете новую сборку приложения, даже после чистой сборки, она часто не очищает кэшированное содержимое ранее созданной версии.

person Nick Lockwood    schedule 24.01.2012

Вы также чистили папку сборки? command + option + shift + k или перейдите к продукту, нажмите option, будет чистая папка сборки, обычно файл ресурсов кэшируется, любая замена файла ресурсов (файл с тем же именем файла, но другим объектом) может не быть обнаружена XCode

Также помогает удаление приложения/сброс симулятора. Удаленные файлы иногда не удаляются при повторном развертывании.

person X Slash    schedule 24.01.2012
comment
Спасибо за подсказку, я не знал о такой возможности. К сожалению не помогло - person fishinear; 24.01.2012
comment
на самом деле, вы пытались удалить приложение со своего симулятора/устройства? это может помочь! - person X Slash; 24.01.2012