Apps Scriptリファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

ラベル Google翻訳 の投稿を表示しています。 すべての投稿を表示
ラベル Google翻訳 の投稿を表示しています。 すべての投稿を表示

2020年1月31日金曜日

LanguageApp.translateで英文中の単語ごとに翻訳したい


Practice makes the impossible possible



練習 作ります その 不可能な 可能


のように単語ごとに翻訳したい。

半角スペースをsplitしてfor文で作ってもいいけれど
LanguageApp.translateを実行する回数が多くなる。

半角スペースではなく\nで区切ってやると一気に翻訳できた。



コード.gs
function myFunction() {
  var str = "Practice\nmakes\nthe\nimpossible\npossible";
  var translate = LanguageApp.translate(str, "en", "ja");
  Logger.log(translate);
}


実行結果

練習
作ります
その
不可能な
可能

2019年12月27日金曜日

シートのA列の英語をB列に日本語翻訳したい(スクリプトのプロパティを使ってみる)


スプレッドシートのA列に入力されている英語を日本語に翻訳してB列に入れたい

シートのA列の英語をB列に日本語翻訳したい(トリガーでやってみる)
ではトリガーで実行する際にB列の開始行を取得しました

今回は
B列の開始行をスクリプトのプロパティを使って読み書きする方法を試しました



実行前


実行後



サンプルデータ
englishjapanese
candy
chocolate
gum
caramel
cake
cream puff
chips
pancake
biscuit
pudding
cookie




コード4.gs
function myFunction() {
  var numRow = 5;// 一度に取得する行数
  var iterate = 2;// 繰り返す回数
  var getStartCol = 1;// 値を取得する列番号 A列なら1
  var setStartCol = 2;// 値を入力する列番号 B列なら2
  var initialRow = 2;// 開始行の初期値 1行目が見出しなら2行目から
  
  var ssUrl = 'https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=0';
  var sheet = getTargetSheet(ssUrl)
  var lastRow = sheet.getLastRow();
  var resultArray = [];
  var startRow = getProp('startRow');

  for(var i = 0; i < iterate; i++) {
    var nextStartRow = getProp('startRow');
    var range = sheet.getRange(nextStartRow, getStartCol, numRow, 1);
    var values = range.getDisplayValues();
    values = arrayPushApply(values);
    values = values.filter(function(value) { return value !== ''; });

    if(values.length > 0) {
      resultArray.push(values);
      setProp('startRow', parseInt(nextStartRow) + numRow);
    } else {
      setProp('startRow', initialRow);// 初期値に戻す
      deleteTrigger('myFunction');
    }
  }
  
  resultArray = arrayPushApply(resultArray);
  setTranslated(sheet, startRow, setStartCol, resultArray);
}

function setTranslated(sheet, startRow, setStartCol, resultArray) {
  var translateds = [];
  for(var i = 0; i < resultArray.length; i++) {
    var value = resultArray[i];
    var translated = LanguageApp.translate(value, "", "ja");
    translateds.push([translated])
  }
  var range = sheet.getRange(startRow, setStartCol, translateds.length, 1);
  range.setValues(translateds);
}


//二次元配列を一次元配列にして返す
function arrayPushApply(array){
  for(var i = 1; i < array.length; i++){
    Array.prototype.push.apply(array[0], array[i]);
  }
  return array[0]
}

function getTargetSheet(ssUrl) {
  var ss = SpreadsheetApp.openByUrl(ssUrl);
  var sheetId = ssUrl.split("gid=")[1];
  var sheets = ss.getSheets();
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].getSheetId() == sheetId) {
      break;
    }
  }
  var sheet = ss.getSheets()[i];
  return sheet;
}

function deleteTrigger(functionName) {
  var allTriggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < allTriggers.length; i++) {
    if (allTriggers[i].getHandlerFunction() == functionName) {
      ScriptApp.deleteTrigger(allTriggers[i]);
      break;
    }
  }
}

function getProp(key) {
  return PropertiesService.getScriptProperties().getProperty(key);
}

function setProp(key, value) {
  PropertiesService.getScriptProperties().setProperty(key, value);
}



関連記事

シートのA列の英語をB列に日本語翻訳したい(一気にやる)
シートのA列の英語をB列に日本語翻訳したい(B列最終行の次から)
シートのA列の英語をB列に日本語翻訳したい(トリガーでやってみる)

シートのA列の英語をB列に日本語翻訳したい(トリガーでやってみる)


今回やりたいこと

