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

前回は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アプリにするつもりなら絶対に使えない。違う方法を探さなくては。

コードは以下の通り。

コメント一括翻訳について考えてみたらGoogle スプレッドシートが良かった

いきさつ

仕事の話。アメリカへ納入した装置のPLCコメントを1週間で英語にしてほしいと連絡があった。しかし、コメント数は重複があるが約6万行ある。あまりに膨大な量なので気が遠くなった。三菱PLCのグローバルコメントをCSV出力したので、ファイルはCSV形式。1コメント約1分。重複行は置換して行くとしても、普通に訳して入力していけばおそらく2ヶ月はかかるだろう思った。

解決策

Googleスプレッドシートには翻訳関数があることを発見した。コメントをスプレッドシートへ貼り付け。そしてコメントの右側に翻訳関数を入力。
=GOOGLETRANSLATE(A1,”ja”,”en”)
これは上記はセル”A1”を日本語から英語に翻訳せよという意味。

あとはこれを他のコメントの横にコピーする。簡単なやり方はセルを一度クリックして、右下の部分をしたに引っ張っていくだけ。

結果

翻訳の部分だけなら1時間もかからずに終了することができた。処理中は”Loading…”と表示される。コメント数が多いので少し時間がかかる。

ただしコメント文字数制限である32文字を越えてしまう部分もあるので、PLCコメントにした時に文字が切れてしまう。
翻訳が会っているかは信じるしか無い。もっともコメントは社内の人にしか伝わらないような専門用語もあるので、日本人に日本語のコメントを渡しても全部が理解できるとは思えない。お客さんにはGoogle翻訳を使って訳しましたと宣言することにした。また、操作パネルで表示している言葉と表現が違ってしまう単語もあるので、これも了承していただく必要がある。

今後

スプレッドシートの翻訳関数が非常に使えることが分かった。
翻訳したコメントはCSVファイルにして、CSVデータに戻す作業をするのだが、ここでだいぶ苦労した。