A continuación traducimos las instrucciones para cambiar el idioma predeterminado de DNN, tal y como nos lo explican desde 40 Fingers. Podéis encontrar el artículo original aquí: Changing the DNN default language
Localización de contenido en la base de datos
En primer lugar, necesitamos saber cómo las Tabs (páginas, pero vamos a llamarlas también como la tabla en la base de datos, Tabs) y los módulos están realmente vinculados entre sí en DNN, según los idiomas. Centrémonos primero en las tabs.
La tabla Tabs contiene varios campos involucrados en el proceso de localización:
- UniqueId: un GUID (identificador) único para cada página
- DefaultLanguageGuid: un GUID cuyo valor puede ser:
- NULL para páginas en el idioma predeterminado del sitio
- NULL para páginas neutras (sin idioma asignado, son comunes a todos los idiomas)
- NULL para páginas no presentes en el idioma predeterminado
- El GUID de la página relacionada en el idioma predeterminado para las páginas de los idiomas que están enlazadas entre ellas (son traducciones mutuas)
- CultureCode: el idioma de cada página
Entonces, lo que se necesita para cambiar el idioma predeterminado es:
- cambiar el valor de DefaultLanguageGuid en cada Tab para que contenga el UniqueId de la misma Tab en el nuevo idioma predeterminado
- cambiar el valor de DefaultLanguageGuid a NULL para la Tab en el nuevo idioma predeterminado
Hasta aquí, las cosas son exactamente iguales para TabModules. Mismo procedimiento, diferente tabla.
Resolviendo problemas en nuestro Portal DNN
Un script SQL para esta cambio no era tan complicado. Pero nos encontramos con algunos problemas al intentar ejecutarlo. El principal, y el único que consideramos "normal", ocurre en un sitio web:
- Algunas páginas fueron traducidas pero no tenían una versión en el nuevo idioma predeterminado
Como esto ocurrió solo en unas pocas páginas, se corrigió manualmente en la base de datos, sin tratar de automatizarlo. Para TabModules, hay algunos problemas más, pero muy parecidos:
- Tabmodules no vinculados con el mismo módulo en páginas traducidas (así que el módulo está en páginas en otros idiomas, pero DefaultLanguageGuid no tiene el valor del UniqueId del módulo en la página con lenguaje predeterminado)
- TabModules vinculados al mismo módulo en página traducida, pero no a la página que está vinculada con la que contiene el módulo. Esto pasaba con algunos módulos referenciados entre páginas: un módulo en la página A debería tener el DefaultLanguageGuid con el valor del UniqueId de un módulo en el lenguaje predeterminado de la página B.
En el sitio había unos 200 módulos con alguno de estos problemas. Pero, afortunadamente, tenían una cosa en común: el DefaultLanguageGuid estaba vacío cuando no debía estarlo, o era erróneo. Así que escribimos algunas consultas para estos casos, para vaciar todos los DefaultLanguageGuids. A partir de aquí, solo nos quedaba un problema: los módulos que no estaban vinculados a su contraparte en el idioma predeterminado.
Ahora, la mayoría de las páginas tenían este aspecto en la página de gestión de localización (pulsar en la imagen para verla bien):
Tenga en cuenta que los módulos destacados deberían estar en la fila a la que apuntan las flechas. Y esto se aplica a la mayoría de los módulos en los "otros" idiomas. Esta es también una característica que DNN no soporta. Lo único que puede hacer es marcar la casilla Copiar módulo, actualizar traducciones y luego copiar manualmente el contenido al nuevo módulo.
Obviamente, no es esto lo que queríamos.
Añadiendo funcionalidad al módulo de idioma DNN
Lo que hicimos aquí fue tomar el módulo DNNLanguage desde el código fuente de DNN y agregarle una pequeña e ingeniosa característica. Fíjese en el icono "Mover archivo" al lado de los cuadrados rojo y púrpura. Si pulsamos sobre él, aparecerá un icono "Pegar" en los lugares donde está la casilla "Copiar módulo", para los módulos de la misma definición de módulo (para evitar que se pueda vincular accidentalmente un módulo OpenContent a un módulo HTML/Texto, por ejemplo). Tras pulsar en el icono de pegar, la página se actualiza y el módulo ahora está vinculado y es visible en su lugar correcto.
Sin embargo, como teníamos algunos cientos de casos así, tratamos alrededor del 90% de ellos con consultas de SQL.
Cuando todo esto estuvo terminado, estuvimos preparados para lanzar el script. Lo único que tuvimos a hacer adicionalmente fue cambiar la configuración de DefaulLanguage (idioma predeterminado) en DNN. Esto también se añadió al script, claro.
Recursos:
Tenemos claro que esto no es algo que cualquier administradror de un web quisiera (o incluso debiera) hacer en un sitio DNN. Por supuesto, estaremos encantados de ayudar a quien lo necesite. Simplemente contáctenos.