2008-09-25 22 views
20

¿Cómo puedo comparar el contenido de dos (o más) archivos .resx grandes? Con cientos de pares Nombre/Valor en cada archivo, sería muy útil ver una versión combinada. Estoy especialmente interesado en los pares Nombre/Valor que están presentes en la cultura neutral, pero que no están especificados en una versión específica de la cultura.¿Cómo puedo comparar múltiples archivos .resx?

Respuesta

29

Hay una gran herramienta gratuita para editar archivos resx donde se pueden ver varios idiomas a la vez y ver claramente lo que falta o adicional - Zeta Resource Editor

+0

muy buena herramienta para editar archivos RESx. – nrod

-1

Puede usar una herramienta como la diferencia de TortoiseSVN (si está usando Windows). Simplemente seleccione ambos archivos, haga clic derecho y luego seleccione "diff" del submenú TortoiseSVN.

4

Usar un diff simple en archivos XML puede ser totalmente inútil, si los elementos coincidentes no aparecen en el mismo orden en ambos archivos. También he estado buscando una herramienta diff específica para XML, hasta ahora sin éxito.

Mientras tanto, la solución que he estado usando es la siguiente:

  • Abrir los archivos .resx en Visual Studio.
  • Seleccionar todo [Ctrl + A] y cortar [Ctrl + X] (esto puede tomar un tiempo para archivos de gran tamaño - sea paciente)
  • Pega [Ctrl + V ] y guardar (esto va a volver a crear los archivos ordenados por .resx teclas)

Cuando ambos archivos son así reordenadas, diff'ing normal se convierte en mucho más fácil. Puede localizar rápidamente las teclas que faltan pasando por el diff ahora.

7

Aunque no es una herramienta de diferenciar per se, RESX Synchronizer puede ayudarlo aquí. Su uso principal es actualizar los archivos .resx localizados con nuevas entradas del idioma neutral, y eliminar los elementos eliminados.

Posiblemente, la salida generada al usarla con el modificador de línea de comandos/v será lo que necesite. De lo contrario, viene con el código fuente completo de C#, por lo que posiblemente pueda adaptarlo a sus necesidades.

+0

simplemente impresionante. thx – Konstantinos

+1

