#localization #xcode4
#локализация #xcode4
Вопрос:
Как мне определить локализованные строки в Xcode 4?
Я предположил, что могу просто добавить языки в InfoPlist.strings, используя свойство «Localization» (инспектор файлов, правая панель).
… и затем введите «ключ» = «значения» в каждой локализованной версии.
Но я не могу собрать проект. Я получаю эту ошибку:
Ошибка проверки ошибки файла Copy .strings: данные не удалось прочитать, поскольку они были повреждены.
Преобразование кодировки текста в UTF 16 не устраняет проблему. Также не выполняется выход из Xcode и его повторный запуск.
Q1: Как мне исправить эти ошибки сборки?
По какой-то случайности мне однажды удалось запустить тестовое приложение, добавив InfoPlist.strings (французский) и (английский) языки. Я не получил ошибку во французском файле strings, но я получил ее с английским. Поэтому я оставил английский в покое и просто ввел параметр во французский. Однако в симуляторе установлено значение French — параметр не был подобран. Он вернулся к значению по умолчанию, указанному в NSLocalizedString()
Q2: Как мне заставить его работать, даже если ошибки сборки исправлены?
Ответ №1:
Может быть так же просто, как пропущенная точка с запятой в конце строки.
Комментарии:
1. Спасибо. Это помогло. Однако, хотя он создается и запускается, он все равно не работает. NSLocalizedString (@»default»,@»приветствие») постоянно выдает значение по умолчанию.
2. У вас есть несколько файлов .strings? Если это так, NSLocalizedStringFromTable.
3. Теперь это работает. Не уверен, почему. Может быть, сохранение и загрузка снова?
4. ваша проблема заключалась в том, что NSLocalizedString(x, y) принимает нужный вам ключ в качестве первого аргумента (x) и комментарий в качестве второго (y), поэтому то, что вы написали в своем комментарии, должно было быть:
NSLocalizedString(@"greeting", @"default")
5. При отсутствии точки с запятой Xcode каким-то образом не показывает это предупреждение, пока вы не закроете и не откроете его повторно. Проект выполняется без каких-либо ошибок или предупреждений. Вы просто получаете ключи в виде значений. Вы видите, в чем проблема, сразу после перезапуска Xcode.
Ответ №2:
У меня была такая же проблема с поиском ошибок в файле локализации…
Просто используйте инструмент plutil в терминале для преобразования файла, и вы получите правильное сообщение об ошибке с номером строки.
plutil -lint Localizable.strings
Ответ
plutil[74058:707] CFPropertyListCreateFromXMLData(): анализатор plist в старом стиле: отсутствует точка с запятой в словаре в строке 422. Синтаксический анализ будет прекращен. Прервите _CFPropertyListMissingSemicolon для отладки. Localizable.strings: неожиданный символ «в строке 1
Комментарии:
1. Полностью согласен с @Jason; это сразу выявило мою проблему (которую Xcode даже не нашел — он просто не показывал переводы в приложении). Хорошая находка, @TomTom !!
2. Возможно, лучший ответ в любом месте StackOverflow! спасибо (в моем случае проблема была вызвана несколькими умными кавычками)
3. Большое спасибо, не хватало ‘;’ но то же самое утомительно находить в большом файле,
Ответ №3:
да, только что просмотрел 500 переводов
обратите внимание, что ПОЦЕЛУЙ во второй строке заключен в двойные кавычки, которые находятся ВНУТРИ другой ОШИБКИ ДВОЙНЫХ КАВЫЧЕК
"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers "KISS" müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";
Все в порядке
"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers KISS müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";
как это (заменить одинарными кавычками ВНУТРИ DOUBLE)
"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers 'KISS' müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";
СОВЕТ
ИСПОЛЬЗУЙТЕ ДВОИЧНЫЙ ПОИСК, чтобы найти строку-нарушитель.
- верните локализованные файлы из translator.
- скопируйте все Loclaizable.strings в локализованные папки вашего проекта.
- Откройте XCODE
- Очистить все устройства iOS / все симуляторы
- Сборка
- Ошибка проверки ошибки файла Copy .strings: данные не удалось прочитать, поскольку они были повреждены.
- Откройте навигатор журналов
- Посмотрите, какой из переводов поврежден.
- Я открыл Localizable.strings в TextWrangler Внизу на панели инструментов Переводчик отправил обратно файл UTF-16 как
Кодировка с небольшим окончанием UTF-16 изменила его обратно просто на ‘UTF-16’ 10. Очищенная сборка / Build ТА ЖЕ ОШИБКА
Где-то в файле
Отсутствует точка с запятой?
/* popup message */
"Save mix" = "Enregistrer le mixage";
/* popup message */
"Save mix" = "Enregistrer le mixage"
«Лишние»двойные кавычки «внутри двойных кавычек»
НЕВЕРНО
/* popup message */
"Save mix" = "Enregistrer le "mix" age"
ПРАВИЛЬНО
/* popup message */
"Save mix" = "Enregistrer le mixage"
ТАКЖЕ ВЕРНО
/* popup message */
"Save mix" = "Enregistrer le 'mix'age"
- помните, что в файле может быть более одной ошибки
Я нашел «KISS» в двойных кавычках в двух местах
Комментарии:
1. Спасибо .. у меня отсутствовали двойные кавычки!
Ответ №4:
Проверьте кодировку вашего файла. Это часто вызывается расширенными символами (например, символами с ударением) и кодировкой, отличной от UTF. В частности, в XCode 4 есть ошибка, из-за которой при копировании символов с ударением в файл strings из Safari он будет сохранен как Western Mac OS Roman.
Комментарии:
1. Да, моему файлу strings каким-то образом была перенастроена кодировка UTF8, установка ее в UTF16 позволила успешно выполнить сборку.
2. Несмотря на то, что у меня были только допустимые символы UTF-8, изменение моих файлов на UTF-16 исправило эту ошибку.
Ответ №5:
Жаль, что средство проверки синтаксиса XCode не может это выяснить.
Вы также можете скопировать текст в Text Wrangler (что я делаю после получения файла от переводчика), чтобы проверить правильность строк, заключенных в кавычки, или запустить регулярное выражение, проверяющее наличие точек с запятой. Синтаксическая раскраска в Text Wrangler отобразит строки, заключенные в неправильные кавычки (или неправильно экранированные), там, где в данный момент нет строк в редакторе XCode.
Комментарии:
1. TextMate делает то же самое.
2. TextWrangler (который теперь является BBEdit ) с его синтаксической раскраской — отличный способ проверить, нет ли проблем в файле. В моем случае были пробелы, которые не были обычными.
View > Text Display > Show Invisibles
покажет вам эти проблемные символы.
Ответ №6:
В моем случае plutil -lint Localizable.strings
не помогло, потому что сообщение об ошибке, которое оно выдало, было « Unexpected character " at line 1
«, когда реальной ошибкой было ”
вместо "
a в строке 2340.
Ответ №7:
В моем случае это была проблема с копией знака «цитата», вставленного с веб-сайта, который не был принят.
Я должен был обнаружить, что подсветка синтаксиса не работает, но я только что прочитал источник «знак кавычки, ключ, знак кавычки, знак равенства, знак кавычки, значение, знак кавычки… да, хорошо».
Ответ №8:
Если вы используете двойные кавычки «» в своей локализации, не забудьте экранировать их с помощью обратной косой черты.
Ответ №9:
Следует проверить синтаксис следующим образом
"Recharge_Data" = "Data";
1) «» должно быть там в надлежащем месте.
2) = должно быть проверено.
3); должно быть там в конце инструкции.
Ответ №10:
У меня была такая же проблема. У меня был файл локализации длиной около 60 страниц, и было только одно «слишком много — потребовалось некоторое время, чтобы определить это
Ответ №11:
У меня была такая же проблема с большим локализованным файлом в течение часа, и применение всех вышеуказанных шагов не решит мою проблему, наконец, что я закончил, так это разделить локализованный файл на некоторые диапазоны (части), скажем, часть-a, b, c … и вырежьте эти строки из файла и сохраните их в текстовом файле, создайте проект заново, до тех пор, пока я не дойду до точки, где осталась только часть k, я обнаружил, что по ошибке нажал f на своей клавиатуре ..fewwww! это решено. Я знаю, что это не решение, но может помочь кому-то вроде меня 🙂
Ответ №12:
Мой друг сделал для меня перевод в Windows. Я обнаружил, что изменение кодировки не помогает, поэтому вот что я сделал: я прокомментировал все строки, а затем раскомментировал несколько и нажал cmd-B, чтобы выяснить, в каких строках возникли проблемы. Затем я переписал проблемные строки вручную, и после этого все заработало.