谷歌翻译工具包 - 如何排除文本的部分被处理

4
有没有人知道是否有可能在Google翻译工具中排除文本的某些部分进行处理?
该工具的一个很大优势是它建议已在另一种上下文中翻译过的句子的翻译。但是,如果文本中添加了任何额外的脚注和/或备注,则不会被识别为匹配项。我正在寻找一种将这样的文本放在“括号”中以忽略其中内容的可能性。
例如,以下两个字符串应该被识别为相同:
"This is one continuous sentence."
"This is {this text will be ignored}one continuous sentence."

并且可以翻译成德语,例如:

"Dies ist ein zusammenhängender Satz."
"Dies is {this text will be ignored}ein zusammenhängender Satz."

如果必要的话,我可以为这些插入部分编上编号,并将它们的内容放在额外的段落中,例如:
"This is one continuous sentence."
"This is {1}one continuous sentence."
"{1 this text will be ignored}

非常感谢您的提前帮助,Marcel。
4个回答

1

引用自Google翻译常见问题解答...

How do I tell Cloud Translation API to NOT translate something?

You can use the following HTML tags:

<span translate="no"> </span>
<span class="notranslate"> </span>

This functionality requires the source text to be submitted in HTML.

如果“对你不起作用”,可能的原因是你请求的是文本翻译而不是HTML翻译。如果你只想要文本翻译,那么请将你的纯文本包裹在HTML标签中(如上所示使用<span>标签),然后在翻译后解除包裹。

它已经过时了吗?即使我在Java API中使用它,它也不起作用。 - IHaveHandedInMyResignation
这是文档链接... https://cloud.google.com/translate/troubleshooting - Tony O'Hagan

1

“skiptranslate”类在我提交给gtt的po文件中没有起作用。Gtt继续翻译所有内容。我注意到gtt不会翻译href属性内的任何内容,所以我对我的.po文件进行了预处理(使用“copy”grunt任务),将{{my_expr}}类型的字符串更改为<a href='{{my_expr}}/>字符串,然后在gtt翻译之后再将它们改回{{my_expr}}(使用另一个“copy”grunt任务)。

我不确定这如何影响翻译的语义,但至少结果翻译不会破坏我的模板代码。

这是我的grunt复制任务配置,显示我使用的正则表达式:

    copy: {
   
      fixupPoFileForTranslation: {
        src: [],   // Fill in src and dest!
        dest: '',  
        options : {
          process: function (content, srcpath) {

            return content.replace(/"Go page"/g, '"Go"')
            // Change handlebars {{<name>}} to <a ref='<name>'/> to stop
            // machine translation from translating them.
            return content.replace(/(\{\{[a-zA-Z_\$].*?\}\})/g, '<a href=\'$1\'/>')
              // Same thing for our js .format {0}, {1}, ...
                          .replace(/(\{\d*?\})/g, '<a href=\'$1\'/>');
          }
        }
      },

      fixupPoFileForMerge: {
        src: [],
        dest: '',
        options : {
          process: function (content, srcpath) {

            // Restore <a href=... back to {{<name>}}
            return content..replace(/<a href='(\{\{[a-zA-Z_\$].*?\}\})'(\/>|)/gi, '$1')
            // Same thing for {0} constructs
                          .replace(/<a href=' *(\{.\d?\})('\/>|)/gi, '$1');
          }
        }
      }
    }


1
我认为应该使用“notranslate”而不是“skiptranslate”。 - Tony O'Hagan

0
在编程中,如果您不希望某些内容被翻译,可以添加一个类名为“skiptranslate”的span标签,例如:

“这是<span class="skiptranslate">此文本将被忽略</span>一个连续的句子。”


1
我认为应该使用“notranslate”而不是“skiptranslate”。 - Tony O'Hagan

0

我在使用其他答案中建议的HTML时遇到了问题。

我的做法是将每个{{替换为{{Z_,将每个}}替换为_Z}},所以我发送的不是Hello {{name}}而是Hello {{Z_name_Z}}。收到翻译后,我将其反向替换,一切都正确返回了。

textToTranslate = textToTranslate.replaceAll('{{', '{{Z_').replaceAll('}}', '_Z}}');
translation = await translate.translateText...
translation = translation.replaceAll('{{Z_', '{{').replaceAll('_Z}}', '}}');

这个很容易出问题。答案中带有HTML标记(https://dev59.com/cZHea4cB1Zd3GeqPp307#57634535)更加健壮。 - Adam Bittlingmayer
我遇到了一些问题,因为它对响应进行编码,而且方式很奇怪。例如,它将 " 转换为 &&quot; - 注意两个和号而不是一个。它还会删除空格。例如 Hello {{name}} 变成了 Hola{{name}}。我添加了代码来添加空格,但有两个实例不应该有空格,所以我找不到解决方法。HTML 似乎是更干净的解决方案,但我在使用时遇到了太多问题,而 {{Z_ 方法则没有任何问题。 - kilkfoe

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