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

Я также пробовал:

  • Пустой кэш
  • Очистка всех целей
  • Удалить папку с исходными данными
  • Restart
  • Reset симулятор
  • Преобразование в UTF-16
  • Удалите все файлы локализации и заново создайте их.

Также попытался сделать все, что находится в этом вопросе.

Важно сказать, что это не просто проблема симулятора/кэша. Он также показывает на устройствах, которые загружают приложение. (У меня есть учетная запись Enterprise).

Что еще я могу сделать, чтобы идентифицировать или исправить проблему?

Ответы

Ответ 1

Итак, я нашел проблему, я думаю, кто перевел файлы Localizable.strings для меня, это мудак. В 4-х местах в файле моих строк была строка:

"KEY" ;= "Value"

Эта строка вызывает какой-то сбой, но пусть компилятор может успешно сработать по какой-то причине. Вот почему я не смог найти ошибку, только когда я решил взять последний ключ и значение, которые не перевести, и переместить их в начало файла Localizable.strings. Затем я смог понять и увидеть, что проблема находится где-то посередине файла, а верхние клавиши и значения переведены хорошо.

Ответ 2

Одна вещь, которую вы можете уловить такие ошибки, - это сделать копию файла строк, изменить расширение на plist и попытаться открыть его в Xcode. Если в файле строк есть какая-либо проблема, она будет отображаться в Xcode, поскольку словарь будет содержать только ключи до точки, где есть ошибка. Затем вы можете выполнить операцию поиска и найти ошибку, пока не убедитесь, что все строки отображаются в файле plist. Затем вы можете переименовать файл обратно в .strings

введите описание изображения здесь

Ответ 3

Если вы укажете table:nil, тогда NSBundle попытается извлечь локализацию из таблицы по умолчанию (таковой в SOMELANG.lproj/Localizable.strings). Если у вас есть localization в другом месте, вы должны явно указать таблицу с помощью table:@"File" (или использовать макрос NSLocalizedStringFromTable() аналогичным образом:

NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil);

Кроме того, Дважды проверьте, что файл Localizable.strings добавляется в

Targets -> BuildPhases -> Copy Bundle Resources

Он не был автоматически добавлен для меня.