Подтвердить что ты не робот

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 Ошибка проверки не удалось: данные не могли быть прочитаны потому что он был поврежден.

4b9b3361

Ответ 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: чтение не удалось: не удалось проанализировать список свойств, поскольку входные данные были в недопустимом формате

Кстати, вы можете узнать, является ли ошибка общей для вашего файла (проблема с кодировкой) или специфичной для одной или нескольких строк, временно удалив большую часть содержимого файла. Затем вы можете найти проблему, постепенно добавляя содержимое обратно, пока ошибка не вернется.