かくすけのいろいろ作るブログ

かくすけの開発者ブログです。開発の他いろいろなモノづくりについて書きます。

【Ruby】Google Translation API を使って文字列を翻訳する

開発環境OS CeonOS7 Rubyのバージョン 2.5.0

こんにちは。かくすけです。
今回はGoogleのTranslation APIを使って文字列を翻訳させます。

最終的に完成させたいアプリ

kakusuke98.hatenablog.com

前回の記事

kakusuke98.hatenablog.com

前回はGoogle Cloud Vision APIを使って画像内の文字列を取得するところまで作りました。
今回は、画像内から取得した文字列を翻訳させる部分を作ります!

今回は単純にRubyのコードのみの紹介です。
実際に使うときは前回と同様にLambda関数を作成しWindows Form Appから呼び出すのですが、前回とほぼ一緒になっちゃいますからね。

目次

  • Gemfileの準備
  • 書いたコードの紹介
  • 動作確認

Gemfileの準備

rubyつかいにはおなじみGemfileを準備します。
まず適当に専用のディレクトリを作って

$ mkdir google-translate

そのディレクトリ内に次のようなGemfileを作成します。

source 'https://rubygems.org'
gem 'rest-client'

シンプル!API呼び出しにはいつも通り、私の大好きなRestClientを使います。

github.com

bundle install でGemをインストール

$ bundle install --path vendor/bundle

つらつらと色々表示されたあと、確認するといろいろとファイルとディレクトリが追加されています。

[f:id:kakusuke98:20190826205313p:plain]

書いたコードの紹介

同じ場所に以下の内容のrubyファイルを作成します。
私は"google_translate.rb"ファイル名にしました。

require 'json'
require 'rest-client'

#--------------------------------------------
# メインメソッド
# 英語を日本語に翻訳する
# Google Translation API 使用
#--------------------------------------------
url = "https://translation.googleapis.com/language/translate/v2?key={API Key}"
payload = {
  q: "{翻訳したい英文}",
  target: 'ja',
  source: 'en'
}
header = {:content_type=>"text/html; charset=utf-8"}
RestClient.post(url, payload.to_json, header) { |response, request, result|
  case response.code
  when 200
    # 成功時の処理
    parse_response =  JSON.parse(response)
    lambda_response_body = parse_response['data']['translations'][0]['translatedText']
    p lambda_response_body  # Google Translation APIからのレスポンスを出力
  else 
    # 失敗時の処理
    parse_response =  JSON.parse(response)
    p parse_response
  end
}

↓の API Key はGoogleのコンソールで生成します。
f:id:kakusuke98:20190826210051p:plain

生成の仕方は前回の記事の項目「Google Cloudのプロジェクト設定」を見たらわかりますよ!
前回の記事で使用したのは Google Cloud Vision API ですがここの手順は同じです。
すべて「Cloud Vision API」を「Translation API」に読みかえてくださいね
kakusuke98.hatenablog.com

こちらは Translation API に投げるデータの設定をしている部分。

f:id:kakusuke98:20190826210559p:plain

q翻訳したい文字列
target翻訳結果として受け取りたい言語
source翻訳前の文字列の言語

今回は「英文→日本語文」の翻訳をしたいのでtargetを'ja'、sourceを'en'としています。

こちらは実際にAPI呼び出し処理をする部分。
f:id:kakusuke98:20190826211251p:plain Translation API から受け取ったjsonデータ内の"parse_response['data']['translations'][0]['translatedText']"内に翻訳結果が入っているので、その部分を出力します。

動作確認

ではでは実際に翻訳します!
前回に引き続きゲーム「The Wolf's Bite」の画面に含まれるこちらの画像から取得した英語を翻訳します。
f:id:kakusuke98:20190822230724p:plain

rubyコードを実行!

$ ruby google_translate.rb

そして返ってきた翻訳結果は...
f:id:kakusuke98:20190826211958p:plain

おお...可愛い見た目に反したカタイ文章!!
ゲーム的にあえて固い英文を使って表現されているのか、Translate API がカタめに翻訳するクセがあるのかはわかりませんが、言いたい意味はわかりますね。
「3匹のこぶた」のお話にでてきた狼がレンガ造りの家を壊せなかったことが理由でレストラン事業に方向転換したと。

内容的にあえてカタく表現しているような気がしてきました。

さて、今回は前回とほぼ同じ内容だったのもあって簡単に動かすことができました。
はやく実際にゲームをしながら使いたいな~~

これでとりあえず作りたいアプリの大枠機能をすべて作り終えました!!
しばらくはちまちまとした作業になると思うのでブログの更新は間が空くかもしれません。
でもなんとか作ってみせるぞ!

今回も最後までありがとうございました!