Как я могу сравнить несколько файлов .resx? - PullRequest
22 голосов
/ 26 сентября 2008

Как сравнить содержимое двух (или более) больших файлов .resx? С сотнями пар Имя / Значение в каждом файле было бы очень полезно просмотреть комбинированную версию. Меня особенно интересуют пары «имя / значение», которые присутствуют в нейтральной культуре, но также не указаны в версии для конкретной культуры.

Ответы [ 7 ]

32 голосов
/ 01 мая 2009

Существует отличный бесплатный инструмент для редактирования файлов resx, где вы можете видеть несколько языков одновременно и четко видеть, что отсутствует или что лишнее - Zeta Resource Editor

7 голосов
/ 09 октября 2008

Хотя это и не инструмент сравнения сам по себе, RESX Synchronizer может помочь вам здесь. Его основное назначение - обновить локализованные файлы .resx новыми записями из нейтрального языка и удалить все удаленные элементы.

Возможно, вам понадобятся выходные данные, созданные с помощью переключателя командной строки / v. В противном случае он поставляется с полным исходным кодом C #, поэтому, возможно, вы сможете адаптировать его для своих нужд.

5 голосов
/ 25 декабря 2009

Я пробовал несколько инструментов различий XMl. Вот краткое изложение (требование, которое заставило меня оценить его, заключалось в том, чтобы различать сгенерированные Visual Studio файлы ресурсов .resx, что, на мой взгляд, является большой ошибкой, допущенной Microsoft - порядок элементов случайный, а Windows Forms всегда напишите ImageStream, если вы просто измените расположение кнопки и ничего не сделаете с imageList).

  1. XmlDiff
  2. Araxis
  3. Альтова DiffDog
  4. Блокнот XML
  5. ExamXML
  6. Liquid XML Studio 2009 (есть меню XML diff, но его может использовать только версия лицензии. Поэтому у меня нет шансов попробовать)

Прежде всего, не следует рассматривать все обычные инструменты сравнения, потому что они ничего не знают о XML, они рассматривают текстовые файлы как просто строки текста.

  1. XmlDiff - это первый инструмент, который я попробовал. Похоже, что он действительно может понадобиться, но мне нужно, но после загрузки исходного кода ( Visual Studio 2003 ) и компиляции с Visual Studio 2005 (с успешным автоматическим обновлением) я могу без проблем скомпилировать небольшой проект. Но когда я сравнил два настоящих .resx файла (1295 строк), он вылетел. Отладка в коде не дает мне понятия о том, что произошло, потому что у меня нет исходного кода xmldiffpatch.dll XmlDiffPatch.View.dll.

    И причина, по которой я не пытался больше копаться в этом инструменте, была в формате вывода или в дизайне GUI. Он выводит HTML-файл с различиями, выделенными в окне, размещенном в Internet Explorer. Для больших различий в XML-файле использовать его нелегко.

  2. Блокнот XML имеет простую встроенную разность XML. В соответствии с окном вывода, я думаю, что оно внутренне использует компонент XmlDiff. И вывод такой же, как XmlDiff. Я удалю его.

  3. Araxis является гораздо более традиционным инструментом для анализа текста, он также может сравнивать двоичный файл, файл изображения, папку и файлы слова. Мне это очень нравится для любой задачи сравнения , за исключением XML, потому что в ней нет поддержки параметров сравнения с поддержкой XML.

  4. Altova DiffDog выглядит как сложный коммерческий продукт, и в нем есть опция игнорирования порядка элементов, что является для меня ключевой особенностью.

    Но попробовав его с тем же реальным файлом .resx (1295 строк, что не так уж и много в моем опыте), я обнаружил, что «порядок элементов игнорирования» просто не работает, если два элемента расположены в разные места в двух файлах.

  5. ExamXML выглядит как коммерческий продукт, но это небольшой продукт. Но попробовав это, я обнаружил, что это самый идеальный инструмент на данный момент для моих ожиданий.

Есть и неутешительная сторона: она вылетела, когда я нажал F10 , чтобы перейти к следующему различию. Параметр игнорировать порядок элементов работает хорошо. Есть один недостаток, что настройка игнорируемого элемента не так гибка.

label1.Size
label1.Location
label1.Width

Я хочу игнорировать все различия в этих элементах, имя которых содержит «.Size» или «.Location» или «.Width», но невозможно определить такое условие одновременно. Настройка не поддерживает регулярные выражения.

