Mala-traduccion-ExtintorEl inglés es el idioma más hablado del mundo, la lingua franca que todos usamos para viajar y hacer negocios en todo el mundo. Es como el Arameo en tiempos de Jesucristo, vamos. No hablarlo o entenderlo al menos al leerlo es una gran barrera para multitud de puestos de trabajo y en especial para los programadores y demás técnicos, ya que la mayor parte de los documentos están en este idioma, siendo predominantes las empresas estadounidenses en el mundo del software y el hardware, y adoptando este idioma todas las empresas que se quieren internacionalizar.

Por suerte, aunque no lo entiendas, la propia Internet te ofrece la solución en forma de traductores on-line, el más utilizado de los cuales es Google Translator.

Permiten traducir entre varias decenas de idiomas permiti√©ndonos, por ejemplo, leer una p√°gina en Chino traduci√©ndola por completo al espa√Īol o al ingl√©s en unos instantes. Las traducciones a√ļn dejan bastante que desear en muchos casos (ver figuras varias en este art√≠culo como ejemplo), pero est√° mejorando cada d√≠a y al menos sirve para enterarnos de qu√© va la cosa.

Google Chrome lleva integrada de serie la traducción de esta herramienta, de modo que en cuanto detecta una página que no está en alguno de los idiomas que hemos declarado como propios en el navegador, te ofrece automáticamente si quieres traducirla:

Chrome_Traductor

De este modo lo tenemos tan fácil como pulsar un botón.

Otras herramientas y extensiones para otros navegadores ofrecen una funcionalidad parecida.

Aunque esto es estupendo en la mayoría de los casos, puede ofrecer varios problemas, tanto desde el punto de vista de los usuarios como de los desarrolladores de páginas y aplicaciones web.

Vamos a aprender cómo podemos controlar el posible proceso de traducción de una página desde nuestro código. Pero antes...

Problemas como usuario

El primer problema viene como usuario y es que, por defecto, Chrome suele tener configurado solamente el idioma local del usuario como idioma propio. Es decir, la mayor parte de las veces el √ļnico idioma que reconoce como propio es el espa√Īol. Si hablas otros idiomas (especialmente ingl√©s) es un fastidio que te ofrezca traducir las p√°ginas en este idioma cada vez que entras, sobre todo antes que sacaba una barra bastante intrusiva para pregunt√°rtelo, que te com√≠a parte del espacio disponible para leer la p√°gina. Ahora al menos saca un di√°logo mucho m√°s discreto como el que se ve en la figura anterior.

Para solucionarlo como usuario es muy sencillo: vete al men√ļ de Chrome y en Ajustes despliega los Ajustes avanzados. En la zona de idiomas pulsa el bot√≥n de ajustes de lenguaje y entrada de datos, y a√Īade todos los lenguajes que hables:

Chrome_Lenguajes

De este modo, aunque tengas marcada la casilla de traducir páginas (ver check en la figura anterior, que está marcado por defecto), no te ofrecerá la traducción de ninguno de los idiomas que tengas en esa lista salvo que lo marques explícitamente.

Problemas como programador

De todos modos los problemas más graves pueden venir para los programadores, porque no tenemos forma alguna de controlar qué idiomas tiene el usuario en su navegador ni si se le ofrece la traducción o no.

En ocasiones no querremos que se traduzcan las p√°ginas por diversos motivos:

  • Si son aplicaciones y no p√°ginas de contenido, porque nos puede descuadrar por completo la interfaz, que adem√°s si es din√°mica puede variar de un momento a otro y tener partes generadas por script que el traductor no captar√°. Puede quedar un verdadero "churro".
  • P√°ginas de contenido en las que no nos interesa ofrecer una traducci√≥n por el motivo que sea, bien de la p√°gina completa o bien de algunas partes en concreto (por ejemplo listados con nombres que deben ir siempre en el idioma original y no ser traducidos).
  • Sabemos que la traducci√≥n va a ser mala y llevar a equ√≠vocos y preferimos que no se haga nunca.

¬ŅC√≥mo podemos controlar el proceso de traducci√≥n de un modo sencillo y predecible?

Mala-traduccion-RJ45

Controlando el idioma de nuestras p√°ginas

En el caso de p√°ginas / aplicaciones completas debemos asegurarnos primeramente de que estamos indicando el idioma de manera correcta.

Para ello tenemos b√°sicamente dos mecanismos:

  • El atributo lang
  • La meta-cabecera de idioma del contenido

Es habitual ver páginas con código como este por ahí:

<!doctype html>
<html lang="es">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="Content-Language" content="es-ES" />
	<title>Mi p√°gina</title>
</head>
<body>
	....
</body>
</html>

Fíjate en que hay dos elementos (destacados en rojo) para marcar el idioma de la página.

