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