翻訳はスプレッドシートを使った処理に変えた

前回はGAS スクリプトのLanguageApp.translate 関数を使い、回数制限に引っかかってしまったので、別の方法を考えてみた。それはスプレッドシートにコメントを貼り付けて、その横にTranslate関数をコピーしていくという方法だ。何度か試してみたら、回数制限に引っかからなさそうだ。

処理がうまくきいきそうなので、Webページから処理できるようにした。
ローカルフォルダからファイルをドラッグ&ドロップすると読み込まれてスプレッドシートにコピーしていく。そしてTranslate関数を貼り付けていく。
ドラッグ&ドロップはHTML5のFILE APIがそのまま使用できる。スプレッドシートへコピーはGASへデータを渡し、スプレッドシートへコピーする流れだ。

しかし、Translateが全て終わったかどうかがわからないのが問題だ。実際にスプレッドシートを見ると処理中はLoading…と表示される。これをどうやったらプログラムで判定させればよいのだろう。全然わからなかった。
(サンプルのような数なら、すぐ終わるが、何千・何万項目あると、時間がかかる。)

本当は、一気にコメントファイル出力までやりたかった。しかし、今回はあきらめて別々に処理することに。半自動でやることにした。
手順は以下の通り

  1. ファイルをマウスでドラッグし、Webのテキストボックスの上で離す。
  2. 変換ボタンを押してスプレッドシートへデータを送り、翻訳処理を開始
  3. スプレッドシートを見て翻訳が終わったことを確認
  4. Webページへコメントをコピー
  5. CSVに整形してCSVファイルへ出力する

このような流れにした。自分で使うからこれでいいだろう。
今回は1〜3を作成した。

Google Apps Script (GAS)で試そうとしたら失敗に終わった

前回は出力したCSVファイルをスプレッドシートへ貼り付けて、またコピーしテキストエディタに貼り付け、整形し保存といった手順を一つずつやっていたので、自動化したいと思った。なんなら翻訳Webアプリを作って公開しようかと思った。

GX-Works2のコメント翻訳WebアプリをGoogle App Scripts で作成しようとしたらつまずいた。 GASの制限だった。

GASでの翻訳命令は下記の通り
LanguageApp.translate(comment, "ja", "En")
翻訳関数自体は苦労する余地もない。

csvファイルをGoogleドライブのフォルダに置いて、ファイルをよび出す部分も作成した。ファイルからの読み出し自体はインターネットで検索すればすぐに例が出てくる。三菱コメントの使用どおりUFT-16で読み出せた。これも苦労しなかった。

csvファイルをタブで区切って変数に配列に入れてコメントの部分だけループで翻訳関数にかける。ここからつまずき始めた。

一つは短い時間に使用する回数。translate命令を実行してもう一度命令をするまでの時間が短すぎると、エラーになってしまう。これはタイマーを入れてtranslate命令を使う間隔を1秒待つことで回避できた。

Utilities.sleep(1000)

しかし次は1日の実行回数で引っかかった。おそらく一日でtranslate関数を使うことができる数に制限があるとのことだ。特にGmailと違って特に翻訳関数には記載が無いのに。一回のテストに付きループでtrans関数を何百回とかけていたから、すぐにエラーが出た。おそらく2000回ぐらい使うとなるのだと思う。テストの段階で制限回数に引っかかるなんて・・・。Webアプリにするつもりなら絶対に使えない。違う方法を探さなくては。

コードは以下の通り。