Pourquoi Chrome détermine-t-il à tort que la page est dans une langue différente et propose-t-il de traduire?

173

La nouvelle fonctionnalité de traduction automatique de Google Chrome se déclenche sur une page dans l'une de nos applications. Chaque fois que nous naviguons vers cette page particulière, Chrome nous indique que la page est en danois et propose de traduire. La page est en anglais, comme toutes les autres pages de notre application. Cette page particulière est une page de test interne qui contient quelques dizaines de champs de formulaire avec des étiquettes en anglais. Je ne sais pas pourquoi Chrome pense que cette page est danoise.

Quelqu'un a-t-il des informations sur le fonctionnement de cette fonctionnalité de détection de langue et sur la manière dont je peux déterminer ce qui fait que Chrome pense que la page est en danois?

Samuel Neff
la source
1
C'est long, mais la page contient-elle très peu de mots? Essayez d'autres pages qui contiennent peu de mots, présentent-elles le même symptôme? Je suppose qu'il y a une configuration quelque part sur le serveur qui définit les paramètres régionaux sur danois, et comme il n'y a pas assez de mots sur la page pour déterminer la langue, chrome va simplement avec l'hypothèse du serveur.
hasen
7
Norweigian Bokmal ici. J'ai utilisé le mot «Barf» sur quelques boutons. J'ai changé le mot en «Bounce» et maintenant Chrome pense que c'est néerlandais. Whaaaaaat?
thomas-peter

Réponses:

222

Mise à jour: selon Google

Nous n'utilisons aucune information de langage au niveau du code, comme les attributs lang.

Ils vous recommandent de préciser la langue de votre site. Utilisez ce qui suit qui semble aider bien qu'il Content-Languagesoit obsolète et que Google indique qu'ils ignorentlang

<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 cela ne fonctionne pas, vous pouvez toujours placer un tas de texte (votre page "À propos" par exemple) dans un div masqué. Cela pourrait également aider avec le référencement.

