Я знаю, что многие разработчики просто делают это так: они начинают разрабатывать свое приложение на английском языке и ставят NSLoclaizedString(@"Tap this to do that!", @"Telling what to do...")
вместо простого @"Tap this to do that!"
.
Затем они запускают genstrings
, который каким-то образом создает файл Localizable.strings, извлекая все эти строки. Грязная часть: длинный текст, используемый в коде, становится ключевым. Оно работает. До одного дня, когда вы быстро зайдете в свой код и измените английскую строку и забудете о локализации и о том, что она служит ключом для всех этих файлов Localizable.strings.
Так что я склонен использовать «настоящие» ключи, которые не перепутаны со строками. Для быстрого тестирования я создал проект, локализованный на английский и французский языки. Затем я установил язык симулятора на немецкий. Потому что, вы знаете, было бы ужасно плохо, если бы пользователь когда-либо увидел ключ вроде TTTDT
.
Итак, имея только английский и немецкий языки, я запустил демонстрационное приложение. И то, что я получил, было английским текстом из английского файла Localizable.strings.
Вывод: Похоже, что NSLocalizedString возвращается к английскому файлу, если приложение не поддерживает язык ОС.
Вопрос: При условии, что всегда есть файл Localizable.strings (English)
, и ключи В нем находятся вместе с правильно отформатированными значениями. Существуют ли обстоятельства, при которых NSLocalizedString завершится с ошибкой, а затем отобразит ключ напрямую?