hartmannのゲームあれこれ

適当にやってるゲームのあれこれを偶に書きます

WoT CWE管理シート自動化の旅々 9.『翻訳の嘆き』

 新年あけましておめでとうございます。この連載も年越し連載となりましたが、今後ともよろしくお願いします。

これの続き ts-hartmann.hatenablog.com

はじめに

私「(おなかが鳴る音)」

 クラン「TANOC」が使うDiscordの平壌にいる、金欠でおなかを空かして、今にも泣いてしまいそうな儚くも働き者の担当官は誰でしょう。そう、私です。悲しいことに私です。

私「はぁ……」

f:id:TS_hartmann:20210101035955p:plain
さみしい

やりたいこと

 この連載の2話でプロヴィンス情報を取得したことを覚えているでしょうか?そこで取得したプロヴィンス名は英語表記でした。ただ、英語表記だと何か違和感がある。じゃあ何とか日本語表記にできないか?という感じです。

 Googletranslate関数使えばいいじゃんと思ったあなた、甘いです。Googletranslate関数は地名の翻訳においては精度がかなり低いです。普通の英文のように翻訳してしまいます。

 そこで、少しでも精度を上げつつお金をかけないで翻訳するために、ウェブアプリケーションを作って翻訳APIから翻訳をかけます(翻訳結果はGoogle翻訳APIと同じです、多分)。

f:id:TS_hartmann:20201217163023p:plain
AlburyをGoogletranslate関数で翻訳をかけた結果、ソミュールと出るのはバグ?別の地名だし……

 E列にはAPIから翻訳をかけた結果、F列にはGoogletranslate関数で翻訳をかけた結果が書いてます。地名の翻訳でGoogletranslate関数が使えないことは一目で分かるでしょう。

 ちなみに私はこれらを使っていません。全て翻訳できるわけじゃないし、それなら普通に英語表記のまま使った方が楽ですよね。  

プロヴィンス名を翻訳する手順

手順1. 翻訳APIの作成

qiita.com

 こちらで紹介されている通りにウェブアプリケーションを作成してください。
 出来たら次に行きます。  

手順2. GAS側の記述

 次にコードを書きます。

function translate() {

  //プロヴィンス名(英語)取得

   var id = "スプレッドシートのid";  
   var spreadSheet = SpreadsheetApp.openById(id);  
   var sheetName = "Province参照";
   var cell = spreadSheet.getSheetByName(sheetName).getRange("C2:C500").getValues();
   var result = cell.filter(function(value){return (value[0].length > 0)});//空白要素の配列を削除
   var Arr = Array.prototype.concat.apply([],result); //2次元配列を1次元配列にする
   var count = Arr.length; //配列変数Arrの配列数を調べる
  
  //URL、データ取得のループ処理
   var ary = [];
   for ( var k = 0; k < count; k++) {
       var URL = '外部アプリケーションのURL'+Arr[k]+'&source=en&target=ja';//翻訳API呼び出し
       var response = UrlFetchApp.fetch(URL);
       var response2 = response.toString();
       var mat = response2.match(/"text":"(.+?)"/);
       ary.push(mat);
  }
  
    var count2 = ary.length; //配列変数aryの配列数を調べる
    spreadSheet.getSheetByName(sheetName).getRange("E1:E1000").clearContent();//セル内のコンテンツ削除※値や数式
   
    for (var i = 0; i < count2; i++) {
        spreadSheet.getSheetByName(sheetName).getRange(i + 2, 5).setValue(ary[i][1]); //配列変数aryのi+1番目に格納されている値をセルEi+2に入力
    }
  
   Logger.log(ary);
     
}

 スプレッドシートのidには使用しているスプレッドシートのidを、外部アプリケーションのURLはhttps://script.google.com/macrosから始まるURL(text=まで)を入れてください。

 新しく追加するシートはありません。上手くいけばコードを実行するだけで、画像のようにプロヴィンス名の日本語表記がマップ名の隣に追加されているでしょう。

f:id:TS_hartmann:20201217162211p:plain
これで日本語表記じゃないと心配する勢も安心

 注意点は関数を使うよりも精度が高いとはいえ、地名翻訳の精度は100%ではないということ。地名翻訳が間違っている所は、手動にて翻訳を直す必要があります。
 地名翻訳サービス使わないでもなかなかの精度です。流石Google翻訳……

終わりに

私「止められなかった……」
私「彼は2度も……その手でクランを……」
私「私はただの副指令……ただのGM……」
私「未熟で……何もできないで……」

※特定の人を指すわけではありません

 続きの記事はCWEが始まってからになるでしょう。もしくはCWE中はとても忙しいので終わってからになるかもしれません。2週間後も各クランお互い頑張りましょうね!

ts-hartmann.hatenablog.com

続き