Не удалось преобразовать resx в формат XLIFF

У меня есть форма с TableLayoutPanels, эти панели макета таблицы создают следующие записи в файле Resources.resx:

tableLayoutPanel1.LayoutSettings    <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="txtOutput" Row="0" RowSpan="1" Column="2" ColumnSpan="4" /><Control Name="lblOutput" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="btnRetry" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnContinue" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnFail_Test" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnPass_Test" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnTimeOut" Row="1" RowSpan="1" Column="3" ColumnSpan="1" /><Control Name="btnViewLog" Row="1" RowSpan="1" Column="4" ColumnSpan="1" /><Control Name="btnAbort" Row="1" RowSpan="1" Column="5" ColumnSpan="1" /></Controls><Columns Styles="Percent,16.66667,Percent,16.66667,Percent,16.66667,Percent,16.66667,Percent,16.66667,Percent,16.66667,Absolute,20" /><Rows Styles="Percent,58.77193,Percent,41.22807,Absolute,20" /></TableLayoutSettings>

Когда я пытаюсь собрать проект, я получаю следующую ошибку:

Не удалось преобразовать файл C:\MyProject\ProjectName\FormName.resx в формат XLIFF. Сообщение: Во время кодирования обнаружена неподдерживаемая инструкция обработки '?xml'. Пожалуйста, удалите неподдерживаемые инструкции по обработке из xml.

Я попытался переключить локализацию формы на «выключено», что позволяет мне строить, но тогда я теряю поддержку иностранного языка.

ПРИМЕЧАНИЯ:

  1. Удаление tableLayoutPanel1.LayoutSettings из файла resx позволяет мне скомпилировать, но тогда мой пользовательский интерфейс полностью уничтожается.

  2. Я использую Multilingual App Toolkit v4.0.1605.0

  3. Сообщество Visual Studio 2015, обновление 2

  4. Виндовс 7 64бит

  5. .NET4.5

Есть ли способ исправить эту проблему и одновременно использовать tableLayoutPanels и локализацию?


person iamthemerovingian    schedule 30.06.2016    source источник
comment
Почему вы хотите иметь эту строку в файле .resx? Нужно ли его локализовать?   -  person Jenszcz    schedule 01.07.2016
comment
@Jenszcz да, мне нужно поддерживать разные регионы.   -  person iamthemerovingian    schedule 01.07.2016
comment
Извините за многословность, но я не вижу, какая часть этой строки будет отличаться для французского языка от английского. Или речь идет о двунаправленных языках, и вы хотите предоставить другой макет столбца для арабского и иврита?   -  person Jenszcz    schedule 01.07.2016
comment
Я не эксперт в этом, но вот что я знаю.... файлы resx используются для сохранения данных региона о формах, а также общих настроек элементов управления. Поэтому, когда вы локализуете форму, она создает, например, локализованное имя формы resx en-GB.resx. Набор инструментов многоязычного приложения использует эти файлы resx для создания файла XLIFF. На этом последнем этапе моя сборка терпит неудачу.   -  person iamthemerovingian    schedule 01.07.2016
comment
Точно: решающим моментом являются «данные для конкретного региона». На мой взгляд, эта строка tableLayoutPanel1.LayoutSettings не зависит от региона, и поэтому она не должна находиться в файле resx. Если вы посмотрите это видео от Microsoft Build, в конце будет сказано (28 :06), что локализуемые строки должны быть помещены в файлы ресурсов, а нелокализуемые строки должны быть жестко запрограммированы. Если ваш макет столбца не зависит от локали, вам следует попробовать его жестко закодировать.   -  person Jenszcz    schedule 01.07.2016
comment
Я пытался удалить код макета таблицы из локализованного файла resx, но это разрушает макет моих элементов управления, когда я запускаю свое приложение на другом языке. Кроме того, VS продолжает добавлять этот бит каждый раз, когда я его удаляю... так что я, кажется, борюсь с системой здесь...   -  person iamthemerovingian    schedule 01.07.2016
comment
Вы должны удалить его не только из локализованного файла resx, но и из всех файлов resx и установить значение где-нибудь в коде формы. Пока он находится на исходном языке, VS попытается вернуть его на целевые языки.   -  person Jenszcz    schedule 01.07.2016
comment
Разве VS просто не поместит всю информацию, которую я удаляю из файлов resx, обратно в них при компиляции? Вот что происходит, когда я удаляю его из основного файла resx и локализованной версии. ВС кладет его обратно.   -  person iamthemerovingian    schedule 01.07.2016
comment
Я использую Visual Studio 2013, и когда я создаю форму с помощью TableLayoutPanel, я не получаю такую ​​строку, записанную в файл resx проекта или формы. Боюсь, я понятия не имею, откуда взялась ваша строка - извините. :-(   -  person Jenszcz    schedule 01.07.2016
comment
Его нет в разделе строки файла resx. Когда вы просматриваете файл resx в VS, в верхнем левом углу у вас будет кнопка с написанными на ней строками. Нажмите на нее, и вы получите раскрывающийся список, в котором вы можете выбрать «Другое» ..... там будут настройки макета таблицы.   -  person iamthemerovingian    schedule 01.07.2016
comment
Не для меня - это может отличаться между VS 2013 и 2015. Извините, я не думаю, что смогу вам помочь.   -  person Jenszcz    schedule 01.07.2016
comment
Хорошо, спасибо за попытку.   -  person iamthemerovingian    schedule 01.07.2016
comment
Я столкнулся с той же проблемой, предложение исправить эту ошибку можно найти здесь: multilingualapptoolkit.uservoice.com/forums/231158-general/   -  person Malick    schedule 04.08.2017


Ответы (1)


Я просто удалил "‹?xml version="1.0" encoding="utf-16"?›" и, кажется, это работает для меня. Объявление XML является необязательным в большинстве XML. Самый большой недостаток, который я вижу, это то, что мы переключили нашу кодировку с utf-8 на utf-16. Я просмотрел встроенный XML и не увидел никаких специальных символов. Поскольку файл имеет формат utf-8, я думаю, что это должен быть объект, если бы был какой-либо utf-16.

Прошло 4 года, так и не исправили.

person Bill    schedule 19.06.2020