2008-09-25 2 views
20

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

ответ

29

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

-1

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

4

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

В то же время, обходной путь я использую это:

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

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

7

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

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

+0

просто удивительным. thx – Konstantinos 2009-09-24 12:27:05

+1

RESX sychronizer снят с производства, но они рекомендуют [http://amanuens.com/](http://amanuens.com/) сейчас, что бесплатно для использования до 31 декабря 2011 года и выглядит действительно потрясающе! – Luuk 2011-11-03 09:16:02

5

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

  1. XmlDiff
  2. Araxis
  3. Altova DiffDog
  4. XML Notepad
  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.

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

  2. XML Notepad имеет простой встроенный XML-diff. Согласно выходному окну, я думаю, что он внутренне использует компонент XmlDiff. Результат такой же, как XmlDiff. Я удалю его.

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

  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 показывает, что, как eaisly мы можем сортировать Resx файл по данным/@ имя атрибута с помощью LINQ. Это потрясающе. Основной код - это только один оператор, состоящий из нескольких LINQ.

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

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

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

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

Я добавлю еще одну заметку в конце моего обновления, я использую черепаху 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 и провести разумное сравнение версий resx даже в старых, перепутанных файлах resx.

2

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

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

Example From Extension Download Page

Смежные вопросы