2016-11-23 232 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進行硬編碼。只是一些想法來改善它。不要忘記,這將只抓取正文文本,沒有任何格式。