Por que o Chrome determina incorretamente a página em um idioma diferente e oferece a tradução?

173

O novo recurso de tradução automática do Google Chrome está ativado em uma página em um de nossos aplicativos. Sempre que navegamos para esta página específica, o Chrome informa que a página está em dinamarquês e oferece a tradução. A página está em inglês, assim como todas as outras páginas em nosso aplicativo. Esta página em particular é uma página de teste interna que possui algumas dezenas de campos de formulário com rótulos em inglês. Não faço ideia por que o Chrome acha que esta página é dinamarquesa.

Alguém tem informações sobre como esse recurso de detecção de idioma funciona e como posso determinar o que está causando o Chrome pensar que a página está em dinamarquês?

Samuel Neff
fonte
1
Este é um tiro no escuro, mas a página tem muito poucas palavras? Tente algumas outras páginas com poucas palavras, elas exibem o mesmo sintoma? Meu palpite é que existe uma configuração em algum lugar no servidor que define o local como dinamarquês e, como não há palavras suficientes na página para determinar o idioma, o chrome segue a suposição do servidor.
hasen 31/03
7
Bokmal norueguês aqui. Eu usei a palavra 'Barf' em alguns botões. Mudei a palavra para 'Bounce' e agora o Chrome pensa que é holandês. Whaaaaaat?
Thomas-Peter

Respostas:

222

Atualização: de acordo com o Google

Não usamos nenhuma informação de idioma no nível do código, como atributos lang.

Eles recomendam que você deixe claro qual é o idioma do seu site. Use o seguinte que parece ajudar, embora Content-Languageesteja obsoleto e o Google diz que ignoralang

<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">

Se isso não funcionar, você sempre pode colocar um monte de texto (sua página "Sobre", por exemplo) em uma div oculta. Isso também pode ajudar no SEO.

EDITAR (e mais informações)

