新的谷歌Chrome自动翻译功能是绊倒在我们的应用程序中的一个页面。当我们导航到这个特定的页面时,Chrome会告诉我们这个页面是丹麦语的,并提供翻译。这个页面是英文的,就像我们应用程序中的其他页面一样。这个特定的页面是一个内部测试页面,有几十个带英文标签的表单字段。我不知道为什么Chrome浏览器认为这个页面是丹麦语。
有人有洞察这个语言检测功能是如何工作的,我如何可以确定是什么原因导致Chrome认为页面是丹麦语?
新的谷歌Chrome自动翻译功能是绊倒在我们的应用程序中的一个页面。当我们导航到这个特定的页面时,Chrome会告诉我们这个页面是丹麦语的,并提供翻译。这个页面是英文的,就像我们应用程序中的其他页面一样。这个特定的页面是一个内部测试页面,有几十个带英文标签的表单字段。我不知道为什么Chrome浏览器认为这个页面是丹麦语。
有人有洞察这个语言检测功能是如何工作的,我如何可以确定是什么原因导致Chrome认为页面是丹麦语?
铬认为这个页面在菲律宾:http://www.reyalvarado.com/portfolio/cuba/ 注意:除了所有者的名字和菜单项之外,页面上几乎没有任何文本。菜单项由FLIR动态替换为图像。
HTML声明页面为美式英语:
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
更新:根据谷歌
我们不使用任何代码级语言信息,比如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,所以谷歌的推荐贴在上面。对于其他浏览器,通常有三种方法来实现这一点:
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"> 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"> 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
如果其他解决方案不起作用,尝试在<html>中包含属性xml:lang="":
<html class="no-js" lang="pt-BR" dir="ltr" xml:lang="pt-BR">
我添加了lang="en"到doctype声明,在HTML报头中添加了字符集utf-8和Content-Language的元标记,在HTTP响应报头中指定字符集为utf-8和Content-Language为en,它没有阻止Chrome声明我的页面是葡萄牙语。唯一能解决这个问题的就是把这个添加到HTML头中:
<meta name="google" content="notranslate">
但现在我阻止用户将我的页面翻译成他们自己的语言。干得可怜,Chrome。你可以做得更好。
为文档指定默认语言,然后为每个元素/容器使用translate属性和谷歌的notranslate类,如下所示:
<html lang="en">
...
<span><a href="#" translate="no" class="notranslate">English</a></span>
解释:
接受的答案提供了一个全面的解决方案,但没有解决如何为每个元素指定语言,这可以修复错误并确保页面仍然可翻译。
为什么这样更好呢?这将配合谷歌的国际化而不是关闭它。回到OP:
为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?
答:谷歌试图帮助您进行国际化,但我们需要了解为什么这是失败的。基于NinjaCat的回答,我们假设谷歌使用N-gram算法读取并预测您网站的语言——所以,我们不能确切地说出谷歌为什么要翻译您的页面;我们只能假设:
页面上有些单词属于不同的语言。 将包含元素标记为translate="no"和lang="en"(或删除这些单词)将帮助谷歌正确预测页面的语言。
不幸的是,大多数读到这篇文章的人都不知道是什么词引起了麻烦。使用Chrome内置的“翻译成英语”功能(在右键单击上下文菜单),看看什么得到翻译,你可能会看到意想不到的翻译如下:
所以,用适当的翻译标签更新你的html,直到你的页面的谷歌翻译没有改变——然后我们应该期望弹出窗口为未来的访问者消失。
添加所有这些额外的标签不是很多工作吗?是的,很有可能。如果你正在使用Wordpress或其他内容管理系统,那么看看他们的文档快速更新你的代码!