El primero es el atributo "lang" que puede utilizarse en cualquier etiqueta para indicar el idoma de partes concretas de la página. De todos modos por regla general se indica en el elemento raíz de la página (<html>) ya que toda ella suele estar en el mismo idioma. Aquí es donde deberemos indicar el idioma de la página casi siempre.

Es también el atributo que utilizan los lectores de pantalla para personas con dificultades visuales para leer en voz alta la página (o trozos concretos marcados con otro idioma) en el idioma apropiado, por lo que es un atributo de accesibilidad importante.

Aparte de este atributo tambi√©n hemos incluido una etiqueta de tipo <meta> con informaci√≥n sobre el lenguaje del contenido. En este caso adem√°s hemos especificado con mayor precisi√≥n el idioma: no solo es espa√Īol sino m√°s concretamente espa√Īol de Espa√Īa (es-ES).

Por regla general no es necesario incluir esta etiqueta meta y de hecho no est√° recomendado, pero en realidad tiene su raz√≥n de ser.  Ambas suelen ser coherentes y marcar el mismo idioma, pero en realidad la meta est√° pensada para indicar el lenguaje de la audiencia del documento, no el lenguaje en el que est√° escrito.

Por ejemplo, si la p√°gina forma parte de un curso de ingl√©s para espa√Īoles, aunque est√© escrita en ingl√©s, el idioma de la audiencia seguir√≠a siendo "es-ES" y as√≠ lo indicar√≠amos en la etiqueta meta.

En cualquier caso, y como ya he dicho, lo normal es que no la utilicemos y usemos tan solo el atributo "lang" en la raíz.

Bien, una vez que tenemos el idioma bien especificado, ¬Ņqu√© tenemos que hacer para impedir que la p√°gina se traduzca a otros idiomas a pesar de que el navegador se lo quiera ofrecer al usuario?

En el caso concreto de Google, su servicio de traducción reconoce una cabecera de tipo meta como esta:

<meta name="google" value="notranslate">

(fuente), que es un poco sui-generis pero funciona: aunque vayas explícitamente a Google Translator y le digas que traduzca la página, hará caso omiso y no la traducirá.

Lo que ocurre es que esto es una soluci√≥n muy parcial y demasiado espec√≠fica. Bien es cierto que el dominio sobre los traductores online que tiene Google es enorme, m√°s incluso dir√≠a yo (sin datos en los que apoyarme) que en el caso de las b√ļsquedas, as√≠ que servir√° para el 90% de los casos.

¬ŅPero qu√© pasa si queremos algo m√°s est√°ndar y que nos de m√°s control?

Mayor control sobre el proceso de traducción

Una vez más el W3C viene a nuestro rescate. Dentro de HTML han definido un atributo específicamente pensado para esto que se llama, como no, translate.

Este atributo puede tener dos valores: "yes" y "no" y como es evidente sirve para controlar si se debe traducir o no un contenido.

Lo podemos aplicar a cualquier elemento de la p√°gina.

Por ejemplo, si no queremos que se traduzca la p√°gina entera, lo podemos colocar directamente en el cuerpo de la misma:

<body translate="no">

Pero lo interesante es que nos permite un mayor control granular de qué partes queremos que se traduzcan y cuáles no:

<p>El título original del libro era <span lang="es" translate="no">El ingenioso hidalgo don Quijote de la Mancha</span> y se publicó en 1605</p>

De este modo, por ejemplo, podemos marcar un fragmento concreto del texto envolvi√©ndolo con una etiqueta, indicando en √©sta el idioma en el que est√° escrito y adem√°s, en este ejemplo, indicando que no debe traducirse nunca. Cuando el traductor pase por este p√°rrafo traducir√° todo pero dejar√° el t√≠tulo original de "El Quijote" en espa√Īol aunque el usuario est√© leyendo la p√°gina traducida a otro idioma.

Soporte de traductores

He estado probando esta etiqueta con diversos traductores online (tampoco hay tantos) y he encontrado que la etiqueta translate funciona correctamente en los siguientes traductores de p√°ginas:

pero no le hacen caso los siguientes:

Y no he encontrado modo de traducir p√°ginas (solo p√°rrafos sueltos) en otros bastante conocidos como:

  • Babelfish (uno de los m√°s antiguos y conocidos, antes perteneciente a Yahoo)
  • Babylon

por lo que no aplica la etiqueta tampoco.

Con los tres primeros que sí la soportan cubrimos la práctica totalidad de los usuarios, ya que Google y Bing son los que se usan en occidente y Yandex es el líder sin duda en Rusia y países relacionados. La verdad es que desconozco cuál será el traductor más utilizado en, China para cubrir esa área también, y me encantaría probarlo, pero no lo he podido hacer.

Gracias a un uso inteligente de los atributos lang y translate podemos controlar muy detalladamente el proceso de traducción de nuestras páginas y aplicaciones.

¬°Espero que te sea √ļtil!

Mala-traduccion-Suelo-Mojado

💪🏻 ¬ŅEste post te ha ayudado?, ¬Ņhas aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA