Solución de los problemas al importar XLIFF traducidos de vuelta en WPML
Esta guía se ha creado con el fin de aportar los pasos para solucionar los problemas más habituales que impiden que WPML acepte XLIFF traducidos de vuelta en el sistema. Antes de hacer cambios en los XLIFF, hay que asegurarse de que hemos instalado Notepad++ y de que tenemos el archivo shortcuts.xml (Ver Página de descargas / Macros / Macro Xliff-WPML – Shortcuts) con las macros que se usan para solucionar los problemas.
Pasos previos
- Abrir Notepad++, ir a Configuración > Preferencias > Otros y desactivar las casillas en la sección Cambiar de documento.

- Ir al apartado Buscando y desmarcar la casilla Confirmar Reemplazar todo en todos los documentos abiertos.

- Cerrrar Notepad++.
- Pulsar la tecla Windows y copiar y pegar %AppData%\Notepad++ para abrir la carpeta de archivos temporales de Notepad++.
- Una vez abierta, copiar el archivo xml con las macros y pegarlo en esa carpeta, de forma que sustituya al antiguo.
Explicación de los problemas principales
Ausencia de etiquetas target
- Veamos un ejemplo de un segmento de un archivo XLIFF generado por WPML:
<trans-unit id=»wpml_trans_unit_20_0_1″>
<source>Il offre également la possibilité de compléter le nettoyage</source>
<seg-source>
<mrk mid=»0″ mtype=»seg»>Offre inoltre la possibilità di completare la pulizia</mrk>
</seg-source>
</trans-unit>
A diferencia de lo que ocurre con los archivos XLIFF estándar, en los XLIFF que crea WPML el idioma de destino, en vez de ir entre etiquetas target, aparece entre etiquetas seg-source. Normalmente se espera que la herramienta TAO las convierta en etiquetas target, pero, al no ser XLIFF estándar y tener que usar un filtro personalizado para poder importarlos en Studio, el contenido traducido sigue entre las etiquetas seg-source. Por esta razón, WPML muestra el error At least one target element is missing cuando intentamos importarlos de vuelta en la web del cliente.
En pocas palabras, lo que hace la macro fix_XLIFF_WPML para que no se produzca este error es buscar y reemplazar las etiquetas seg-source de apertura y cierre por etiquetas target. Además, también elimina las etiquetas mrk, cuya presencia no es obligatoria en los XLIFF traducidos.
Dicha macro sigue estos pasos (los cuales se pueden hacer de forma manual si es preciso):
- Borramos todas las etiquetas mrk innecesarias en Notepad++.
Buscamos (con expresiones regulares y la opción para nueva línea):
<\/*mrk.*?>
Reemplazamos por: [dejar vacío]

- Eliminar las etiquetas seg-source y los saltos de párrafo sobrantes en Notepad++ y cambiamos dichas etiquetas por etiquetas target
Buscamos (con expresiones regulares y la opción se ajusta a línea):
(<seg-source>)(\n\s+)(.*?)(\n\s+)(<\/seg-source>)
Reemplazamos por:
<target>\3</target>

Entidades HTML
En estos archivos XLIFF de WPML suele aparecer código HTML que es procesado gracias al filtro personalizado de Trados Studio que creamos para poder importarlos en un proyecto. Sin embargo, este hecho supone que en los archivos de destino pueden aparecen entidades HTML, que son cadenas del estilo &carácter; que se usan para poder imprimir en pantalla caracteres reservados (aquellos que el navegador interpretaría como HTML), invisibles (como los saltos de línea) o que no existen en algunos teclados, como los caracteres acentuados o con diéresis.
El problema entonces reside en que WPML no acepta la mayoría de las entidades HTML, lo que provoca un error del tipo Entity ‘X’ not defined cuando tratamos de importar los archivos de vuelta en WPML. Así pues, la solución es buscar la entidad que da problemas y reemplazar por su carácter real (por ejemplo, sustituir á por á).
Las macros Decode_HTML_entities, Decode_HTML_entities1 y Decode_HTML_entities2 hacen varias sustituciones de las entidades HTML más frecuentes. Sin embargo, estas macros no son exhaustivas, por lo que, después de aplicarlas, es recomendable buscar la cadena &.*?; en todos los archivos usando expresiones regulares, como se aprecia en la siguiente captura, por si hubiera alguna entidad que se hubiera quedado sin descodificar.

Aplicación de las macros
- Tras ubicar los archivos con problemas en una misma carpeta, seleccionaremos todos con el botón derecho del ratón y haremos clic en Edit with Notepad++.
- Ahora haremos clic en el menú Macro situado en la sección superior de la ventana. Deberíamos ver las cuatro macros, Decode_HTML_entities, Decode_HTML_entities1, Decode_HTML_entities2 y fix_XLIFF_WPML. Si no los vemos, tendremos que asegurarnos de que hemos hecho los pasos de la sección anterior adecuadamente. Una vez lo hayamos comprobado, pulsamos en Ejecutar macro múltiples veces.

- En la ventana que se abre, elegimos la macro fix_XLIFF_WPML en la lista desplegable. Después cambiamos el número en Ejecutar X veces por la cantidad de archivos XLIFF que haya en la carpeta (por ejemplo, si hay 20 archivos, cambiaremos el número por 20), pulsamos el botón Ejecutar y esperamos a que acabe el proceso (los cambios se guardan de forma automática).

- Acto seguido, repetimos el anterior paso con las otras macros, Decode_HTML_entities, Decode_HTML_entities1 y Decode_HTML_entities2.

- Después de aplicar estas macros, es recomendable pulsar Ctrl + F buscar el carácter & (o la cadena &.*?; usando expresiones regulares) en todos los archivos por si hubiera alguna entidad que se hubiera quedado sin descodificar. Si diésemos con alguna, con una búsqueda en internet encontraremos el carácter por el que hay que reemplazar dicha entidad desde la pestaña «Reemplazar». Veamos un ejemplo en la siguiente captura:

NOTA: no cambiar la entidad & por &, ya que esta tiene que estar presente en los archivos de forma obligatoria.
Si hacemos algún cambio, tendremos que guardar todos los archivos haciendo clic en Ctrl + Mayús. + S.
A medida que se vayan encontrando otras entidades de forma habitual, se irá actualizando la macro correspondiente, o bien se creará otra; todo con el fin de recoger el mayor número de entidades posible. En la siguiente tabla se recogen las entidades incluidas en las macros existentes:
Lista de entidades HTML
| Decode_HTML_entities | |
| Buscar | Reemplazar |
| ' | ‘ |
| " | « |
| ’ | ’ |
| | |
| “ | “ |
| ” | ” |
| „ | „ |
| ” | ” |
|   | (espacio fino) |
| – | – |
| — | — |
| Decode_HTML_entities1 | |
| Buscar | Reemplazar |
| á | á |
| é | é |
| í | í |
| ó | ó |
| ú | ú |
| Á | Á |
| Í | É |
| É | Í |
| Ó | Ó |
| Ú | Ú |
| ñ | ñ |
| Ñ | Ñ |
| ¿ | ¿ |
| ¡ | ¡ |
| € | € |
| º | º |
| Decode_HTML_entities2 | |
| Buscar | Reemplazar |
| … | … |
| ‘ | ‘ |
| – | – |
|   | (espacio fino) |
| → | → |
| œ | œ |
| Ä | Ä |
| ä | ä |
| Ö | Ö |
| ö | ö |
| Ü | Ü |
| ü | ü |
| ß | ß |
| « | « |
| » | » |
| £ | £ |
- Probaremos a importar de nuevo los XLIFF en WPML.