为什么Chrome会错误地判断页面语言并提供翻译?

211
谷歌Chrome的新自动翻译功能在我们应用程序的一个页面上遇到了问题。每当我们导航到这个特定页面时,Chrome告诉我们该页面是丹麦语,并提供翻译。实际上该页面是英语的,就像我们应用程序中的其他页面一样。这个特定的页面是一个带有几十个表单字段的内部测试页面,具有英文标签。我不知道Chrome为什么认为这个页面是丹麦语。
是否有人了解这种语言检测功能的工作原理以及如何确定是什么使Chrome认为该页面是丹麦语的?

1
这很困难,但是页面上有很少的单词吗?尝试一些其他的页面,它们也有很少的单词,它们表现出相同的症状吗?我猜测服务器上有某个配置将区域设置为丹麦语,因为页面上没有足够的单词来确定语言,所以Chrome只能使用服务器的假设。 - hasen
1
请参见https://dev59.com/fnA85IYBdhLWcg3wBOxO。 - dreeves
7
挪威博克马尔语。我在几个按钮上使用了“Barf”一词。我将该词更改为“Bounce”,现在Chrome认为它是荷兰语。什么鬼? - thomas-peter
@thomas-peter 我是荷兰人。 "Barf"不是我听说过的荷兰词语!而且我也不知道为什么谷歌认为它是荷兰语:p - Stijn de Witt
6个回答

251
更新:根据谷歌的说法

我们不使用任何代码级别的语言信息,如lang属性。

他们建议您明确表明您网站的语言。使用以下内容似乎有所帮助,尽管 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,因此以上发布了Google的建议。通常有三种方法可以为其他浏览器实现此目的:

  1. W3C recommendation: Use the lang and/or xml:lang attributes in the html tag:

    <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并不总是在选项卡刷新时捕捉到新的meta标记。

1
这是Google的元标签的描述:http://support.google.com/webmasters/bin/answer.py?hl=en&answer=79812 - Joshua Davis
7
如果在新标签页中加载页面,它可以工作。如果只是按F5刷新,则无法工作。 - Stefan Steiger
1
设置正确的响应头比使用http-equiv元标签更为优选。 - Ja͢ck
1
@Jack,这并非谷歌或W3C的建议。不过你的挑战确实找到了一些有趣的信息,对我的答案提出了质疑:http://www.w3.org/International/tests/html-css/language-declarations/results-language-declarations - Kyle Cureau
3
Chrome似乎为所欲为。 我可以在HTTP响应头中返回指定为ASCII的英文txt文件,即使数据仅包含ASCII字符,Chrome仍然对字节进行频率分析,并提示用户处于不同语言环境。 - Myforwik
显示剩余14条评论

16

我在文档类型声明中添加了lang="en",在HTML头部添加了字符集utf-8和内容语言的meta标签,在HTTP响应头中指定了字符集为utf-8和内容语言为en,但Chrome仍然宣称我的页面是葡萄牙语。唯一解决问题的方法是将以下代码添加到HTML头部:

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

但现在我已经阻止了用户将我的明显为英语的页面翻译成他们自己的语言。Chrome做得不好。你可以做得更好。


7
太对了!他们说“我们不使用任何代码级别的语言信息,如语言属性”。是啊,因为那样很奇怪。相反,我们使用一些秘密的/专有的魔法算法。当IE这样做来确定Content-Type时,我们说他们没有遵循标准,但是当我们这样做时,突然变得很棒。耶! - Stijn de Witt

5

指定文档的默认语言,然后对每个元素/容器使用translate attribute和Google的notranslate类进行翻译,例如:

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

说明:

被接受的答案提供了一个笼统的解决方案,但没有解决如何针对每个元素指定语言的问题,这可以修复错误并确保您的页面仍然可翻译

为什么这样做更好?这将与Google的国际化合作而不是关闭它。回到OP:

为什么Chrome错误地确定页面处于不同的语言并提供翻译?

答案:Google试图通过国际化帮助您,但我们需要理解为什么会失败。基于NinjaCat的答案,我们假设Google使用N-gram算法读取和预测您网站的语言 - 因此,我们无法确定Google为什么想要翻译您的页面; 我们只能假设:

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

不幸的是,大多数人到达这篇文章时都不知道哪些单词会引起麻烦。使用Chrome内置的“翻译成英语”功能(在右键上下文菜单中)查看被翻译的内容,您可能会看到意想不到的翻译,例如以下内容:

enter image description here

所以,请使用适当的翻译标签更新您的HTML,直到Google翻译您的页面不再有任何变化--然后我们应该期望弹出窗口对于未来的访问者消失。
“添加所有这些额外的标记不会很费力吗?”是的,很可能如此。如果您正在使用WordPress或其他内容管理系统,则可以查看它们的文档以快速更新您的代码!

这对我有效,元标签仍然允许翻译弹出窗口。 - Ryan

2

2
但问题是,我该如何调试它或获取更多信息,让Chrome能够准确地找出它为什么做出了这个选择? - Samuel Neff
2
没有看到文本,我无法确定。有一些尝试的方法:
  • 如果您复制文本并将其粘贴到translate.google.com中,并设置为“检测语言”,它是否告诉您它是英语?
  • 如果它说它是丹麦语或其他语言,那么我会开始删除句子,直到找到问题所在。
- NinjaCat
嗨,山姆 -这实际上就是我所建议的。无法询问它为什么做出了决定。你的文本中有一些句子或措辞会让它产生误解(毕竟机器翻译并不完美)。为了调试这个问题,我会逐句删除,直到它能够识别出正确的语言。 - NinjaCat

1

Chromium认为此页面为菲律宾语:http://www.reyalvarado.com/portfolio/cuba/ 注:页面上除了所有者的姓名和菜单项之外几乎没有文本。菜单项由FLIR动态替换为图像。

HTML将页面声明为美式英语:

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

1
是的,我也有同样的问题。页面上没有太多文本,而<html>元素具有lang="en"和xml:lang="en"。Chrome忽略它! - Joshua Davis
1
@JoshuaDavis,除了notranslate之外,我尝试了上面所有的语言属性和元标记。最终解决问题的方法是添加dir="ltr"属性。 - Dan Morphis
1
dir="ltr" 是指文本方向从左到右。哇。 - Joshua Davis

0
尝试将属性xml:lang=""添加到<html>中,如果其他解决方案不起作用:
<html class="no-js" lang="pt-BR" dir="ltr" xml:lang="pt-BR">

1
这种方法对我不起作用。Chrome似乎忽略了lang="..."和xml:lang="..."。 - Joshua Davis
这个方法可以让 Chrome 混淆页面的语言,从而不会提供翻译。 - Carter Medlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接