2016-11-23 5 views
0

У меня есть документ google на одном языке и его нужно перевести.
Я знаю, что есть опция «Инструменты> Перевести документ», но это означает, что я должен переводить ее вручную каждый раз, когда я делаю изменения.
Есть ли способ, чтобы переведенный документ был синхронизирован с исходным документом, так что каждый раз, когда я делаю изменения в исходном документе, переводчик также внесет соответствующие изменения?
в таблице есть это GOOGLETRANSLATE функцияGoogle docs live translation

я имею в виду, что это будет возможно через приложение команду сценария LanguageApp.translate
, но я не знаю, как импортировать контент из оригинального дока

--- редактировать ---
в настоящее время я этот скрипт установлен на целевом документе

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

я не уверен, если это переводится или что, то журнал показывает только документ, Я не уверен, как получить содержимое переменной, я также не знаю, как печатать переменную в новом документе.
В триггерах я вижу только триггер времени срабатывания? я полагаю, чтобы установить сценарий в исходном документе?

+1

Что касается возможных да, вы можете взять данные из одного документа и передать его через Переводчик в другой документ для перевода. Но в Docs есть триггер onOpen, а не 'onEdit', как электронная таблица. Таким образом, вам придется вручную запускать скрипт при обновлении документа. что ты уже испробовал? – Brian

+0

@BrianBennett, я добавил в то, что я пробовал – TTDA

+0

Самая большая вещь в том, что для API перевода требуется объект, а не идентификатор документа. Итак, есть некоторые вещи, которые вам нужно сделать, прежде чем вы сможете отправлять/вытягивать текст для перевода. Подробнее см. Мой ответ ниже. – Brian

ответ

1

Это доказательство концепции. Сценарий работает, но не сохраняет форматирование или изображения. Помните, что нет триггера onEdit для Google Doc. Вы можете создать настраиваемый триггер времени, но если ваш документ не обновлен, он будет продолжать работать в фоновом режиме, что может быть нежелательным или нежелательным.

// 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); 
} 

Это грубо, но это сработает, если вы добавите его в свой дочерний документ и запустите его из редактора сценариев. Вы также можете реорганизовать его для работы из источника и нажать на дочерний документ. Было бы также работать, чтобы установить переменную, чтобы сохранить исходный идентификатор документа, поэтому вам не нужно жестко кодировать его с помощью PropertiesService. Просто некоторые идеи по его улучшению. Не забывайте, что это только захватит текст тела, ни одно из форматирования.