¿Por qué Chrome determina incorrectamente que la página está en un idioma diferente y ofrece traducir?

173

La nueva función de traducción automática de Google Chrome está apareciendo en una página dentro de una de nuestras aplicaciones. Cada vez que navegamos a esta página en particular, Chrome nos dice que la página está en danés y ofrece traducir. La página está en inglés, al igual que cualquier otra página de nuestra aplicación. Esta página en particular es una página de prueba interna que tiene unas pocas docenas de campos de formulario con etiquetas en inglés. No tengo idea de por qué Chrome piensa que esta página es danesa.

¿Alguien tiene información sobre cómo funciona esta función de detección de idioma y cómo puedo determinar qué está causando que Chrome piense que la página está en danés?

Samuel Neff
fuente
1
Esta es una posibilidad remota, pero ¿la página tiene muy pocas palabras? Pruebe otras páginas que tengan pocas palabras, ¿exhiben el mismo síntoma? Supongo que hay una configuración en algún lugar del servidor que establece la configuración regional en danés, y debido a que no hay suficientes palabras en la página para determinar el idioma, Chrome simplemente va con la suposición del servidor.
Hasen
77
Norweigian Bokmal aquí. Usé la palabra 'Barf' en algunos botones. Cambié la palabra a 'Bounce' y ahora Chrome cree que es holandés. ¿Qué?
thomas-peter

Respuestas:

222

Actualización: según Google

No utilizamos ninguna información de lenguaje de nivel de código como los atributos lang.

Recomiendan que deje en claro cuál es el idioma de su sitio. Use lo siguiente, que parece ayudar, aunque Content-Languageestá en desuso y Google dice que ignoranlang

<html lang="en" xml:lang="en" xmlns= "http://www.w3.org/1999/xhtml">
<meta charset="UTF-8">
<meta name="google" content="notranslate">
<meta http-equiv="Content-Language" content="en">

Si eso no funciona, siempre puede colocar un montón de texto (su página "Acerca de", por ejemplo) en un div oculto. Eso también podría ayudar con el SEO.

EDITAR (y más información)

El OP pregunta por Chrome, por lo que la recomendación de Google se publica arriba. Generalmente hay tres formas de lograr esto para otros navegadores:

  1. Recomendación W3C : utilice losatributoslangy / oxml:langen la etiqueta html:

    <html lang="en" xml:lang="en" xmlns= "http://www.w3.org/1999/xhtml">
  2. ACTUALIZACIÓN: anteriormente, una recomendación de Google ahora desaprobaba las especificaciones, aunque aún puede ayudar con Chrome. : meta http-equiv(como se describió anteriormente):

    <meta http-equiv="Content-Language" content="en">
  3. Utilice encabezados HTTP (no recomendado según las pruebas de reconocimiento entre navegadores ):

    HTTP/1.1 200 OK
    Date: Wed, 05 Nov 2003 10:46:04 GMT
    Content-Type: text/html; charset=iso-8859-1
    Content-Language: en
    

Salga de Chrome por completo y reinícielo para asegurarse de que se detecte el cambio. Chrome no siempre recoge la nueva metaetiqueta al actualizar la pestaña.

Kyle
fuente
1
Aquí hay una descripción de las metaetiquetas de Google: support.google.com/webmasters/bin/…
Joshua Davis
77
@Emile: Funciona si carga la página en una pestaña nueva. No funciona si solo presiona F5 para actualizar.
Stefan Steiger
1
En html5 debería ser contenido en lugar de valor: <meta name = "google" content = "notranslate" />
r03
1
@Jack, esa no es la recomendación de Google ni del W3C. Aunque su desafío apareció información interesante que cuestionó mi respuesta: w3.org/International/tests/html-css/language-declarations/…
Kyle
2
Chrome parece hacer lo que quiera. Puedo devolver archivos txt en inglés especificando que son ASCII en los encabezados de respuesta HTTP, e incluso si los datos solo contienen caracteres ASCII, Chrome aún hace un análisis de frecuencia en los bytes y le indica al usuario que está en un idioma diferente.
Myforwik
3

He añadido lang="en"a la declaración de tipo de documento, meta etiquetas adicionales para juego de caracteres UTF-8 y contenido-Langauge en la cabecera HTML, juego de caracteres especificada como UTF-8 y contenido-El lenguaje como enen las cabeceras de respuesta HTTP y no hizo nada para detener Chrome de declarar mi La página estaba en portugués. Lo único que solucionó el problema fue agregar esto al encabezado HTML:

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

Pero ahora he evitado que los usuarios traduzcan mi página que está claramente en inglés a su propio idioma. Mal trabajo, Chrome. Puedes ser mejor que esto.