В любом случае, я буду использовать ExamXML (с осторожностью) для сравнения файлов XML.

ОБНОВЛЕНИЕ 1: Прошли годы, теперь я использую VS2017 и winform не изменилась с момента моего первоначального ответа на этот вопрос. Когда нужно разбить работу на разных людей, эта проблема всплывала снова и снова, мне скучно.

На самом деле я забыл этот ответ, Google привел меня сюда.

Я начал новый сеанс расследования и получил несколько хороших результатов: https://www.codeproject.com/Articles/37022/Solving-the-resx-Merge-Problem показывает, насколько легко мы можем отсортировать файл resx по атрибуту data / @ name по LINQ. Это удивительно Код ядра - это всего лишь один оператор, состоящий из нескольких LINQ.

Затем я также обнаружил, что ResXResourceManager, на который указывает другой ответ в этой теме, автор ответил на приведенную выше статью проекта кода и добавил функцию в ResXResourceManager, в ResxResourceManager вы можете настроить плагин для автоматической сортировки resx. файл, когда (до) вы сохраните его на вкладке конфигурации. Вы даже можете выбрать вариант сортировки: CurrentCulture, Ordinal или IgnoreCase и т. Д.

К сожалению, решение кода-проекта и решение ResXResourceManager дают разные результаты, источник доступен, я обнаружил, что решение кода-проекта относится к "& gt; & gt;" Значение атрибута как обычный текст, поэтому семантически связанные виджеты разделены. Это можно легко исправить, добавив TrimStart ('>') к LINQ.

Тем не менее, после исправления этого два инструмента по-прежнему дают разные результаты. По умолчанию используется LINQ, использующий CurrentCulture для сортировки строк, и я полностью игнорирую распространенную опцию сортировки в resXResourceManager, для этой проблемы, я думаю, лучшим вариантом сортировки является «Ordinal». После добавления опции сортировки в решение проекта кода и установки той же опции сортировки в ResXResourceManager, наконец, они дают точно такой же результат!

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

Я бы добавил еще одну заметку в конце моего обновления, я использую Toritise Git, я использую Araxis для сравнения разных версий, почти бессмысленно сравнивать две ревизии файла resx, однако, поддержка Araxis для настройки фильтра для преобразования входной файл перед механизмом сравнения, увидевшим его. Для сравнения Araxis вызывает фильтр с помощью следующей команды: sortresx.exe -f C: \ Users \ ADMINI ~ 1 \ AppData \ Local \ Temp \ mrg.8032.3.resx C: \ Users \ ADMINI ~ 1 \ AppData \ Local \ Temp \ mrg.8032.2 C: \ Users \ ADMINI ~ 1 \ AppData \ Local \ Temp \ mrg.8032.4

-f означает foward, первое имя файла является входным файлом, второе имя файла является выходным файлом, который должен быть записан фильтром, третий можно безопасно игнорировать. После внесения небольшого изменения в код проекта кода, теперь я могу скомпилировать программу-фильтр, сконфигурировать ее в Araxis и выполнить разумное сравнение рекс-версий даже на старых испорченных рекс-файлах.

4 голосов
/ 26 января 2016

Для более новых версий Visual Studio (2010+) теперь существует расширение Visual Studio под названием ResXManager (созданное tomenglert ), которое прекрасно для этого.

Позволяет просматривать каждый ресурс рядом с каждым языком и выделяет недостающие ресурсы. (Пример ниже со страницы загрузки расширения.)

Example From Extension Download Page

4 голосов
/ 09 октября 2008

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

Между тем, я использовал обходной путь:

  • Откройте файлы .resx в Visual Studio.
  • Выберите все [ Ctrl + A ] и обрежьте [ Ctrl + X ] (это может занять некоторое время для больших файлов - наберитесь терпения)
  • Вставьте [ Ctrl + V ] и сохраните (это создаст заново файлы .resx, отсортированные по ключам)

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

0 голосов
/ 16 октября 2008

Вы можете написать что-нибудь с помощью XML Diff. См. Использование инструмента XML Diff and Patch в ваших приложениях .

0 голосов
/ 26 сентября 2008

Вы можете использовать такой инструмент, как diff TortoiseSVN (если вы используете Windows). Просто выберите оба файла, щелкните правой кнопкой мыши и выберите «diff» в подменю TortoiseSVN.

...