スプレッドシートのA列に入力されている英語を日本語に翻訳してB列に入れたい

シートのA列の英語をB列に日本語翻訳したい(一気にやる)
シートのA列の英語をB列に日本語翻訳したい(B列最終行の次から)
では手動で実行するコードを書きました


件数が多い場合は実行時間制限(6分)にぶつかるので
今回はトリガーを使って試しました
  • 1分ごとのトリガーにmyFunction()を設定すると
  • 1分ごとに実行されて、最終行まで実行したらトリガーが自動で削除される



一日に翻訳できる量には制限があります
その上限を越えるとその日はそれ以上実行できなくなります



実行前


実行後



サンプルデータ
englishjapanese
candy
chocolate
gum
caramel
cake
cream puff
chips
pancake
biscuit
pudding
cookie




コード3.gs
var sourceLang = '';// 翻訳元の言語を空にしておくと自動判定してくれる
var targetLang = 'ja';// この言語に翻訳する 言語の種類は→https://cloud.google.com/translate/docs/languages
var sourceCol = 1;// 値を取得する列
var targetCol = 2;// 書き込む列
var numRow = 5;// 一度に取得する行数
var iterate = 2;// 繰り返す回数

function myFunction() {
  var ssUrl = 'https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=0';
  var sheet = getTargetSheet(ssUrl);
  var lastRow = sheet.getLastRow();

  for(var i = 0; i < iterate; i++) {
    var resultArray = [];
    var lastRowB = getLastRowAt(sheet, targetCol);
    var startRow = lastRowB + 1;
    var numRows = lastRow - lastRowB;
    var range = sheet.getRange(startRow, sourceCol, numRow, 1);
    var values = range.getDisplayValues();
    values = arrayPushApply(values);
    values = values.filter(function(value) { return value !== ''; });
    if(values.length > 0) {
      resultArray.push(values);
      resultArray = arrayPushApply(resultArray);
      setTranslated(sheet, startRow, resultArray);
    } else {
      deleteTrigger('myFunction');
    }
  }
}

function setTranslated(sheet, startRow, resultArray) {
  var translateds = [];
  for(var i = 0; i < resultArray.length; i++) {
    var value = resultArray[i];
    var translated = LanguageApp.translate(value, sourceLang, targetLang);
    translateds.push([translated])
  }
  var range = sheet.getRange(startRow, targetCol, translateds.length, 1);
  range.setValues(translateds);
}

//二次元配列を一次元配列にして返す
function arrayPushApply(array){
  for(var i = 1; i < array.length; i++){
    Array.prototype.push.apply(array[0], array[i]);
  }
  return array[0];
}

function getTargetSheet(ssUrl) {
  var ss = SpreadsheetApp.openByUrl(ssUrl);
  var sheetId = ssUrl.split("gid=")[1];
  var sheets = ss.getSheets();
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].getSheetId() == sheetId) {
      break;
    }
  }
  var sheet = ss.getSheets()[i];
  return sheet;
}

function getLastRowAt(sheet, col) {
  var startRow = 1;
  var numCols = 1;
  var lastRow = sheet.getLastRow();
  var values = sheet.getRange(startRow, col, lastRow, numCols).getValues();
  for (var i = values.length - 1; i >= 0; i--) {
    if (values[i] != "") {
      break;
    }
  }
  var lastRowAt = i + 1;
  return lastRowAt;
}

function deleteTrigger(functionName) {
  var allTriggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < allTriggers.length; i++) {
    if (allTriggers[i].getHandlerFunction() == functionName) {
      ScriptApp.deleteTrigger(allTriggers[i]);
      break;
    }
  }
}



関連記事

シートのA列の英語をB列に日本語翻訳したい(一気にやる)
シートのA列の英語をB列に日本語翻訳したい(B列最終行の次から)

シートのA列の英語をB列に日本語翻訳したい(B列最終行の次から)


今回やりたいこと

スプレッドシートのA列に入力されている英語を日本語に翻訳してB列に入れたい

シートのA列の英語をB列に日本語翻訳したい(一気にやる)
ではB列の値すべてを一気に翻訳しました


今回は
B列に入力されている値の最終行を取得してその次の行から翻訳してみる



実行前


実行後



サンプルデータ
englishjapanese
candy
chocolate
gum
caramel
cake
cream puff
chips
pancake
biscuit
pudding
cookie




