Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用谷歌文档脚本翻译文本的逻辑_Javascript_Google Apps Script - Fatal编程技术网

Javascript 使用谷歌文档脚本翻译文本的逻辑

Javascript 使用谷歌文档脚本翻译文本的逻辑,javascript,google-apps-script,Javascript,Google Apps Script,源于,我正在为Google文档创建一个附加组件,它获取文档的主体并将其转换为同一文档中的新页面。我有脚本运行,它的翻译正确,但我有逻辑问题,以保持格式 在复制相同语言的元素时效果良好。但是,谷歌的LanguageApp需要一个字符串来翻译 我简化了上面链接的脚本以在其内部复制文档: function simpleTranslate() { var doc = DocumentApp.getActiveDocument(); var body = doc.getBody(); Log

源于,我正在为Google文档创建一个附加组件,它获取文档的主体并将其转换为同一文档中的新页面。我有脚本运行,它的翻译正确,但我有逻辑问题,以保持格式

在复制相同语言的元素时效果良好。但是,谷歌的
LanguageApp
需要一个
字符串来翻译

我简化了上面链接的脚本以在其内部复制文档:

function simpleTranslate() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();

  Logger.log(body.getAttributes());
  var elements = body.getNumChildren();
  for (var i = 0; i<elements; ++i) {
    var element = body.getChild(i).copy();

    var type = element.getType();
    if(type == DocumentApp.ElementType.PARAGRAPH) {
      // This block copies formatting correctly
      // Pastes English and Spanish into the doc (see img 1).
      body.appendParagraph(element);
      var spn = LanguageApp.translate(element.getText(), 'en', 'es');
      body.appendParagraph(spn);

      // This block pastes Spanish only with no formatting (see img 2)
      // This block is normally commented out when the script runs for testing
      var spn = LanguageApp.translate(element.getText(), 'en', 'es');
      body.appendParagraph(spn)
    }
  }
}
函数simpleTranslate(){ var doc=DocumentApp.getActiveDocument(); var body=doc.getBody(); Logger.log(body.getAttributes()); var elements=body.getNumChildren();
对于(var i=0;i,由于机器翻译不是逐字操作,因此可以合理地假设每个翻译段落的格式都是相同的(即整个段落将具有相同的格式)

鉴于此,您可以使用复制段落的大部分格式,然后使用将其应用于新段落

比如:

...
if(type == DocumentApp.ElementType.PARAGRAPH) {
  // get formatting attributes
  var attributes = element.getAttributes();      

  var spn = LanguageApp.translate(element.getText(), 'en', 'es');
  var newParagraph = body.appendParagraph(spn);

  // Copy format to translated paragraph
  newParagraph.setAttributes(attributes)
}
...

你能举个例子吗(图片就可以了)显示问题?轻推-如果有帮助,为什么不升级它?现在在学校,所以我不能发布图片…今晚会这样做。我想我已经升级了。谢谢提醒。@Mogsdad刚刚更新了更干净的代码和一些图片,显示了在这两种情况下运行脚本的输入和结果。酷-我会看看这个evening,除非其他人先弄明白!我没有尝试使用第二个变量设置属性-我一直将它链接到
body.appendparagration(spn)上
结果参差不齐。我将在今天的计划时间内再玩一些,看看什么能起作用。我已经有一段时间没有处理这些函数了;我还记得它们很挑剔。您可能需要检查返回的属性以查找字体样式,然后显式地设置它们。我想这是传递给at不带属性。从长远来看这没什么大不了的。我没有太多的格式要重做,所以我不打算逐行阅读。无论如何,谢谢你的建议。