Локализация приложения, показывающая ключ вместо значения в 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 15

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
Он не был добавлен автоматически для меня.