为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?

新的谷歌Chrome自动翻译功能是绊倒在我们的应用程序中的一个页面。当我们导航到这个特定的页面时,Chrome会告诉我们这个页面是丹麦语的,并提供翻译。这个页面是英文的,就像我们应用程序中的其他页面一样。这个特定的页面是一个内部测试页面,有几十个带英文标签的表单字段。我不知道为什么Chrome浏览器认为这个页面是丹麦语。

有人有洞察这个语言检测功能是如何工作的,我如何可以确定是什么原因导致Chrome认为页面是丹麦语?

93795 次浏览

铬认为这个页面在菲律宾:http://www.reyalvarado.com/portfolio/cuba/ 注意:除了所有者的名字和菜单项之外,页面上几乎没有任何文本。

.菜单项被FLIR动态替换为图像

HTML声明页面为美式英语:

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">

更新:根据谷歌

我们不使用任何代码级语言信息,如lang 属性。< / p >
他们建议你让你的网站的语言很明显。 虽然Content-Language已弃用,谷歌表示它们忽略lang

,但使用下面的方法似乎有所帮助
<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">

如果这不起作用,你可以在一个隐藏的div中放置一堆文本(例如你的“关于”页面)。这可能对SEO也有帮助。

编辑(和更多信息)

OP正在询问Chrome,所以谷歌的建议被张贴在上面。对于其他浏览器,通常有三种方法来实现这一点:

  1. 在html标签中使用lang和/或xml:lang属性:

    <html lang="en" xml:lang="en" xmlns= "http://www.w3.org/1999/xhtml">
    
  2. UPDATE: previously a Google recommendation now deprecated spec although it may still help with Chrome. : meta http-equiv (as described above):

    <meta http-equiv="Content-Language" content="en">
    
  3. Use HTTP headers (not recommended based on cross-browser recognition tests):

    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
    
    李< /引用> < / >

完全退出Chrome并重新启动以确保检测到更改。Chrome并不总是在标签刷新时选择新的元标签。

在不知道文本内容的情况下,也许ngram检测被页面内容欺骗了。

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

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

如果其他解决方案不起作用,尝试将属性xml:lang=""包含到<html>中:

<html class="no-js" lang="pt-BR" dir="ltr" xml:lang="pt-BR">

我添加了lang="en"到doctype声明,在HTML报头中添加字符集utf-8和Content-Language的元标记,指定字符集utf-8和Content-Language作为HTTP响应报头中的en,它没有阻止Chrome声明我的页面是葡萄牙语。唯一能解决这个问题的就是把这个添加到HTML头中:

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

但现在我阻止用户将我的页面翻译成他们自己的语言。干得可怜,Chrome。你可以做得更好。

为文档指定默认语言,然后为每个元素/容器使用翻译属性和谷歌的notranslate类,如下所示:

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

解释:

接受的答案提供了一个全面的解决方案,但没有解决如何为每个元素指定语言,这可以修复错误并确保您的Page仍然可以翻译

为什么这样更好呢?这将配合谷歌的国际化而不是关闭它。回到OP:

为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?

回答:谷歌是试图帮助你国际化,但我们需要理解为什么这是失败的。基于NinjaCat的的答案,我们假设谷歌阅读和预测使用语法算法的你的网站的语言——所以,我们不能确切地说为什么谷歌想翻译你的页面;我们只能假设:

  1. 页面上有些单词属于不同的语言。
  2. 将包含元素标记为translate="no"lang="en"(或删除这些单词)将帮助谷歌正确预测页面的语言。

不幸的是,大多数读到这篇文章的人都不知道是什么词引起了麻烦。使用Chrome内置的“翻译成英语”功能(在右键单击上下文菜单)来查看被翻译的内容,你可能会看到意想不到的翻译像下面这样:

enter image description here

所以,用适当的翻译标签更新你的html,直到你的页面的谷歌翻译没有改变——然后我们应该期望弹出窗口为未来的访问者消失。

添加所有这些额外的标签不是很多工作吗?是的,很可能。如果你正在使用Wordpress或其他内容管理系统,那么在他们的文档中查找快速更新代码的方法!