Локализация приложения, показывающая ключ вместо значения в iOS
Я использую локализацию в своем приложении, но по какой-то причине некоторые строки (не все) не переводятся, я вижу ключ вместо значения. Я попытался проверить, находит ли приложение файлы локализации, выполнив следующее:
NSString *enPath = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSString *hePath = [[NSBundle mainBundle] pathForResource:@"he" ofType:@"lproj"];
NSString *ruPath = [[NSBundle mainBundle] pathForResource:@"ru" ofType:@"lproj"];
NSString *esPath = [[NSBundle mainBundle] pathForResource:@"es" ofType:@"lproj"];
NSString *frPath = [[NSBundle mainBundle] pathForResource:@"fr" ofType:@"lproj"];
NSString *arPath = [[NSBundle mainBundle] pathForResource:@"ar" ofType:@"lproj"];
И ни один из них не равен нулю.
Я проверил имя файла локализации, и это Localizable.strings
, как и должно быть.
Также проверил, существует ли ключ внутри файлов Localizable.strings
, и он существует.
Я тоже пробовал:
- пусто Кэш
- очистка всех целей
- удалить папку производных данных
- перезапуск
- Reset simulator
- преобразовать в UTF-16
- удалите все файлы локализации и создайте их заново.
Также старался делать все, что есть в этом вопросе.
Важно отметить, что это не просто проблема симулятора/кэша. Он также отображается на устройствах, которые загружают приложение. (У меня есть корпоративный счет).Что еще я могу сделать в чтобы определить или устранить проблему?
3 ответа:
Итак, я нашел проблему, я думаю, кто перевел файлы
Localizable.strings
для меня-мудак. В 4 местах в моем файле строк была строка следующего содержания:"KEY" ;= "Value"
Эта строка вызывает какой-то сбой, но пусть компилятор по какой-то причине успешно строит. Вот почему я не смог найти ошибку, только когда решил взять последний ключ и значение, которые не переводятся, и переместить их в верхнюю часть файла
Localizable.strings
. Тогда я смог понять и увидеть, что проблема находится где-то в середина файла и верхние клавиши и значения переведены нормально.
Единственное, что вы можете сделать, чтобы поймать такого рода ошибки, это сделать копию файла strings, изменить расширение на plist и попытаться открыть его в Xcode. Если в файле strings есть какая-либо проблема, она будет показана в Xcode, так как словарь будет содержать только ключи до того момента, когда произойдет ошибка. Затем вы можете выполнить операцию поиска и найти ошибку, пока не убедитесь, что все строки отображаются в файле plist. Затем вы можете переименовать файл обратно в .строки
Если вы укажете
table:nil
, тоNSBundle
попытается извлечь локализацию из таблицы по умолчанию (той, что вSOMELANG.lproj/Localizable.strings
). Если у вас естьlocalization
в другом месте, вы должны явно указать таблицу с помощьюtable:@"File"
(или использовать макросNSLocalizedStringFromTable()
аналогичным образом:NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil);
Также, Дважды проверьте, что файл
Localizable.strings
добавляется вОн не был добавлен автоматически для меня.Targets -> BuildPhases -> Copy Bundle Resources