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

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

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

Также пытался сделать все, что есть в этом< /а> вопрос.

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

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


person Yossi Tsafar    schedule 14.12.2015    source источник
comment
Ваш файл называется Localizable.string или Localizable.strings?   -  person James P    schedule 14.12.2015
comment
Имя файла Localizable.strings.   -  person Yossi Tsafar    schedule 14.12.2015


Ответы (3)


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

"KEY" ;= "Value"

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

person Yossi Tsafar    schedule 16.12.2015
comment
У меня была аналогичная проблема, в моем случае это было двойное ;;. "KEY" = "Value";; - person Iosif; 26.07.2018

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

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

person Pradeep K    schedule 23.12.2015

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

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

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

Targets -> BuildPhases -> Copy Bundle Resources

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

person Meet Doshi    schedule 19.12.2015