コード2.gs
var sourceLang = '';// 翻訳元の言語を空にしておくと自動判定してくれる
var targetLang = 'ja';// この言語に翻訳する 言語の種類は→https://cloud.google.com/translate/docs/languages
var sourceCol = 1;// 値を取得する列
var targetCol = 2;// 書き込む列

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var lastRowB = getLastRowAt(sheet, targetCol);
  var startRow = lastRowB + 1
  var numRows = lastRow - lastRowB;
  var resultArray = [];
  var range = sheet.getRange(startRow, sourceCol, numRows, 1);
  var values = range.getDisplayValues();
  values = arrayPushApply(values);
  values = values.filter(function(value) { return value !== ''; });
  setTranslated(sheet, startRow, values);
}

function setTranslated(sheet, startRow, resultArray) {
  var translateds = [];
  for(var i = 0; i < resultArray.length; i++) {
    var value = resultArray[i];
    var translated = LanguageApp.translate(value, sourceLang, targetLang);
    translateds.push([translated])
  }
  var range = sheet.getRange(startRow, targetCol, translateds.length, 1);
  range.setValues(translateds);
}

//二次元配列を一次元配列にして返す
function arrayPushApply(array){
  for(var i = 1; i < array.length; i++){
    Array.prototype.push.apply(array[0], array[i]);
  }
  return array[0]
}

function getLastRowAt(sheet, col) {
  var start_row = 1;
  var num_cols = 1;
  var sh_last_row = sheet.getLastRow();
  var values = sheet.getRange(start_row, col, sh_last_row, num_cols).getValues();
  for (var i = values.length - 1; i >= 0; i--) {
    if (values[i] != "") {
      break;
    }
  }
  var last_row = i + 1;
  return last_row;
}




関連記事

シートのA列の英語をB列に日本語翻訳したい(一気にやる)

シートのA列の英語をB列に日本語翻訳したい(一気にやる)


今回やりたいこと

スプレッドシートのA列に入力されている英語を日本語に翻訳してB列に入れたい



実行前


実行後



サンプルデータ
englishjapanese
candy
chocolate
gum
caramel
cake
cream puff
chips
pancake
biscuit
pudding
cookie


最終行までを取得して、全部一気に翻訳してみる

コード1.gs
var sourceLang = '';// 翻訳元の言語を空にしておくと自動判定してくれる
var targetLang = 'ja';// この言語に翻訳する 言語の種類は→https://cloud.google.com/translate/docs/languages

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var lastRow = sheet.getLastRow();
  var resultArray = [];
  var range = sheet.getRange(startRow, 1, lastRow, 1);
  var values = range.getDisplayValues();
  values = arrayPushApply(values);
  values = values.filter(function(value) { return value !== ''; });
  setTranslated(sheet, startRow, values);
}

function setTranslated(sheet, startRow, resultArray) {
  var translateds = [];
  for(var i = 0; i < resultArray.length; i++) {
    var value = resultArray[i];
    var translated = LanguageApp.translate(value, sourceLang, targetLang);
    translateds.push([translated])
  }
  var range = sheet.getRange(startRow, 2, translateds.length, 1);
  range.setValues(translateds);
}

//二次元配列を一次元配列にして返す
function arrayPushApply(array){
  for(var i = 1; i < array.length; i++){
    Array.prototype.push.apply(array[0], array[i]);
  }
  return array[0]
}





2018年1月5日金曜日

Googleの「ウェブサイト翻訳ツール」プラグインを使う

自分のWebページを指定した言語に翻訳する無料プラグインがGoogleから提供されています

コードを作成して貼り付けると
このBlogにもあるような言語選択が行えるようになります




https://translate.google.com/manager/website/
↑にアクセスして手順通りに進むとコードが作成されます


HTML Serviceで試したコードは以下のとおりです



コード.gs
function doGet() {
  return HtmlService.createHtmlOutputFromFile("index");
}
意訳
この機能がやること
指定したHTMLファイルを表示する




index.html
<!DOCTYPE html>
<html>
<body>
  <div id="google_translate_element">
  </div>
  <script type="text/javascript">
    function googleTranslateElementInit() {
      new google.translate.TranslateElement({
        pageLanguage: 'ja',
        layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL
      }, 'google_translate_element');
    }
  </script>
  <script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit" type="text/javascript"></script>

Webページのテキストを指定した言語に翻訳します。

</body>
</html>
意訳
これはHTML5文書です


https://translate.google.com/manager/website/
で作成したコードを貼り付ける










このテキストが指定された言語に翻訳される






Googleの「ウェブサイト翻訳ツール」でコードを作る


2018/01/05時点では以下の手順で作成できました



1. https://translate.google.com/manager/website/
 にアクセスします


