はじめに
googleの翻訳APIをrailsで実行する方法です。
APIキーを使えばjs側でも実行できますが、そうするとAPIキーがユーザーに漏れてしまうので、Railsなどのサーバーを経由するようにしましょう。
jsのコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| async translate(text) { const url = '/translate'; try { const response = await axios.post(url, { text: text, });
const data = response.data; if (data.error) { console.error('Error:', data.error); return ''; } else { return data.translation_text; } } catch (error) { console.error('Error:', error.message); return ''; } },
|
Rails
gemインストール
Gemfileに以下の行を追加する
1
| gem 'google-cloud-translate-v2'
|
ターミナルで以下のコマンドを実行する
認証の設定
APIキーを利用することもできるのですが、gemライブラリを利用する場合はAPIキーではなく認証情報を利用する方法が便利です。
- GCPを開く
- API Managerを開く
- 認証情報を開く
- 対象のサービスアカウントをクリックもしくは新しく追加
- 「キー」タブからjsonをダウンロード
- プロジェクト直下にsecret_keyフォルダを生成
- secret_keyフォルダにjsonを配置する
参考
https://github.com/googleapis/google-cloud-ruby/blob/main/google-cloud-translate-v2/AUTHENTICATION.md
ルーティング
routes.rb
1 2 3
| Rails.application.routes.draw do post 'translate', to: 'google_api/translation#translate' end
|
controllerのコード
- controllersフォルダの直下に
google_api
フォルダを作成する
google_api
フォルダにtranslation_controller.rbファイルを作成する
1 2 3 4 5 6 7 8 9 10 11 12 13
| require 'google/cloud/translate/v2'
class GoogleApi::TranslationController < ApplicationController def translate ENV["TRANSLATE_PROJECT"] = "hoge-project" ENV["TRANSLATE_CREDENTIALS"] = "secret_key/hoge.json" client = Google::Cloud::Translate::V2.new translation = client.translate text, to: 'en' render json: { translation: translation.text } rescue Google::Cloud::Error => e render json: { error: e.message }, status: :internal_server_error end end
|