Localizable.strings - данные не могут быть прочитаны, потому что они имеют неправильный формат.

Если я копирую что-то из textedit или в Интернете и вставляю в локализуемый файл, появляется эта ошибка компиляции. Если я ввожу их в локализуемый файл, он не показывает никаких ошибок. Уверяю вас, что я использую правильный формат и ';' в файле.

"New" = "New";
"In Progress" = "In Progress";
"Waiting" = "Waiting";
"Closed" = "Closed";

person Rashad    schedule 25.10.2017    source источник


Ответы (21)


  • Используйте plutil из Терминала:

вы должны запускать его для каждой версии локализуемого файла. Например

  1. cd в корень вашего проекта
  2. cd eb.lproj - вы можете заменить его любой локализацией, с которой работаете.
  3. plutil -lint Localizable.strings

Когда вы запустите шаг 3, вам либо будет показано сообщение об ошибке, сообщающее, что не так с вашим файлом. Или вам скажут, что с файлом все в порядке

Обратите внимание, что вывод plutil плохой, кажется, он всегда говорит «Неожиданный символ в строке 1», но над этим выводом он печатает другие вещи, такие как отсутствие точки с запятой в строке 121, и это настоящая ошибка

person bat    schedule 25.10.2017
comment
Он показывает мне Unexpected character " at line 1, и это первая строка, такая как "app_name"="Any Name" - person Alexander Tumanin; 23.04.2018
comment
Обратите внимание, что вывод plutil плохой, кажется, он всегда говорит Неожиданный символ в строке 1, но над этим выводом он печатает другие вещи, такие как отсутствие точки с запятой в строке 121, и это настоящая ошибка ... - person BjornW; 25.04.2019
comment
Для меня plutil показывал ту же ошибку в строке 1, хотя ее не было. Но pl < Localizable.strings у меня сработало. - person Chanchal Raj; 26.02.2021

Для меня отсутствовали точки с запятой. Если вы используете инструмент для создания файла .strings, убедитесь, что нет неэкранированных кавычек, которые могут «съесть» разделяющие точки с запятой.

person Ahmed Khalaf    schedule 04.12.2017
comment
точка с запятой - моя проблема, так как я перешел на быстрый - person Omar N Shamali; 02.04.2019
comment
Здесь та же проблема. Спасибо! - person DiscDev; 16.11.2020
comment
этот ответ - настоящая КОЗЬЯ, никогда бы не понял этого, поскольку XCode дает очень бесполезную ошибку ... - person Shawn Frank; 14.07.2021

pl ‹Localizable.strings лучше, чем plutil -lint Localizable.strings

Журнал покажет что-то вроде этого

2019-08-14 16: 39: 34.066 pl [21007: 428513] CFPropertyListCreateFromXMLData (): синтаксический анализатор plist в старом стиле: отсутствует точка с запятой в словаре в строке 427. Анализ будет прекращен. Прервите _CFPropertyListMissingSemicolon для отладки. 2019-08-14 16: 39: 34.068 pl [21007: 428513] CFPropertyListCreateFromXMLData (): синтаксический анализатор plist в старом стиле: отсутствует точка с запятой в словаре в строке 427. Анализ будет прекращен. Прервите _CFPropertyListMissingSemicolon для отладки. 2019-08-14 16:39: 34.071 pl [21007: 428513] *** Список свойств ASCII синтаксического анализа исключений: NSParseErrorException Error Domain = NSCocoaErrorDomain Code = 3840 «Неожиданный символ / в строке 1» UserInfo = {NSDebugDescription = Неожиданный символ / в строка 1, kCFPropertyListOldStyleParsingError = Error Domain = NSCocoaErrorDomain Code = 3840 «Отсутствует ';' в строке 427 "UserInfo = {NSDebugDescription = Missing ';' в строке 427}}

person Jerome    schedule 14.08.2019
comment
Это лучшее решение, и оно решило мою проблему. plutil показывает ошибку на 1-м символе, но pl ‹Localizable.strings действительно лучше, и он показывает правильный номер строки, где у вас есть проблема с * .plist - person Oleh Veheria; 30.09.2019
comment
Определенно лучшее решение. Он дает вам больше информации и номер строки для проблемы, а не общий вывод. - person BB193DEV; 04.02.2020

Я знаю, что этот вопрос задавался давно, но мой сценарий и решение немного отличаются. Сегодня я столкнулся с той же проблемой, но когда я попытался проверить ее с помощью

plutil -lint Localizable.strings

Я получил статус ОК, что означает, что все в порядке, затем я попытался найти проблему, используя

pl ‹Localizable.strings

Но снова я напечатал текст файла без упоминания об ошибке, затем я попробовал трюк, и он сработал.

  • Щелкните правой кнопкой мыши файл Localizable.strings.
  • Затем выберите вариант Открыть как.
  • Затем выберите вариант Список свойств ASCII.

Вот и все, XCode показывает мне проблему с номером строки, и проблема заключалась в том, что у меня был этот текст DéjàVerified в качестве ключа в указанной строке, это помогает мне идентифицировать и решать проблему, я надеюсь, что это сэкономит чье-то время .

Ваше здоровье!

person AQEEL AHMED    schedule 04.12.2020
comment
Лучший способ найти ошибку! - person Anirudha Mahale; 29.04.2021
comment
Где мы можем прочитать документацию по этой команде pl? Нигде не могу найти ‹; в любом случае это должно быть частью Xcode и сообщать нам, в чем именно проблема, вместо того, чтобы говорить нам найти неправильный символ в файле с сотнями тысяч символов! глупо ... открыть список свойств ASCII здесь не работает. - person Sergio; 29.04.2021

В моем случае между парой строк отсутствовал знак «=». Даже plutil не помог мне обнаружить строку с ошибкой. Я вручную проверил каждую пару строк. : /

person EsmaGo    schedule 21.01.2019

Кажется, ваш синтаксис в порядке, единственное, что я вижу, может "сломать" ваш файл и вызвать эту ошибку, - это символ кавычки. Убедитесь, что вы используете обычный ", а не в какой-либо другой форме, например, .

person Rashwan L    schedule 25.10.2017
comment
Нет, дело не в этом. В строках есть непечатаемые символы! Может быть, это связано с обновлением xocde или чем-то еще! - person Rashad; 26.10.2017
comment
Вы можете опубликовать его в своем ответе, и мы сможем его проанализировать. Трудно сказать, что не работает, с той небольшой информацией, которую вы предоставили до сих пор. - person Rashwan L; 26.10.2017

Для этого может быть несколько причин:

  1. Точка с запятой отсутствует.
  2. Недействительный пробел в файле.
  3. Другие недопустимые символы в файле.
  4. У меня в нем есть слияние конфликтных персонажей!

<<<<<<< HEAD, ======= и >>>>>>>.

Обратите внимание, что plutil -lint Localizable.strings вернул OK для пункта 4!

person Chintan Shah    schedule 08.07.2020

У меня была такая же проблема, и я решил ее, прокомментировав или удалив неиспользуемые строки в моем файле Localizable.String :)