2. 「今すぐウェブサイトに追加」ボタンをクリックします


3. 「ウェブサイトのURL」を入力して
 「ウェブサイトの言語」を選択して
 「次へ」をクリックします


4. 「翻訳する言語」「表示モード」「詳細設定」を選択して
 「コードを取得」をクリックします


5. 作成されたコードを自分のWebサイトの.htmlファイルの任意の位置に置く




参考

ウェブサイト翻訳ツール - Google 翻訳 - ウェブサイトの追加
https://translate.google.com/manager/website/

2018年1月1日月曜日

入力言語を自動判定して翻訳する

入力言語の指定をしなければ自動で判定される

どういうことかというと

LanguageApp.translate("hello", "en", "ja");
→こんにちは


のように入力言語を "en" に明示的に指定しなくても


LanguageApp.translate("hello", "", "ja");
→こんにちは


のように空にしておけば自動で判定してくれるそうです



コード.gs
function myFunction() {
  var text = "hello";
  var from = "";
  var to = "ja";
  var result = LanguageApp.translate(text, from, to);
  Logger.log(result)
}
意訳
この機能がやること
翻訳したいテキストを用意する
入力言語を空にして
翻訳後の言語を指定して
翻訳して
ログに出す



参考

Class LanguageApp
https://developers.google.com/apps-script/reference/language/language-app

Google翻訳で単語ごとの翻訳結果も取得する

LanguageApp.translateを使ってこういう結果を得る


Good morning
を翻訳して

 [おはようございます, [良い, 朝]]

という結果を得る



コード.gs
function get_google_translate() {
  var sentence = "Good morning";
  var words = sentence.split(" ");
  var translate_words = [];
  for (var i = 0; i < words.length; i++) {
    var word = words[i];
    var translate_word = translater(word);
    translate_words.push(translate_word);
  }
  var translate_sentence = translater(sentence);
  Logger.log([translate_sentence, translate_words]);
}

function translater(text) { 
  return LanguageApp.translate(text, "en", "ja");
}
意訳
この機能がやること
翻訳したい英文を用意して
半角スペースで区切って
結果を入れる入れ物を用意して
単語の数だけ以下を繰り返す
単語をひとつずつ取得して
translater(text)に渡して結果を得て
translate_wordsに追加する

英文をtranslater(text)に渡して結果を得て
英文と単語の翻訳結果をログに出す


この機能がやること
渡されたテキストを英語から日本語に翻訳して返す



参考

Class LanguageApp
https://developers.google.com/apps-script/reference/language/language-app

2016年6月19日日曜日

Google Apps ScriptでGoolge翻訳をしてみる

Google Apps ScriptでGoogle翻訳を利用するコードをひとつ書いてみました。

設定したテキストを翻訳してメッセージボックスに表示するという簡単な例です。

ポイント
今回はシンプルに、「Hello」という英語を日本語に翻訳するということをやってみます。
"Hello"を"英語"から"日本語"に翻訳するというコードは下のようになります。

LanguageApp.translate("Hello", "en", "ja");

英語は"en" で、日本語は"ja" で指定します。


コード.gs
function myFunction() {
    var translate = LanguageApp.translate("Hello", "en", "ja");
    Browser.msgBox(translate);
}


メッセージボックスに翻訳結果が表示されます


コードを実行するまでの手順

1. コード.gsにコードを書いて保存します。

2. 実行メニューからnyFunctionを選択します。

3. 許可を確認をクリックします。

4. 許可をクリックします。

シートに戻ると、翻訳された日本語がメッセージボックスに表示されます。



おまけ

スプレッドシートの関数でも翻訳することができます。
A1に「Hello」を入力して、B1に下の関数を入力してみてください。

=GoogleTranslate(A1, "en","ja")

すると、B1セルにはLoading...表示の後、「こんにちは」と翻訳されます。

その他の言語とコードの例
言語コード
英語en
スペイン語es
フランス語fr
イタリア語it
ドイツ語de
日本語ja
韓国語ko
中国語zh-CN


参考

Class LanguageApp
https://developers.google.com/apps-script/reference/language/language-app

Language support
https://cloud.google.com/translate/docs/languages

Latest post

Google Formsでクイズを作りたい

Googleフォームには回答を判定するクイズモードがあります 今回はそのクイズモードで回答の判定とフィードバックについて書いていきます 「クイズモード」の表記: 日本語の表記は「テストにする」ですが 英語の表記は「Make this a quiz」となっています この記事ではそれ...