EDIT (et plus d'infos)

L'OP pose des questions sur Chrome, la recommandation de Google est donc publiée ci-dessus. Il existe généralement trois façons de procéder pour les autres navigateurs:

  1. Recommandation W3C : utilisez lesattributslanget / ouxml:langdans la balise html:

    <html lang="en" xml:lang="en" xmlns= "http://www.w3.org/1999/xhtml">
  2. MISE À JOUR: auparavant, une recommandation Google est désormais obsolète, même si elle peut toujours aider avec Chrome. : meta http-equiv(comme décrit ci-dessus):

    <meta http-equiv="Content-Language" content="en">
  3. Utilisez les en-têtes HTTP (non recommandés en fonction des tests de reconnaissance multi-navigateurs ):

    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

Quittez complètement Chrome et redémarrez-le pour vous assurer que la modification est détectée. Chrome ne récupère pas toujours la nouvelle balise Meta lors de l'actualisation de l'onglet.

Kyle
la source
1
Voici une description des balises meta de Google: support.google.com/webmasters/bin/…
Joshua Davis
7
@Emile: Cela fonctionne, si vous chargez la page dans un nouvel onglet. Cela ne fonctionne pas si vous appuyez simplement sur F5 pour actualiser.
Stefan Steiger
1
En html5, il doit s'agir d'un contenu plutôt que d'une valeur: <meta name = "google" content = "notranslate" />
r03
1
@Jack, ce n'est ni la recommandation de Google ni du W3C. Bien que votre défi ait révélé
Kyle
2
Chrome semble faire tout ce qu'il veut. Je peux renvoyer des fichiers txt en anglais en précisant qu'ils sont ASCII dans les en-têtes de réponse HTTP, et même si les données ne contiennent que des caractères ASCII, Chrome effectue toujours une analyse de fréquence sur les octets et indique à l'utilisateur qu'il est dans une langue différente.
Myforwik
3

J'ai ajouté lang="en"à la déclaration doctype, ajouté des balises meta pour charset utf-8 et Content-Langauge dans l'en-tête HTML, spécifié charset comme utf-8 et Content-Language comme endans les en-têtes de réponse HTTP et cela n'a rien fait pour empêcher Chrome de déclarer mon page était en portugais. La seule chose qui a résolu le problème a été d'ajouter ceci à l'en-tête HTML:

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

Mais maintenant, j'ai empêché les utilisateurs de traduire ma page qui est clairement en anglais dans leur propre langue. Mauvais travail, Chrome. Vous pouvez être meilleur que ça.

Chris Broski
la source
2

Sans savoir ce qu'était le texte, peut-être que la détection de ngram est trompée par le contenu de votre page.

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

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

NinjaCat
la source
2
Mais la question est: comment puis-je le déboguer ou obtenir plus d'informations pour que Chrome puisse comprendre exactement pourquoi il a fait le choix qu'il a fait?
Samuel Neff
2
Sans voir le texte, je ne peux pas le dire avec certitude. Quelques choses à essayer: - Si vous copiez le texte, le collez dans translate.google.com et le définissez sur "Détecter la langue", cela vous indique-t-il que c'est de l'anglais ou non? - Si ça dit que c'est du danois ou autre, alors je commencerais à supprimer les phrases jusqu'à ce que tu trouves le fauteur de troubles.
NinjaCat
Salut Sam - C'est en fait ce que je suggère. Il n'y a aucun moyen de lui demander pourquoi il a pris la décision. Il y a une phrase ou un libellé dans votre texte qui le trompe (après tout, la traduction automatique n'est pas presque parfaite). Afin de déboguer cette chose, je supprimerais phrase par phrase jusqu'à ce qu'elle reconnaisse la langue correcte.
NinjaCat
1

Chromium pense cette page en philippin: http://www.reyalvarado.com/portfolio/cuba/ Remarques: Il n'y a pratiquement pas de texte sur la page à l'exception du nom du propriétaire et des éléments de menu. Les éléments de menu sont remplacés dynamiquement par des images par FLIR.

Le HTML déclare la page en anglais américain:

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 
James Revillini
la source
1
Ouais, j'ai le même problème. Il n'y a pas beaucoup de texte sur la page et l'élément <html> contient lang = "en" et xml: lang = "en". Chrome l'ignore!
Joshua Davis
1
@JoshuaDavis, j'ai tout essayé au-dessus de l'attribut lang, les balises meta (sauf celle notranslate). Ce qui a finalement résolu le problème pour moi a été d'ajouter l'attribut dir = "ltr".
Dan Morphis
1
dir = "ltr" est ... direction, de gauche à droite je suppose? Sensationnel.
Joshua Davis
1

Spécifiez la langue par défaut du document, puis utilisez l' attribut translate et la notranslateclasse de Google par élément / conteneur, comme dans:

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

Explication:

La réponse acceptée présente une solution globale, mais n'indique pas comment spécifier la langue par élément, ce qui peut corriger le bogue et garantir que votre page reste traduisible .

Pourquoi est-ce mieux? Cela coopérera avec l'internationalisation de Google plutôt que de l'arrêter. En se référant au PO:

Pourquoi Chrome détermine-t-il à tort que la page est dans une langue différente et propose-t-il de traduire?

Réponse : Google essaie de vous aider dans l'internationalisation, mais nous devons comprendre pourquoi cela échoue. Sur la base de la réponse de NinjaCat , nous supposons que Google lit et prédit la langue de votre site Web à l'aide d'un algorithme N-gramme - nous ne pouvons donc pas dire exactement pourquoi Google veut traduire votre page; on ne peut que supposer que:

  1. Il y a des mots sur votre page qui appartiennent à une autre langue.
  2. Marquer l'élément contenant comme translate="no"et lang="en"(ou supprimer ces mots) aidera Google à prédire correctement la langue de votre page.

Malheureusement, la plupart des personnes qui accèdent à ce message ne sauront pas quels mots sont à l'origine du problème. Utilisez la fonction "Traduire vers l'anglais" intégrée de Chrome (dans le menu contextuel du clic droit) pour voir ce qui est traduit, vous pouvez voir des traductions inattendues comme celle-ci :

entrez la description de l'image ici

Alors, mettez à jour votre html avec les balises de traduction appropriées jusqu'à ce que la traduction Google de votre page ne change rien - alors nous devrions nous attendre à ce que la fenêtre contextuelle disparaisse pour les futurs visiteurs.

Est-ce que ce ne sera pas beaucoup de travail pour ajouter toutes ces balises supplémentaires? Oui, très probablement. Si vous utilisez Wordpress ou un autre système de gestion de contenu, recherchez dans leur documentation des moyens rapides de mettre à jour votre code!

Mattavatar
la source
Cela fonctionne pour moi, les balises meta permettaient toujours le popup de traduction.
Ryan
0

Essayez d'inclure la propriété xml:lang=""dans <html>, si les autres solutions ne fonctionnent pas:

<html class="no-js" lang="pt-BR" dir="ltr" xml:lang="pt-BR">
Alan
la source
1
Cette approche n'a pas fonctionné pour moi. Chrome semble ignorer lang = "..." et xml: lang = "...".
Joshua Davis
Cela fonctionne à confondre Chrome en ne sachant pas quelle langue est la page, donc il n'offrira pas de traduction.
Carter Medlin