O OP está perguntando sobre o Chrome, então a recomendação do Google está publicada acima. Geralmente, existem três maneiras de fazer isso em outros navegadores:

  1. Recomendação W3C : use osatributoslange / ouxml:langna tag html:

    <html lang="en" xml:lang="en" xmlns= "http://www.w3.org/1999/xhtml">
  2. UPDATE: anteriormente, uma recomendação do Google agora excluía as especificações, embora ainda possa ajudar com o Chrome. : meta http-equiv(como descrito acima):

    <meta http-equiv="Content-Language" content="en">
  3. Use cabeçalhos HTTP (não recomendado com base em testes de reconhecimento 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
    

Saia completamente do Chrome e reinicie-o para garantir que a alteração seja detectada. O Chrome nem sempre pega a nova metatag na atualização da guia.

Kyle
fonte
1
Aqui está uma descrição das meta tags do Google: support.google.com/webmasters/bin/…
Joshua Davis
7
@Emile: Funciona, se você carregar a página em uma nova guia. Não funciona se você pressionar F5 para atualizar.
Stefan Steiger
1
No html5, deve haver conteúdo em vez de valor: <meta name = "google" content = "notranslate" />
r03
1
@ Jack, essa não é a recomendação do Google ou do W3C. Embora seu desafio tenha gerado
Kyle
2
O Chrome parece fazer o que quiser. Posso retornar arquivos txt em inglês especificando que são ASCII nos cabeçalhos de resposta HTTP e, mesmo que os dados contenham apenas caracteres ASCII, o chrome ainda faz uma análise de frequência nos bytes e solicita ao usuário que esteja em um idioma diferente.
Myforwik
3

Eu adicionei lang="en"a declaração doctype, meta tags adicionadas para charset utf-8 e Content-Langauge no cabeçalho HTML, charset especificado como utf-8 e Content-Language como ennos cabeçalhos de resposta HTTP e ele não fez nada para parar Chrome de declarar o meu A página estava em português. A única coisa que corrigiu o problema foi adicionar isso ao cabeçalho HTML:

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

Mas agora impedi que os usuários traduzissem minha página claramente em inglês para seu próprio idioma. Mau trabalho, Chrome. Você pode ser melhor que isso.

Chris Broski
fonte
2

Sem saber qual era o texto, talvez a detecção de ngram esteja sendo enganada pelo conteúdo da sua 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
fonte
2
Mas a questão é: como posso depurá-lo ou obter mais informações para o Chrome descobrir exatamente por que ele fez a escolha?
Samuel Neff 24/07
2
Sem ver o texto, não posso dizer com certeza. Algumas coisas a tentar: - Se você copiar o texto e colá-lo em translate.google.com, e o definir como "Detectar idioma", isso indica que é inglês ou não? - Se diz que é dinamarquês ou o que quer, então eu começaria a remover as sentenças até encontrar o causador de problemas.
NinjaCat 24/07/10
Oi Sam - É o que estou sugerindo. Não há como perguntar por que tomou a decisão. Há alguma frase ou texto em seu texto que está enganando (afinal a tradução automática não é quase perfeita). Para depurar isso, eu usaria sentença por sentença até que reconheça o idioma correto.
NinjaCat
1

O Chromium considera esta página em filipino: http://www.reyalvarado.com/portfolio/cuba/ Notas: Não há praticamente nenhum texto na página, exceto o nome do proprietário e os itens de menu. Os itens de menu são substituídos dinamicamente pelas imagens pela FLIR.

O HTML declara a página como inglês dos EUA:

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 
James Revillini
fonte
1
Sim, eu tenho o mesmo problema. Não há muito texto na página e o elemento <html> possui lang = "en" e xml: lang = "en". Chrome ignora!
Joshua Davis
1
@ JoshuaDavis, eu tentei de tudo acima do atributo lang, meta tags (exceto o notranslate). O que finalmente o corrigiu foi adicionar o atributo dir = "ltr".
Dan Morphis
1
dir = "ltr" é ... direção, da esquerda para a direita, eu acho? Uau.
21713 Joshua Davis
1

Especifique o idioma padrão do documento e use o atributo translate e a notranslateclasse do Google por elemento / contêiner, como em:

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

Explicação:

A resposta aceita apresenta uma solução geral, mas não aborda como especificar o idioma por elemento, o que pode corrigir o erro e garantir que sua página permaneça traduzível .

Por que isso é melhor? Isso irá cooperar com a internacionalização do Google, em vez de desligá-lo. Voltando ao PO:

Por que o Chrome determina incorretamente a página em um idioma diferente e oferece a tradução?

Resposta : O Google está tentando ajudá-lo com a internacionalização, mas precisamos entender por que isso está falhando. Com base na resposta do NinjaCat , presumimos que o Google leia e preveja o idioma do seu site usando um algoritmo N-gram - portanto, não podemos dizer exatamente por que o Google deseja traduzir sua página; podemos apenas assumir que:

  1. Existem palavras na sua página que pertencem a um idioma diferente.
  2. Marcar o elemento que contém como translate="no"e lang="en"(ou remover essas palavras) ajudará o Google a prever corretamente o idioma da sua página.

Infelizmente, a maioria das pessoas que acessam este post não sabe quais palavras estão causando o problema. Use o recurso "Traduzir para inglês" interno do Chrome (no menu de contexto Clique com o botão direito do mouse) para ver o que é traduzido. Você pode ver traduções inesperadas, como as seguintes :

insira a descrição da imagem aqui

Portanto, atualize seu html com as tags de tradução apropriadas até que a Tradução do Google da sua página não mude nada - esperamos que o pop-up desapareça para futuros visitantes.

Não será muito trabalhoso adicionar todas essas tags extras? Sim, muito provavelmente. Se você estiver usando o Wordpress ou outro sistema de gerenciamento de conteúdo, procure na documentação deles maneiras rápidas de atualizar seu código!

mattavatar
fonte
Isso funciona para mim, as meta tags ainda estavam permitindo o pop-up de tradução.
Ryan
0

Tente incluir a propriedade xml:lang=""no <html>, se as outras soluções não funcionarem:

<html class="no-js" lang="pt-BR" dir="ltr" xml:lang="pt-BR">
Alan
fonte
1
Essa abordagem não funcionou para mim. O Chrome parece ignorar lang = "..." e xml: lang = "...".
Joshua Davis
Isso funciona para confundir o Chrome por não saber em que idioma a página é, portanto não oferecerá uma tradução.
Carter Medlin