Это проблема:
con==False
Должно быть:
con=False
Существует отличный бесплатный инструмент для редактирования файлов resx, где вы можете видеть несколько языков одновременно и четко видеть, что отсутствует или что лишнее - Zeta Resource Editor
Используя простую разность на XML-файлах может быть полностью бесполезным, если элементы соответствия не появляются в том же порядке в обоих файлах. Я искал XML-определенный различный инструмент также, до сих пор без успеха.
Тем временем, обходное решение, которое я использовал, является этим:
.resx
файлы в Visual Studio. .resx
файлы, отсортированные по ключам) , Когда оба файла будут таким образом переупорядочены, нормальный diff'ing становится настолько легче. Можно быстро определить местоположение недостающих ключей путем скольжения через разность теперь.
Вы могли кодировать что-то использующее XML, Различный, См. Используя Инструмент Разности и Патча XML в Ваших Приложениях .
Можно использовать инструмент как разность TortoiseSVN (при использовании Windows). Просто выберите оба файла, щелкните правой кнопкой и затем выберите "разность" из подменю TortoiseSVN.
Хотя это не различный инструмент по сути, , Синхронизатор RESX может помочь Вам здесь. Его основное использование должно обновить локализованные .resx файлы с новыми записями с нейтрального языка один и удалить любые удаленные объекты.
Возможно, вывод, сгенерированный при помощи его с/v переключателем командной строки, будет тем, в чем Вы нуждаетесь. Иначе это действительно идет с полным исходным кодом C#, так возможно можно адаптировать его к потребностям.
Я попробовал несколько XMl diff инструментов. Вот краткое изложение (требованием, которое подтолкнуло меня к его оценке, было diff сгенерированных Visual Studio .resx
ресурсных файлов, что, на мой взгляд, является большой ошибкой компании Microsoft - порядок элементов случайный, а Windows Forms всегда переписывают ImageStream, если просто изменить расположение кнопки и ничего не делать со списком imageList'ов).
Во-первых, не стоит рассматривать все обычные инструменты diff, потому что они ничего не знают о XML, они относятся к текстовым файлам как к текстовым строкам.
XmlDiff - первый инструмент, который я попробовал. Похоже, что он мне действительно нужен, но после скачивания исходного кода (Visual Studio 2003) и компиляции с Visual Studio 2005 (с успешным автоматическим обновлением) я могу скомпилировать маленький проект гладко. Но при сравнении двух реальных .resx
файлов (1295 строк) он разбился. Отладка в коде не дает мне представления о том, что произошло, так как у меня нет исходных текстов xmldiffpatch.dll XmlDiffPatch.View.dll
.
И причина, по которой я не пытался больше копаться в этом инструменте - формат вывода, или дизайн GUI. Он выводит HTML-файл с отличиями, выделенными в окне Internet Explorer. Для большого XML файла с отличиями использовать его непросто.
Блокнот XML имеет простую встроенную XML-дифф. В соответствии с окном вывода я думаю, что он использует компонент XmlDiff. И вывод такой же, как и XmlDiff. Я деинсталлирую его.
Araxis гораздо более традиционный текстовый инструмент сравнения, он также может сравнивать бинарный файл, файл изображения, папку и файлы слов. Он мне очень нравится для любой задачи diff кроме XML, потому что в нём нет поддержки XML-совместимых diff-опций.
Altova DiffDog выглядит как сложный коммерческий продукт, и в нём есть возможность игнорировать порядок элементов, что для меня является ключевой особенностью.
Но после пробного использования с тем же самым настоящим . resx
файл (1295 строк, по моему опыту не большой), я обнаружил, что "игнорировать порядок элементов" просто плохо работает, если два элемента находятся в разных местах в двух файлах.
ExamXML выглядит как коммерческий продукт, но это маленький продукт. Но, попробовав, я нашел, что это самый идеальный инструмент на данный момент для моих ожиданий.
Есть и разочаровывающая сторона: он разбился, когда я нажал F10, чтобы перейти к следующему различию. Опция игнорирует порядок элементов работает хорошо. Есть одна загвоздка в том, что настройка игнорируемого элемента не так уж и гибка.
label1.Size
label1.Location
label1.Width
Я хочу проигнорировать все различия на тех элементах, в имени которых есть ".Размер" или ".Местоположение" или ".Ширина", но определить такое условие одновременно невозможно. Настройка не поддерживает регулярные выражения.
В любом случае, я буду использовать ExamXML (с осторожностью) для сравнения XML файлов.
UPDATE 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 дают разный результат, источник доступен, я обнаружил, что кодово-проектное решение рассматривает значение атрибута ">>" как обычный текст, поэтому семантически связанные виджеты отделены друг от друга. Это легко исправить, добавив TrimStart('>') в LINQ.
Однако, после исправления, оба инструмента все равно дают разный результат. По умолчанию для сортировки строк используется LINQ с помощью CurrentCulture, и я полностью проигнорировал опцию "Обычная сортировка" в resXResourceManager, для этой проблемы, я думаю, что лучший вариант сортировки - "Обычная". После добавления опции сортировки в решение проекта и установки такой же опции сортировки в ResXResourceManager, наконец, они дают точно такой же результат!
Хотя resxResourceManager отлично подходит для централизованного управления ресурсом и исправления проблемы порядка элементов resx, инструмент для кодового проекта все равно бесценен для меня, так как он самостоятелен и может быть использован в более широких случаях; плюс, код очень лаконичен и элегантен.
Я бы добавил ещё одну заметку в конце моего обновления: я использую tortoise 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.8032.2 C:\Users\ADMINI~1\AppData\mrg.8032.2 C:\Users\ADMINI\Local\mrg.8032 .4
-f означает foward, первое имя файла - входной файл, второе - выходной файл, который должен записать фильтр, третье можно смело игнорировать. После внесения небольших изменений в код проекта, я могу скомпилировать программу-фильтр, настроить ее в Araxis, и сделать разумное сравнение ревизий resx даже на старых, испорченных файлах resx.
.