こんにちは。がばりんちょです。
朝になったら熱は引いたんですが、なんか、こう、元気!ではないような感じが。こうも連続で体調が悪いと、経年劣化なのか、なにか別のものがあるのか、心配になりますなぁ。ずーっと65%という感じです。
さて、本日は「日本語エクセルファイルの一括英語翻訳」にチャレンジしました。ファイル20個あって、各ファイルには8シート、各シートにはおおよそ500行x8列くらいのデータが詰まってまして、これを英訳しましょう。というミッション。
考えたことその1:googletranslate関数を使う
これね。僕得意技なんですよ。去年習得したんですが、これを覚えたことによって、翻訳速度が10倍速になりました。こいつのいいところはお手軽なところ、あとは、翻訳前後を見比べやすいので、怪しげな翻訳があればマニュアルで直しやすいというところ。一方で各シートに=googletranslate(翻訳したいセル,”元言語”, ”翻訳先言語”)と指定するのが面倒という。
考えたことその2: Google Appsを使って一括変換
googletranslate関数を入力しようと=goくらいのところで、「これは面倒なことになる」と思い、ググってみると、ファイル単位で変換できる方法があるという。
エクセルをGoogle Spreadsheet形式に変換 > 拡張機能からGoogle Apps起動>以下のコードを貼り付ける>実行>権限について聞かれるからOK。これだけで1ファイルがっつり翻訳してくれる。
以下のスクリプトは、元シートをコピー、シート名の頭にXをつけてシート名を翻訳、シートの中身を翻訳するもの。ファイルごとに翻訳できるので、関数を各シートに貼らなくていい。一方、こいつには翻訳制限があります。閾値がどこにあるのかわからないけど、叩きすぎると1日のリクエスト数超過しましたー。って言われちゃう。ちょこちょこWaitを入れた方が長持ちするらしい。あと、実行後6分以上かかるスクリプトはTime outになる。
これで翻訳速度は100倍くらいになったと思う。ただ、原文は見ないので怪しい翻訳はそのまま。ファイルを人に渡すときは、機械翻訳だから変な翻訳があったら確認してね。と伝えて置くほうが無難かもしれない。
えー。3ファイル/20ファイル完了したところで無事制限に…ひっかかりまして。
function copyAndTranslateSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var targetLang = "en"; // 翻訳先の言語(英語)
sheets.forEach(sheet => {
var sheetName = sheet.getName();
var translatedName = translateText(sheetName, targetLang); // シート名を翻訳
var newSheetName = "X" + translatedName; // 接頭辞「X」をつける
var copiedSheet = sheet.copyTo(ss).setName(newSheetName);
translateSheetContent(copiedSheet, targetLang); // シート内容を翻訳
});
Logger.log("すべてのシートがコピーされ、翻訳されました!");
}
function translateSheetContent(sheet, targetLang) {
var range = sheet.getDataRange();
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (values[i][j]) {
values[i][j] = translateText(values[i][j], targetLang); // セルの内容を翻訳
}
}
}
range.setValues(values);
}
function translateText(text, targetLang) {
try {
return LanguageApp.translate(text, "ja", targetLang);
} catch (e) {
Logger.log("翻訳エラー: " + text);
return text; // 翻訳できなかった場合はそのまま
}
}
考えたことAPその3: Google Cloud Translation APIを使う
1日3ファイルずつ翻訳すると7日かかってしまう…ということで、多少お金がかかってもいいのでなんとかならんかということで、次に検討したのがこれ。50万字/月まで無料、その後100万字まで$20らしい。1ファイルの文字数がおおよそ3万字程度、残り17ファイルx3万字=51万字。ギリギリ無料に収まらないけど、かかっても$20、払えない額でもなさそう…ということでチャレンジ。
Google Cloud に登録して、半日いじってみたけど、残念ながら「Method doesn’t allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API」というエラーが出てしまい、これが解決できず。
API側で正しくユーザを認識していないのか、ユーザ側で正しくAPIを叩けていないのか。APIキーは正しく設定できてるみたいなのに…なんで動かないんだ?APIにちゃんとアクセスできるようになると、Google Slideも自動翻訳できるようになるっぽいので、何としても習得したい。誰かコーチしてくんないか。薄謝と拍手を進呈したい。
ちなみにこれができると翻訳速度は200倍位になると思う。翻訳の文言もこちらの方がキレイだとWebで発信している方がいた。Microsoft Translator APIも気になるけど、こちらはAzureとやらを契約しないと行けないらしい。馴染が全くないんだよなぁ。
今日の学び
Google Translate AIP (無料)はGoogle Appsから簡単に使える
それでは。
コメント