¿Drupal en múltiples idiomas?

Portada del podcast Drupalízate
Drupalízate es un podcast semanal creado por mí, donde hablo sobre desarrollo web basado en Drupal.
El contenido central es resolver las típicas dudas que pueda tener alguien que tiene o quiere tener una web en Drupal.
Aparte de resolver dudas de "clientes", también se habla de tips, recomendaciones y buenas prácticas para el Developer que recién empiezan en este mundo.
Audio y notas del episodio

¿Como de dificil es hacer una web multidioma usando Drupal?

Hoy te cuento qué cosas puedes hacer, y algunos trucos para crear correctamente una web en varios idiomas.

Transcripción automática de este episodio de audio (puede contener errores)

 Bienvenido o bienvenida a otro episodio más de cosas Drupal, básicamente. La semana pasada ya hablé sobre lo que son entidades, y esta está pensando de qué cosa podría ser interesante hablar. Y creo que lo más interesante, al menos desde un inicio, sería saber cómo funciona el tema de multi idioma en web Drupal. Si no tienes una web Drupal multi idioma o no eres programador en un país donde se hable más de un idioma, pues este capítulo como que te importa poco. En mi caso, bueno, soy catalán, así que básicamente todas las webs dean catalán español, o catalán inglés, o español inglés, o catalán español inglés, así que básicamente todas o casi todas han sido multi idioma. Y aparte se le suma que, digamos que empresas más grandes, no solo tienen uno de dos idiomas, sino que hecho webs con 19, o 20, o 20 y pico idiomas. Es una burra de contenido en multi idioma. Así que, primero de todo, Drupal es bueno para multi idioma? Sí, no sé si es la mejor opción, porque sinceramente no he probado todo el mercado, todas las tecnologías posibles, pero sí que es verdad que es bastante mejor opción que otras tecnologías que se usan, por ejemplo, web pres, que dejan mucho que desear, sobre todo cuando tienes una gran cantidad de idiomas o una gran cantidad de contenido. Primero de todo quiero aclarar que hay gente que cuando quiere una web multi idioma no se da cuenta del trabajo que es gestionar contenido multi idioma. Ya no digo hacer la web que permita tener textos traducidos. Me refiero a que la carga de trabajo para tu editor de textos, tener un blog en 5, 6, 7, 20 idiomas, cada vez que subas un artículo, en verdad tienes que subir 5, 6, 7, 20 artículos, uno para cada idioma. Y esto hay gente que no entiende de que es un trabajo monumental. Así que, primero de todo, si es un cliente, o sea, alguien que tiene una web, piensa bien si realmente te hace falta este idioma que quieres. Y si te hace falta, piensa bien en qué partes de la web te hacen falta. Quizás el blog no tiene ningún sentido que esté y solo con inglés ya te sirve y en cambio las páginas de servicios sí que las quieres en muchos idiomas. Piénsalo bien donde quieres multi idioma y donde no. Y sobre todo si te hace falta en un idioma o no. Porque he visto webs que en alemán, polaco, chino y ruso. Y realmente básicamente tienen público español solo. No sé hasta qué punto tiene sentido hacer webs tan grandes con tantos idiomas. Pero bueno, eso ya es mi opinión. Volviendo al tema. ¿Drupal es bueno con el multi idioma? ¿Es fácil configurar multi idioma? Sí y no. Primero de todo y enlazando con el tema de entidades. Como habíamos dicho en el episodio anterior, un conjunto de datos, o sea, un conjunto de campos que forman parte del mismo grupo de la misma entidad. Es lo que se entiende como datos de la entidad. Y poníamos el ejemplo de un título, un texto, una imagen. Claro, cuando tenemos traducciones, esto también se incluye. Si tenemos una página en dos idiomas, en verdad tenemos dos títulos. Uno para cada idioma y dos textos. Uno para cada idioma. Y la imagen, ah no, la imagen no está para dos idiomas. O sí, depende del proyecto. Pero puede ser el caso que tengamos campos que tengan el mismo contenido en distintos idiomas. Y quieres tener la posibilidad de configurar de, no no, para no dar carga de trabajo al editor y que no suba la imagen cinco o seis veces para seis idiomas. Pues que la imagen las suba una vez y automáticamente en todos los idiomas se vea la misma imagen. Por ejemplo, la imagen es el caso más típico. O un campo de texto. En campo de precio, por ejemplo, quizá queremos que el precio sea el mismo en todos los idiomas. Porque estamos en la zona de euros y nos es igual que sea alemán, inglés, español o francés. Esto vale 100 euros. Punto. Digamos que Drupal es hiperflexible en el tema de multi idiomas. Nos permite marcar qué campos queremos traducibles y cuáles no. Eso es un gran punto a favor para empezar. Y después nos permite configurar de si en el formulario de traducción de cada entidad, por ejemplo, una página. Queremos poder ver los campos que son comunes. Por ejemplo, si hemos puesto que la imagen no es traducible, podemos especificar que los campos que son comunes no los vemos en las traducciones. O sea, en la página de editar traducción. Solo vemos los campos que hemos de traducir. O por el contrario, podemos configurar de no no, lo quiero ver todo y va a salir al lado un paréntesis de esto afecta a todos los idiomas. Que depende del caso, puede ser conveniente verlo y depende del caso puede llevar a confusión y que el editor edite cosas que no debería. También Drupal es muy flexible y permite, por ejemplo, configurar roles que puedan editar traducciones, pero no editar el contenido de otro idioma. Por ponerte un ejemplo, yo estaba en una web que se hacía esto o se solicitaba que hicieramos esto. Porque tiene todo sentido del mundo. Si has contratado un productor de ruso, seguramente no va a editar textos de español. Si en un caso los va a copiar y traducir o va a coger el de inglés, pero no el de español. Al final, hay veces que no tiene sentido cuando tienes muchos idiomas y mucha gente. Que haya gente que pueda tocarte cualquier parte de la web y quieres, digamos, compartirlo todo con permisos para asegurarte que haya gente que no la lía. Básicamente. Aprovechando con esto, también se puede configurar Drupal para gestión de moderación de contenidos. Con lo cual, cuando se traduce a una página, que no se publique automáticamente, sino que tenga que venir alguien, un modeador, y revisar el texto y, ah, vale, está bien, publicó. Esto es para asegurarte que las traducciones son correctas o que los textos que se ponen son correctos. Esto no es bien bien de traducciones, es de gestión de contenidos, porque no está de más que sepas que se puede implementar. ¿Qué más de tema de traducciones? Después... te puedo hablar de la detección de idiomas. Drupal por defecto está puesto de que lo detecte mediante URL. Lo más típico es, tenemos tu dominio, por ejemplo, miweb.com barra en barra la URL que toque. El en es de inglés, son las iniciales de inglés, ¿vale? Si en vez de en tenemos es, pues sea español. Si en vez de esto tenemos ca, será catalán, por ejemplo. O fr francés. Creo que hasta aquí la gente... creo que me sigues, ¿no? Total, por defecto viene por la URL, por parte del path de la URL. Drupal permite cambiar esto. Para empezar, permite cambiar el lang code del idioma. Que, por ejemplo, si queremos que por defecto la web sea española y que no salga código de idioma en español, pero sí que salga en inglés, pues puedes editarlo y poner que español no tiene código de idioma. Y por defecto todas las URLs españolas van a salir sin código de idioma. En algunos casos puede estar bien, en otros no. Depende de cada proyecto y del tema del SEO. Sobre todo esto afecta al SEO. No hagas cambios de URL a toda la web así de multidimma, porque te va a afectar, seguramente, negativamente al SEO. Esto es para webs nuevas. O gente que sabe qué hace con temas de cambios de URL masivas. Si no, no la vas a liar. Todo esto, que puedes cambiar los lang codes que afectan a las URL para la detección de idiomas. Aparte de esto, hay casos que no queremos que sea por URL, sino que queremos, por ejemplo, detectar el idioma del navegador del usuario. Se lo creó Molfay Fox. Básicamente es en qué idioma tiene el PC, el ordenador, el usuario. Ah, que está en alemán. Vale, pues mostré la web en alemán. O, ah, que está en alemán. No tengo el alemán. Bueno, pues mostrársela en inglés. Y si no es español, mostrársela en otro idioma que no sea. Le puedes configurar de que detecte en base al navegador. También puedes hacer de que en vez de que sea por URL, que sea por dominio. Aunque esto es menos común, digamos que puedes tener un único Drupal que gestiona varios dominios. Por ejemplo, miDominioMolon.es sea mi web española. MiDominioMolon.fr sea la misma web, pero en francés. La puedes gestionar para distintos dominios, distintos idiomas. ¿Qué más comentar de esto de multidiomas? Ah, la detección, aún así, también se puede configurar de que cada usuario en su perfil tenga un campo de qué idioma quiere ver la web. Y aunque el navegador del usuario esté en alemán, la URL marca que es inglés, o sea, el barra en. Si el usuario en su perfil ha marcado que quiere ver la web en español, el Drupal lo va a redirigir siempre a la versión española. ¿Vale? A ver, al final esto es más complejo de lo que parece. Normalmente se configura una de las opciones. Se configura, por ejemplo, de siempre queremos usar la del navegador del usuario. Siempre queremos usar la de la URL y lo ordenas para que si el usuario tiene en su perfil puesto un idioma, es el que tenga mayor peso, el que más se le hace caso. ¿Vale? Aquí ya depende un poco de cada caso de uso. Lo que sepas es que Drupal permite todos estos casos por separado y es totalmente configurable. De la misma forma, también permite separar lo que es la traducción del contenido de la traducción de la interfaz. Aunque realmente esto es que en ningún proyecto lo he usado. Normalmente cuando quieres que una web vea la web, o sea una persona vea la web en un idioma concreto, quieres que vea toda la web en un idioma concreto. Normalmente. O sea que veas el menú de administración o una sección de la web en español y al mismo tiempo veas el contenido en alemán, a veces confunde más a la gente de lo que debería. Y creo, mi opinión personal es que todos tienen el mismo idioma que se ve. Si todo es alemán, todo es alemán. Si todo es inglés, todo es inglés. No mezcles idiomas porque después no sabes si esta página está traducida o no. Porque Drupal por defecto, si la página no está traducida, la muestra en el idioma original. El idioma original es el idioma en el que se ha creado el contenido. Si el idioma original es por ejemplo español y el artículo del blog no está traducido en ningún idioma, pues en todos los idiomas vas a ver ese artículo en español. Con lo cual puede llevar un poco de confusión si ves partes de la web en distintos idiomas porque no sabes lo que está traducido y lo que no. De la misma forma, también, aunque es con un módulo, se puede configurar de que si la página no está traducida, Drupal no la muestre. Para empezar a ver cómo me explico. Cuando la página no está traducida, no tiene una URL pública. O sea, pública sí que tiene. No tiene una URL, digamos, bonita. Una URL limpia. Normalmente es barra, el título puesto en la URL. No sale así, sale barra nodo barra el ID del nodo. Es una URL accesible a internet, aunque por código interno de HTML ya está marcado que es el idioma que no es alemán, por contenido español. Pero sí que es verdad que por temas de SEO y tal no es bueno. Si la página no está traducida, no se debería mostrar. Y como digo, hay un par de módulos que te permiten hacer esto. Por efecto, Drupal no lo hace. Pero bueno, es un mal menor, sinceramente. Normalmente, si quieres una web traducida, la mayoría de casos se traducen todos los contenidos de toda la web. En algunos, tiene sentido, por ejemplo, el blog. Dices que el blog se lo quieres en un idioma o en dos. Que si no está traducido, el blog no se muestre en francés. Pero en otras webs, sí se muestran todos los idiomas, porque por temas de estrategia de contenido de este proyecto, se han decidido que es así. Eso ya depende un poco de cada caso. ¿Y qué más comentar de esto? Ah, y la selección de idiomas. En Drupal, sin hacer nada, tenemos un bloque que puedes poner en cualquier parte de la página. Que permite... Bueno, sale un selector de idiomas. Que básicamente es un link. Y automáticamente, Drupal, cuando muestra este bloque, detecta en qué página estás mostrando este bloque. Y te muestra la versión traducida de esta misma página. O sea, te muestra. Cuando haces clic, te lleva la versión traducida de la misma página donde estabas. No te lleva la home. Que eso a mí me putea bastante, en el sentido de que voy a webs, donde estoy leyendo un artículo en... Yo que sé, o no sé, leyendo. Quiero leerlo, y la web me ha salido en... Yo qué sé, en inglés. Y veo que tiene... Ah, tiene español. Vale, le doy a español. Y me lleva la home. Y yo, no, yo quiero leer el artículo donde estaba. No me dirijas a una página distinta. Quiero la misma página en el idioma español. Si tienes la opción, ponlo. Drupal lo hace por defecto. Drupal, en este bloque, salen todos los idiomas disponibles. Y básicamente, al hacer clic, te lleva a la página, a la misma, donde estás, traducida. Lo cual es muy potente y es sin hacer nada. Es gratis, fácil, y funciona muy bien. ¿Y qué más comentaba de multidioma? Creo que ya está. A ver, básicamente... Ah, por cierto, no, no he comentado. Lo que he comentado todo es de contenido. No he comentado nada de traducciones de configuración. En Drupal, las configuraciones también pueden ser traducibles. Y como comenté en el episodio pasado, creo que fue... Las configuraciones se pueden exportar a código. Y estas traducciones también se pueden exportar a código. Basicamente, quédate con esto. Que si tú traduces una configuración, porque, por ejemplo, en local estás quedando campos, y has producido, por ejemplo, el label del campo, que, por ejemplo, el precio... Este campo se va a llamar precio. En catalán se va a llamar preu. Y en inglés, price. Esta configuración, estos tres textos, se exportan a código y se hacen el deploy a cada uno de los entornos. Y se traduce automáticamente, porque... No, automáticamente no. Ya has puesto el texto originalmente en local y se aplican esos textos en todos los entornos. Lo que ahorra muchas fallas humanos, de no producir cosas, o de dejarte un acento porque lo han escrito rápido y mal, y en un entorno se veía bien, pero en el otro entorno, en producción, se ve mal. Te ahorras todo este tema, ¿vale? Y creo que ya está. Para que veas que sí, que es relativamente fácil montar webs multidioma, es muy potente Drupal, y yo recomendaría mucho hacer webs multidioma en Drupal. Pero, como he dicho al principio, piensa bien si tiene sentido, en tu caso, hacer webs multidioma. Uno o dos idiomas vale, pero cuando cliente piensa que ponemos dos o tres, pues ponle cuatro o cinco más. Llega un punto que, sinceramente, la web se ve abandonada porque no está traducida a todos los idiomas. Está a medias, ¿vale? Y por poner un ejemplo, estuve en un proyecto que tardó dos años en salir en producción, desde que la web estaba acabada hasta que salimos de producción porque estaba todo traducido. Era nueve idiomas. Esto era culpa del cliente, básicamente, pero estuvieron dos años traduciendo nueve idiomas. ¿Qué? Bueno, cosas de cliente, de que no querían salir de producción hasta que estuviera todo traducido. Y eran lentos, tuvieron que contratar temas de traducciones externas, y yo realmente creo que es mejor salir de producción en español, o en el idioma de tu país, y a partir de aquí ir traduciendo idioma a idioma y ir publicando cada idioma. No tiene sentido hacer toda la misma página en nueve idiomas. Ahora la siguiente página, nueve idiomas más, ahora la siguiente, nueve idiomas más, y así hasta que salgan las todas. Es mejor hacer todas las páginas en español, publicar español, hacer todas las páginas en inglés, publicar inglés, hacer todas las páginas en alemán, publicar alemán, y así por idioma, no por páginas. Sobre todo para el tema de publicar a producción un proyecto que supuestamente tenían prisa en publicar. Pero bueno, y nada más. La semana que viene también no sé de qué voy a hablar. Pensa cuál es la temática. Si te ha gustado el tema este y te ha solucionado algún problema futudo que puedes tener con multidioma, déjame cinco estrictas en Spotify o en Abel Podcast. Y hasta la semana que viene. ¡Chau!

¿Tienes algún proyecto en mente?

Si quieres hacer algo en Drupal tal vez puedas contratarme.

Ya sea para consultoría, desarrollo o mantenimiento de sitios web Drupal.