Chris Broski
fuente
2

Sin saber cuál era el texto, quizás la detección de ngram esté siendo engañada por el contenido de su página.

http://googleresearch.blogspot.com/2006/08/all-our-n-gram-are-belong-to-you.html

https://en.wikipedia.org/wiki/N-gram

NinjaCat
fuente
2
Pero la pregunta es, ¿cómo puedo depurarlo u obtener más información para que Chrome descubra exactamente por qué tomó la decisión que hizo?
Samuel Neff
2
Sin ver el texto, no puedo decir con certeza. Algunas cosas para probar: - Si copia el texto y lo pega en translate.google.com, y lo configura en "Detectar idioma", ¿le dice que es inglés o no? - Si dice que es danés o lo que sea, entonces comenzaría a eliminar oraciones hasta que encuentres al alborotador.
NinjaCat
Hola Sam: Eso es lo que estoy sugiriendo. No hay forma de preguntarle por qué tomó la decisión. Hay alguna frase o texto en su texto que lo está engañando (después de todo, la traducción automática no es casi perfecta). Para depurar esto, sacaría frase por frase hasta que reconozca el idioma correcto.
NinjaCat
1

Chromium cree que esta página está en filipino: http://www.reyalvarado.com/portfolio/cuba/ Notas: prácticamente no hay texto en la página, excepto el nombre del propietario y los elementos del menú. Los elementos del menú se reemplazan dinámicamente con imágenes por FLIR.

El HTML declara la página como inglés de EE. UU .:

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 
James Revillini
fuente
1
Sí, tengo el mismo problema. No hay mucho texto en la página, y el elemento <html> tiene lang = "en" y xml: lang = "en". Chrome lo ignora!
Joshua Davis
1
@JoshuaDavis, probé todo por encima del atributo lang, metaetiquetas (excepto el notranslate). Lo que finalmente lo arregló para mí fue agregar el atributo dir = "ltr".
Dan Morphis
1
dir = "ltr" es ... dirección, de izquierda a derecha, supongo. Guau.
Joshua Davis
1

Especifique el idioma predeterminado para el documento, luego use el atributo traducir y la notranslateclase de Google por elemento / contenedor, como en:

<html lang="en">
    ...
    <span><a href="#" translate="no" class="notranslate">English</a></span>

Explicación:

La respuesta aceptada presenta una solución general, pero no aborda cómo especificar el idioma por elemento, lo que puede solucionar el error y garantizar que su página siga siendo traducible .

¿Por qué es esto mejor? Esto cooperará con la internacionalización de Google en lugar de apagarlo. Refiriéndose nuevamente al OP:

¿Por qué Chrome determina incorrectamente que la página está en un idioma diferente y ofrece traducir?

Respuesta : Google está tratando de ayudarlo con la internacionalización, pero debemos entender por qué esto está fallando. Partiendo de la respuesta de NinjaCat , asumimos que Google lee y predice el idioma de su sitio web utilizando un algoritmo de N-gram , por lo tanto, no podemos decir exactamente por qué Google quiere traducir su página; solo podemos suponer que:

  1. Hay palabras en su página que pertenecen a un idioma diferente.
  2. Marcar el elemento contenedor como translate="no"y lang="en"(o eliminar estas palabras) ayudará a Google a predecir correctamente el idioma de su página.

Desafortunadamente, la mayoría de las personas que llegan a esta publicación no sabrán qué palabras están causando el problema. Utilice la función incorporada "Traducir al inglés" de Chrome (en el menú contextual del botón derecho) para ver lo que se traduce, puede ver traducciones inesperadas como las siguientes :

ingrese la descripción de la imagen aquí

Por lo tanto, actualice su html con las etiquetas de traducción apropiadas hasta que la Traducción de Google de su página no cambie nada; entonces deberíamos esperar que la ventana emergente desaparezca para los futuros visitantes.

¿No será mucho trabajo agregar todas estas etiquetas adicionales? Si, muy probable. Si está utilizando Wordpress u otro sistema de gestión de contenido, busque en su documentación formas rápidas de actualizar su código.

mattavatar
fuente
Esto funciona para mí, las metaetiquetas todavía permitían la ventana emergente de traducción.
Ryan
0

Intente incluir la propiedad xml:lang=""de <html>, si las otras soluciones no funcionan:

<html class="no-js" lang="pt-BR" dir="ltr" xml:lang="pt-BR">
Alan
fuente
1
Este enfoque no funcionó para mí. Chrome parece ignorar lang = "..." y xml: lang = "...".
Joshua Davis
Esto funciona para confundir a Chrome al no saber qué idioma es la página, por lo que no ofrecerá una traducción.
Carter Medlin