person Abid Mohamed Sadok    schedule 22.12.2017
comment
Мой SVN рассматривает файл .string как двоичный файл. Вы уверены, что столкнулись с чем-то подобным? - person Rashad; 02.01.2018

Также убедитесь, что имя файла строк всегда Localizable.strings

person Naishta    schedule 14.03.2019

Однажды у меня была похожая ошибка, и оказалось, что в середине файла был URL-адрес, например:

// Some Comment 1
"Some key 1" = "Some value 1";
http://...whatever...
// Some Comment 2
"Some key 2" = "Some value 2";

При вызове plutil -lint для этого файла вывод был:

Unexpected character / at line 1

Итак, первым символом действительно был /, поскольку файл начинался с комментария, но проблема была решена после удаления URL-адреса; или превратив его в комментарий, который на самом деле должен был быть. Обратите внимание, что URL-адрес находился далеко не в начале строкового файла, а примерно в середине строкового файла из 6000 строк. Я смог найти его, только просматривая историю коммитов и всегда просматривая изменения.

person Mecki    schedule 01.04.2019

если отсутствует ";" эта ошибка может возникнуть в конце всех строк в файле Localizable.string.

например: - "header_text" = "Текущий язык"; "change_language" = "Сменить язык";

"header_text" = "භාෂාව"; "change_language" = "භාෂාව වෙනස් කරන්න";

person Thanushka    schedule 27.04.2020
comment
Отлично, спасибо, брат, спас мой день (Y) - person KZoNE; 28.10.2020

Похоже, ваш info.plist имеет неправильную форму. проверьте это как следует. У меня тоже была такая же проблема. Я решил это, изменив свой info.plist.

person Ayush Dixit    schedule 12.02.2018

У меня была аналогичная проблема, когда я не экранировал строковое значение с помощью обратной косой черты \ для одного из моих строковых значений.

До:

"INVALID_NUMBER" = "Похоже, вы вводите неверный номер. Номер должен начинаться с" 0 "или" 7 "";

Обновлено:

"INVALID_NUMBER" = "Похоже, вы вводите неверный номер. Номер должен начинаться с \" 0 \ "или \" 7 \ "";

Обратные косые черты необходимы, если вы хотите отобразить кавычки "

Ознакомьтесь с здесь, чтобы узнать, как включать кавычки в строки

person Praveenkumar    schedule 23.04.2018

У меня только что был такой опыт:

  • внешний переводчик, выполняющий работу внутри Visual Code или других текстовых редакторов
  • Файлы не работают и появляется такая ошибка: (тестирование с помощью plutil -lint)

    Localizable.strings: Unexpected character " at line 1 CardRatingView.strings: Unexpected character / at line 2

Я только что создал новый файл в XCode, скопировал и вставил все содержимое файла, и внезапно все стало работать правильно.

