NSLocalizedString возвращает текст, который нигде не определен - PullRequest
4 голосов
/ 24 января 2012

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

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

Просто чтобы быть уверенным, я помещаю оператор NSLog в один из вызовов NSLocalizedString, например:

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

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

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

Ответы [ 3 ]

4 голосов
/ 24 января 2012

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

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

0 голосов
/ 24 января 2012

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

При повторном развертывании новой сборкиприложение даже после чистой сборки часто не очищает кэшированное содержимое ранее созданной версии.

0 голосов
/ 24 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...