El sincronizador RESX está descontinuado, pero recomiendan [http://amanuens.com/](http://amanuens.com/) ahora, que es gratuito hasta el 31 de diciembre de 2011 y se ve realmente increíble. – Luuk

+1

lamentablemente amanuens ahora es EOL (fin de vida) – CincauHangus

5

He intentado varias herramientas XML diff. Aquí está el resumen (el requisito que me llevó a evaluarlo fue diferir los archivos de recursos generados por Visual Studio .resx, lo que creo que es una gran falla que cometió Microsoft: el orden de los elementos es aleatorio y Windows Forms siempre reescribe el ImageStream si solo cambia la ubicación de un botón y no hace nada con la imageList).

  1. XMLDiff
  2. Araxis
  3. Altova DiffDog
  4. XML Notepad
  5. ExamXML
  6. Liquid XML Studio 2009 (hay un menú diff XML, pero sólo una versión de la licencia puede utilizarlo. Así que no tengo oportunidad de dar Es un intento)

En primer lugar, no se deben tener en cuenta todas las herramientas de diferencias normales porque no saben nada de XML, tratan los archivos de texto como solo líneas de texto.

  1. XmlDiff es la primera herramienta que probé. Parece que puede querer lo que necesito, pero después de descargar el código fuente (Visual Studio 2003) y compilado con Visual   Studio   2005 (con una actualización automática exitosa) puedo compilar el proyecto pequeño sin problemas. Pero cuando comparo dos archivos reales .resx (1295 líneas) se bloqueó. La depuración en el código no me da una pista sobre lo que sucedió porque no tengo un código fuente del xmldiffpatch.dll XmlDiffPatch.View.dll.

    Y la razón por la que no intenté profundizar en esta herramienta fue el formato de salida o el diseño de la GUI. Emite un archivo HTML con las diferencias resaltadas en una ventana alojada en el explorador de Internet  . Para una gran diferencia de archivos XML, no es fácil de usar.

  2. El Bloc de notas XML tiene una simple diferencia XML incorporada. De acuerdo con la ventana de salida, creo que internamente usa el componente de XmlDiff. Y el resultado es el mismo que XmlDiff. Lo desinstalaré.

  3. Araxis es mucho más una herramienta de diferencia de texto tradicional, también puede comparar archivos de archivos binarios, archivos de imágenes, carpetas y palabras. Me gusta mucho para cualquier tarea diff excepto XML, porque no tiene compatibilidad con opciones de diferencias compatibles con XML.

  4. Altova DiffDog parece un producto comercial complicado, y contiene una opción para ignorar el orden de los elementos, que es la característica clave para mí.

    Pero después de intentarlo con el mismo archivo real .resx (1295 líneas, no muy grande en mi experiencia), encontré que el "orden de elemento ignorar" simplemente no funciona bien si los dos elementos se encuentran en muy diferente lugares en los dos archivos.

  5. ExamXML parece un producto comercial, pero es un producto pequeño. Pero después de probarlo, descubrí que es la herramienta más ideal actualmente para mis expectativas.

Hay también un lado decepcionante: se estrelló cuando apreté F10 para desplazarse a la siguiente diferencia. El ignorar el orden de los elementos opción funciona bien. Hay una pena que la personalización del elemento ignorado no sea tan flexible.

label1.Size 
label1.Location 
label1.Width 

Quiero hacer caso omiso de todas las diferencias en estos elementos cuyo nombre contiene "Clasifique" o ".Location" o ".Width", pero no es posible definir tal condición al mismo tiempo. La personalización no admite expresiones regulares.

De todos modos, usaré ExamXML (con cuidado) para comparar archivos XML.

ACTUALIZACIÓN 1: años pasados, ahora uso VS2017 y winform no cambió desde mi respuesta inicial a esta pregunta. Cuando el trabajo tiene que pasar a diferentes personas, este problema aparece una y otra vez, aburriéndome.

En realidad, he olvidado esta respuesta, google me trajo aquí.

empecé a investigar una nueva sesión, y tener algunos buenos resultados: https://www.codeproject.com/Articles/37022/Solving-the-resx-Merge-Problem muestra que la forma en eaisly podemos ordenar la resx por los datos/@ nombre de atributo mediante LINQ. Es asombroso. El código central es solo una declaración compuesta por varios LINQ.

Luego, también encontré que ResXResourceManager, que es señalado por otra respuesta en este hilo, el autor respondió al artículo de proyecto de código anterior y agregó la característica a ResXResourceManager, en ResxResourceManager, puede configurar el complemento para ordenar automáticamente el archivo resx cuando (antes) lo guarda en la pestaña de configuración. Incluso hay una opción de clasificación que puede elegir: CurrentCulture, Ordinal o IgnoreCase, etc.

Lamentablemente, la solución del proyecto de código y la solución ResXResourceManager producen resultados diferentes, la fuente está disponible, descubrí que la solución del proyecto de código trata el " & gt; & gt; " el valor del atributo como texto normal para que los widgets relacionados semánticamente estén separados. Esto se puede solucionar fácilmente agregando un TrimStart ('>') al LINQ.

Sin embargo, después de solucionar esto, las dos herramientas aún producen resultados diferentes. El culprint es el LINQ por defecto usando CurrentCulture para ordenar la cadena, e ignoro totalmente la opción de ordenamiento revelant en resXResourceManager, para este problema, creo que la mejor opción de clasificación es "Ordinal". Después de agregar la opción de clasificación a la solución de proyecto de código y establecer la misma opción de clasificación en ResXResourceManager, finalmente producen exactamente el mismo resultado.

Aunque resxResourceManager es ideal para administrar el recurso de forma centralizada y corregir el problema de orden de elementos de resx, la herramienta de proyecto de código sigue siendo invaluable para mí, ya que es independiente, por lo que se puede usar en casos más amplios; Además, el código es muy escueto y elegante.

Agregaría otra nota al final de mi actualización, utilizo tortoise git, utilizo Araxis para comparar diferentes versiones, casi no tiene sentido comparar dos revisiones de archivos resx, sin embargo, el soporte de Araxis para personalizar un filtro para transforma el archivo de entrada antes de que el motor de comparación lo vea. Para comparar, Araxis llama al filtro con el siguiente comando: 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 Significa, el primer nombre de archivo es el archivo de entrada, el segundo nombre de archivo es el archivo de salida el filtro debe escribirse, el tercero puede ignorarse de forma segura. Después de hacer un pequeño cambio en el código del proyecto de código, ahora puedo compilar un programa de filtro, configerlo en Araxis, y hacer una comparación de revisión de resx razonable incluso en archivos resx viejos y desordenados.

2

Para las versiones más nuevas de Visual Studio (2010+) ahora hay una extensión de Visual Studio llamada ResXManager (creada por tomenglert) que es increíble para esto.

Le permite ver cada recurso en cada idioma uno al lado del otro y resalta los recursos faltantes. (El siguiente ejemplo es de la página de descarga de la extensión).)

Example From Extension Download Page

Cuestiones relacionadas