Я предполагаю, что что-то может пойти не так / повредить сам файл при работе с другими текстовыми редакторами.

person Francesco Fiore    schedule 14.08.2018

Если отображается что-то вроде Unexpected character " at line 1, and it is the first string like "app_name"="Any Name"

Убедитесь, что формат файла - UTF16

person Alexandre G    schedule 14.03.2019
comment
Почему? Строковые файлы также могут быть в кодировке UTF-8. Все мои строковые файлы всегда имеют кодировку UTF-8, и это никогда не было проблемой. На самом деле существует параметр Xcode, который позволяет вам выбирать, какие файлы Xcode должен записывать на выходе при копировании строковых файлов, и даже этот параметр позволяет вам выбирать UTF-8, UTF-16 или двоичный. - person Mecki; 01.04.2019
comment
Эй, да, позже я понял, что вы описываете. Я думаю, что ошибка связана с тем, что Xcode считает, что файл находится в одной кодировке, а на самом деле - в другой. - person Alexandre G; 02.04.2019
comment
Для файлов UTF-16 требуется спецификация. Если спецификации нет, macOS обычно использует UTF-8. Но если вы хотите использовать UTF-8 в месте, где ожидается UTF-16, это часто также работает, если вы размещаете спецификацию UTF-8 (спецификации не являются обязательными для UTF-8, но macOS обычно их распознает). de.wikipedia.org/wiki/Byte_Order_Mark - person Mecki; 02.04.2019

Я столкнулся с этой проблемой, все мое форматирование было правильным. Проверка на недопустимые символы с помощью plutil -lint Localizable.strings и с использованием библиотек ruby, таких как "utf8_utils", также не помогала обнаруживать недопустимые символы. НО, когда я вставил содержимое Localizable.strings в приложение «Терминал» при запуске irb, оно показало мне странные символы.

"PercentComplete" = "%d procent gennemført";

Вставил в irb:

"PercentComplete"\U+FFC2\U+FFA0= "%d procent gennemf\U+FFC3\U+FFB8rt";

Тогда все, что мне нужно было сделать, это заменить регулярное выражение, чтобы исправить эти странные символы пробела: \U+FFC2\U+FFA0

person prolfe    schedule 03.07.2019

Благодаря предложению plutil я понял, что для его работы вам нужно удалить также все символы \ или *, которые не читаются как комментарии, и, что важно, добавить; в конец файла. Xcode 11.5.

person Lorenzo    schedule 12.06.2020

Если pl и plutil не обнаруживают проблем, проверьте кодировку файла. У меня дважды возникала аналогичная проблема, и в моем случае это было из-за неправильной кодировки, хотя я понятия не имею, как она была изменена (я буквально добавил одну строку в середину файла в X-Code). Преобразование из UTF-16LE в UTF-16BE в каком-либо редакторе (я использовал Android Studio) устранило проблему.

person Dmitry    schedule 17.02.2021

Это может быть связано с неправильным форматом файла перевода.

Вы можете загрузить программное обеспечение для Mac под названием Локализуемый.

Это ссылка для загрузки: https://apps.apple.com/cn/app/localizable-%E7%BF%BB%E8%AF%91%E6%96%87%E4%BB%B6%E5%B7%A5%E5%85%B7/id1268616588?Mt=12,

вам нужно только перетащить Localizable.strings в программу, и она будет. Полезно указать, в какой строке файла может возникнуть проблема. Это сэкономило мне много времени. Теперь я делюсь этим с вами.

Надеюсь, это будет вам полезно.

person ChenYuan    schedule 14.03.2021

Для меня в моем коде была NSLocalizedString, содержащая строковую интерполяцию, например. NSLocalizedString("\(product.price ?? "")per_month"). Когда я экспортировал локализации, это было добавлено в мой строковый файл, который тогда был в неправильном формате. Это сбило меня с толку, потому что мой строковый файл в Xcode выглядел нормально, но на самом деле файл обновлялся как часть процесса локализации экспорта, и в нем закрадывались ошибки.

Если у кого-то может быть такая же проблема, попробуйте вызвать genstrings отдельно и посмотреть, находится ли вновь созданный файл в правильном формате. Убедитесь, что вы сначала сохранили свои строки, так как это перезапишет ваш файл строк: find ./ -name "*.swift" -print0 | xargs -0 genstrings -SwiftUI -o en.lproj

person sally2000    schedule 02.06.2021

Похоже, у SVN возникла проблема с этим файлом. Поскольку он считает это двоичным файлом. Между каждым символом вставляется много непечатаемых символов. Я все еще не мог найти подходящего решения. Просто измените файлы Localizable.string с рабочего ПК, чтобы избежать каких-либо проблем с ним.

Обновление. Обновление клиента SVN (smartSVN) до последней версии решило проблему. Похоже, один из моих коллег использовал старую версию. Когда он зафиксировал изменение в локализуемом файле, это вызвало ошибку.

person Rashad    schedule 19.11.2017