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