2016-11-23 117 views
0

我有一种语言谷歌文档,需要它来进行翻译。
我知道有“工具>翻译文件”选项,但是这意味着我必须手动将其每次我做出改变的时间翻译。
是有翻译的文档是与原文档同步的方式,让每一个我做对原文档的变化时,翻译文档将做出相应的改变呢?
在电子表格中还有的GOOGLETRANSLATE功能谷歌文档住翻译

我想它会是可能的直通应用程序脚本命令LanguageApp.translate
但我不知道如何从原始文档

导入内容---编辑---
目前,我有这个脚本设置目标文档

function translate() { 
var original = DocumentApp.openById('Oringinal document id'); 
var translated = LanguageApp.translate(original, 'zh', 'en'); 
Logger.log(translated); 
return translated; 
} 

我不知道,如果它翻译或什么的日志只显示文件,我不知道如何获取变量的内容,我也不知道如何将变量打印到新文档中。
在触发器我只看到时间驱动的触发器?我想在原始文件上设置脚本吗?

+1

在可能的方面,是的,你可以从一个文档获取数据,然后通过翻译API将它传递到另一个文档进行翻译。但是,Docs只有'onOpen'触发器,而不像电子表格那样具有'onEdit'。因此,您需要在更新文档时手动触发脚本。你试过什么了? – Brian

+0

@BrianBennett,我什么我已经试过 – TTDA

+0

最重要的事情是,翻译API需要一个对象,而不是文件ID已经增加。因此,在发送/拉出文字进行翻译之前,您必须先做一些事情。详情请参阅下面的答案。 – Brian

回答

1

这仅仅是概念证明。该脚本有效,但不会保留格式或图像。请记住,Google Doc没有onEdit触发器。您可以创建一个自定义时间触发器,但是如果您的文档未更新,它将继续在后台运行,这可能会或可能不需要。

// Grab the document body. No formatting, tables, etc are kept. 
function getText() { 
    var sourceDoc = DocumentApp.openById('idHere'); 
    var sourceBody = sourceDoc.getBody(); 

    // Push the body to an array for translating in the destination 
    var array = []; 
    array.push(sourceBody.getText()); 
    translateText(array); 
} 

// Take the array and translate to Spanish. 
function translateText(e) { 
    // Translate the array 
    var es = LanguageApp.translate(e, 'en', 'es'); 

    // Open the doc to hold the translation 
    var childDoc = DocumentApp.getActiveDocument(); 

    // Clear out any previously-held text and then append the updated text from source. 
    childDoc.getBody().clear(); 
    childDoc.getBody().appendParagraph(es); 
} 

这很粗糙,但如果将它添加到您的子文档并从脚本编辑器运行,它将起作用。您还可以重构它以从源代码运行,并将其推送到子文档。它也可以设置一个变量来保存文档的原始ID,因此您不必使用PropertiesService进行硬编码。只是一些想法来改善它。不要忘记,这将只抓取正文文本,没有任何格式。