Localizable.strings файлы.. в xcode4
В xcode4 (я использовал v4.0.1 до сих пор и вчера загрузил v4.0.2.)
Я создал файлы Localizable.string и скомпилировал свой проект. (Как вы знаете, мой исходный код
использует макроскопическую функцию NSLocalizedString.)
Но мой проект не компилируется с файлом Localizable.string. Если я изменю весь код
в этом файле для комментариев (например, это → //), мой проект полностью скомпилирован.
В результате возникает проблема с файлами Localizable.string. Я искал об этом в Google,
Я обнаружил, что файлы UTF-8 (Localizable.string) изменены на UTF-16. И хотя я пробовал это... так и не работал.
В этот момент многие люди пытаются использовать файлы Localizable.string. Но они могли бы
решить эту проблему, которую я не могу сделать. Потому что вопросов об этой проблеме нет
так много.
=============================================== ================
В файле Localizable.string
"LOCAL_APP_GRADE" = "Основные"
"LOCAL_APP_LAST_UPDATED_DATE" = "2011/04/20"
"LOCAL_MAIN_MENU_TITLE" = "Главное меню"
В моем исходном коде
NSLocalizedString( @"LOCAL_MAIN_MENU_TITLE", @"" );
Сообщение об ошибке,
Скопировать файл .strings Ошибка проверки не удалось: данные не могли быть прочитаны потому что он был поврежден.
Ответы
Ответ 1
Я предполагаю Xcode 4 здесь. Дважды проверьте, что он показывает для кодировки в каждом файле Localization.string в инспекторе файлов. Когда я получил эту ошибку, это было связано с тем, что один из файлов читался как Mac Roman вместо UTF-16. Как только я изменил кодировку, предупреждение исчезло. Сначала меня заводили гайки, что предупреждение происходило только в Xcode 4. Xcode 3 не дал этого.
У вас также возникла проблема с форматированием вашего файла .string. Все строки должны заканчиваться точкой с запятой.
"LOCAL_APP_GRADE" = "Basic";
"LOCAL_APP_LAST_UPDATED_DATE" = "2011/04/20";
"LOCAL_MAIN_MENU_TITLE" = "Main Menu";
Я не думаю, что это причина предупреждения. По крайней мере, я никогда не видел предупреждения. Обычно это проявляется только во время выполнения, когда LOCAL_MAIN_MENU_TITLE отображается в приложении вместо главного меню. Было бы неплохо, если бы процесс сборки выполнял проверку для точек с запятой. Легко пропустить добавление при редактировании файлов.
Ответ 2
В Apple:
Если вы столкнулись с проблемами во время тестирования и обнаружите, что функции и макросы для извлечения строк всегда возвращают один и тот же ключ (в отличие от переведенного значения), запустите инструмент /usr/bin/plutil ваш файл строк. Файл строк по существу является файлом списка свойств отформатирован особым образом. Запуск plutil с опцией -lint может раскрыть скрытые символы или другие ошибки, которые предотвращают строки от правильного получения.
Запустите консольное окно, зайдите в папку проекта и выполните:
/usr/bin/plutil -lint ja.lproj/Localizable.strings
(очевидно, замените правильное имя языковой папки). Это точно скажет вам, в чем проблема!
Ответ 3
Все строки в файле .strings должны заканчиваться точкой с запятой. Это сработало для меня.
Ответ 4
У меня была такая же проблема сегодня после импорта локализаций из Apple Notes, и причина была очень тонкой. Стандартные двойные кавычки были заменены короткими двойными кавычками.
Скользящая двойная кавычка:
Стандартная двойная кавычка: "
Ответ 5
Я боролся с этой же ошибкой, и в итоге у меня была пара подобных проблем, но с разными деталями. Во-первых, даже если кажется, что встроенный инструмент "встроенный экземпляр" Xcode должен иметь возможность обрабатывать файлы в формате little-endian или big-endian UTF-16, он действительно обрабатывает только большой endian. Моя теория заключается в том, что он запускает некоторый дополнительный шаг проверки (возможно, используя утилиту командной строки plutil), которая не использовалась в Xcode 3, и этот инструмент работает только на широкоформатном UTF-16. Не совсем уверен, хотя.
Второй трюк заключается в том, что вам нужно убедиться, что ваши файлы строк сохранены без спецификации (Byte Order Marker). Я сделал некоторое редактирование моих файлов .strings в BBEdit, который закончил тем, что сохранил спецификацию в файле, а также, похоже, делает Xcode 4 подходящим. Сам Xcode не имеет способа удалить спецификацию из файла, поэтому это нужно сделать в текстовом редакторе, таком как BBEdit или TextWrangler, который может сделать это для вас.
Ответ 6
Возможно, у вас есть что-то вроде:
"Bla" = "бла";;
Обратите внимание на дубликат; символ. Если у вас есть это, он будет скомпилирован правильно, но не будет работать во время выполнения.
Ответ 7
В связи с этим - позаботьтесь о том, чтобы вручную слить строки в Localizable.strings - мне удалось скопировать/вставить BOTH строки из макроса NSLocalizedString(), чтобы запись Localizable.strings была в этой форме:
"KEY" = "STRING", @"COMMENT STRING COPIED ACROSS ALSO, IN ERROR";
Бит ,@"xxx"
при построении заставил меня получить ошибку:
Сбой чтения: данные не могут быть прочитаны, потому что они не соответствуют Формат.
В этом случае быстрый поиск по @"
помог определить места, которые я сделал.
Ответ 8
У меня была эта проблема. Мое исправление? Добавьте новую строку вверху файла. Необычный, но он заработал у меня.
Поэтому вместо того, чтобы в верхней части моего файла было следующее:
/* comment */
"LOCAL_APP_GRADE" = "Basic"
Мне пришлось делать:
[newline]
/* comment */
"LOCAL_APP_GRADE" = "Basic"
(Невозможно получить правильное форматирование - не набирайте 'newline', просто нажмите return!)
Ответ 9
Похоже, это стандартное сообщение для ошибки чтения файла строк.
В моем случае это была двоеточие (толщина json force), а не знак равенства:
"key1" = "String1";
"key2" : "String2";
"key3" = "String3";
Изменено на =
, и все работает нормально.
Ответ 10
Моя проблема заключалась в том, что я забыл ;
в одной из строк
Ответ 11
Убедитесь, что вы указали строку в следующем формате:
"YOUR_STRING_LABEL" = "Your message";
Примечание: Не забывайте Знаки котировок ("), Знак равенства (=) и Точка с запятой (;) в конце.
Ответ 12
С Xcode 10.1 одна пропущенная точка с запятой останавливает компиляцию с этой ошибкой:
Localizable.strings: чтение не удалось: не удалось проанализировать список свойств, поскольку входные данные были в недопустимом формате
Кстати, вы можете узнать, является ли ошибка общей для вашего файла (проблема с кодировкой) или специфичной для одной или нескольких строк, временно удалив большую часть содержимого файла. Затем вы можете найти проблему, постепенно добавляя содержимое обратно, пока ошибка не вернется.