如何防止谷歌翻译改变我页面的 html 结构?

Posted

技术标签:

【中文标题】如何防止谷歌翻译改变我页面的 html 结构?【英文标题】:How can I prevent Google Translate from changing the html structure of my page? 【发布时间】:2018-07-18 03:37:04 【问题描述】:

Google 翻译似乎正在更改我的 html,将我的星号移到新行。

这是一个活生生的例子:jsbin

我怎样才能避免这种情况?

翻译前:

翻译成西班牙语后:

JS:

function googleTranslateElementInit() 
  new google.translate.TranslateElement(
    pageLanguage: 'en',
    layout: google.translate.TranslateElement.InlineLayout.SIMPLE,
    autoDisplay: false
  , 'google_translate_element');

CSS:

.box_content-form-data 
  clear: both;
  float: left;

HTML:

<div id="google_translate_element"></div>
<span style="clear:both; float:left;">Enter your email account.</span>
<span class="box_content-form-data">
          <label>Email Address:
              <span style="color:red;">*</span>
</label>
</span>

【问题讨论】:

@Huangism 它应该在理论上可行,对吧?我想支持多种语言,但没有资源翻译成那么多语言。 这不是那么准确,我建议您只使用您网站的 2 种主要语言。如果人们真的想要其他语言,他们可以使用 chrome,它会自行提供翻译 @Huangism 不幸的是,我别无选择。我们需要支持尽可能多的语言,并且作为一个团队选择使用谷歌翻译。我们对不准确性很好,但对谷歌翻译破坏我们的 html 不满意。您对它为什么会改变我们网站的结构有任何想法吗? 没有什么原因,我想这就是它的工作原理。我建议您查看 API 页面,看看里面是否有可以使用的东西。例如,您从哪里获得layout: google.translate.TranslateElement.InlineLayout.SIMPLE?该网站应该包含您需要的所有信息 我浏览了这个 gui:translate.google.com/manager/website 在回答了几个问题后,它吐出了一个应该翻译我的网站的代码 sn-p。 【参考方案1】:

不要使用跨度来环绕元素。 label 不允许在 span 中使用。那是无效的 HTML,因此容易导致错误。

据我所知,将您的 &lt;span class="box_content-form-data"&gt; 更改为 &lt;div&gt; 可以解决问题。 见here

-- 根据您的最后一条评论,spans 的重要性也适用于 labels。它们不是用来嵌套大量元素的。

http://jsbin.com/botimiwipi/1/edit?html,output

【讨论】:

@JackFairfield 因为您将所有内容都放在label 中。 label 并不意味着作为内联元素以外的任何东西的容器。如果您像我在示例中所做的那样将 box_content-form-datalabel 更改为 div,它将起作用。 @JackFairfield 在我的回答中添加了另一个工作示例。 非常感谢。我现在看到了。你是神! @JackFairfield 嗯谢谢啊哈哈。对于程序员来说,这更像是一个可悲的借口,而不是上帝,但我会接受它;)。 我试图给你赏金,它说我必须等待整整 24 小时。【参考方案2】:

虽然我无法找到阻止 Google 更改 HTML 的方法,here is how I handled it and it seems to work just fine.

我所做的只是从 HTML 中完全删除 *,并将其放入一个伪元素中,并隐藏由谷歌翻译创建的元素之一。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
  <title>JS Bin</title>
</head>
<body>
  <div id="google_translate_element"></div>
  <span style="clear:both; float:left;">Enter your email account.</span>
  <span class="box_content-form-data">
      <label class="my-email">Email Address:</label>
  </span>
</body>
</html>

对于 CSS:

.box_content-form-data 
    clear: both;
    float: left;


.my-email:after 
  content: "*";
  color: red;


font + .box_content-form-data 
  display: none;

【讨论】:

其实我之前已经回答过了……但我收回了我的回答,因为我找到了一种更好、更简单、更正确的方法来解决它。【参考方案3】:

来了。工作示例:http://jsbin.com/gelefonevu/edit?html,css,output

.box_content-form-data 
    clear: both;
    float: left;

.box_content-form-data:nth-of-type(2) 
    clear: initial;

【讨论】:

不....它仍然不起作用。没有样式可以添加到标签或内部跨度会改变输出,因为谷歌翻译正在改变 html。我真的在寻求一种方法来阻止 Google 翻译以改变元素组织方式的方式更改我的 html。 我只想使用“翻译网站”选项。我不想单独翻译每个 html 元素。我使用了这个 gui:translate.google.com/manager/website/ 最初是为了生成下拉列表以添加到网站。 使用nth-of-type(2) 是一种通常非常不可靠的选择器。通过更改 HTML 很容易破坏它,这意味着您必须根据非常特定的结构工作,而这种结构很容易被谷歌翻译破坏。如果它在这种情况下有效,那就太好了,尽管我建议不要使用那种类型的函数,除非它用于容器中的元素包装器,专门作为单个元素包装器重复。 @Babydead 我没有看到你的工作示例。能发个jsbin吗? @RonRoyston 看看我的回答,那里有一个jsbin。【参考方案4】:

不要使用跨度,而是使用标签。谷歌翻译似乎对&lt;span&gt; 标签进行了奇怪的处理。

我假设您将其绑定到一个更适合使用&lt;label&gt; 的表单中。

这里是小提琴:http://jsbin.com/rapusexufu/edit?html,css,output

<label style="clear:both; float:left;">Enter your email account.</label>
<label class="box_content-form-data">Email Address:
    <span style="color:red;">*</span>
</label>

【讨论】:

不幸的是,这在这个非常简单的示例中有效,但是当我尝试使用更大的表单时,它正在做同样的事情。 @JackFairfield 这里是一个实际的 form 元素和四个 input 元素的示例,它仍然有效。 jsbin.com/cayukoxije/edit?html,css,output 请注意,我删除了您的 clearfloat 样式并将它们替换为 input display: block 查看我更新的 JsBin。我看起来像更改为标签元素仅适用于孤立的示例。

以上是关于如何防止谷歌翻译改变我页面的 html 结构?的主要内容,如果未能解决你的问题,请参考以下文章

如何指定您网页的语言,以便谷歌浏览器不提供翻译

谷歌翻译 iframe 解决方法

谷歌翻译不适用于任何 IE,但适用于 Firefox 和 Google Chrome

如何将谷歌翻译的语音保存至电脑中

谷歌翻译 - 禁止翻译我的部分文字

怎么把谷歌翻译设置在桌面上呢?