PHP(Laravel5.x)でGoogle Cloud Translation APIを実行する(単文・複数文)
2017-11-09Laravel プロジェクトで Google の 翻訳 API (Google Cloud Translation API) を実行したときのメモです。
必要なもの
GCP(Google Cloud Platform)で、Google Cloud Translation API用のAPIキーを発行しておきます。
ライブラリをインストール
PHP用のライブラリが用意されているので、composerでインストールします。
$ composer require google/cloud-translate
実装
- Laravelで使用することを前提としたソースになりますが、使うライブラリは同じなので他のフレームワークでも同様になると思います。
- インストールしたライブラリを使用するためのクラスを作る形で実装します。
.env
にAPIキーを記載します。
GOOGLE_TRANSLATION_API_KEY=ABCDEFGH12345678abcdefgh12345678
クラスを作ります。
<?php
namespace App\Libs
use Google\Cloud\Translate\TranslateClient; // ライブラリの読み込み
use Illuminate\Support\Facades\Log;
class GoogleTranslateManager
{
private api_key = '';
public function __construct()
{
$this->api_key = env("GOOGLE_TRANSLATION_API_KEY");
}
/**
* 単文翻訳
* @param string $text // 翻訳対象テキスト
* @param string $lang_code // 翻訳後の言語コード
*/
public function executeTransrationSingle($text, $lang_code)
{
try
{
$translate = new TranslateClient(['key' => $this->api_key]);
$result = $translate->translate(
$text,
['target' => $lang_code]
);
Log::debug(print_r($result,1));
}
catch (\Exception $e)
{
// エラー処理
}
}
/**
* 複数文翻訳
* @param array $text_list // 翻訳対象テキストのリスト
* @param string $lang_code // 翻訳後の言語コード
*/
public function executeTransrationMulti($text_list, $lang_code)
{
try
{
$translate = new TranslateClient(['key' => $this->api_key]);
$result = $translate->translateBatch(
$text_list,
['target' => $lang_code]
);
Log::debug(print_r($result,1));
}
catch (\Exception $e)
{
// エラー処理
}
}
}
実行結果
<?php
$gObj = new GoogleTranslateManager();
$gObj->executeTransrationSingle('今日はとても気分が悪いです。', 'pt');
// Array
// (
// [source] => ja
// [input] => 今日はとても気分が悪いです。
// [text] => Estou hoje muito doente.
// [model] =>
// )
$gObj->executeTransrationMulti(
[
'昨日はとても気分が良かったです。',
'今日はとても気分が悪いです。',
'明日はいい気分になりたいです。'
],
'es'
);
// Array
// (
// [0] => Array
// (
// [source] => ja
// [input] => 今日はとても気分が悪いです。
// [text] => Estoy muy enfermo hoy.
// [model] =>
// )
//
// [1] => Array
// (
// [source] => ja
// [input] => 明日はいい気分になりたいです。
// [text] => Me gustaría sentirme bien mañana.
// [model] =>
// )
//
// [2] => Array
// (
// [source] => ja
// [input] => 昨日はとても気分が良かったです。
// [text] => Me sentí muy bien ayer.
// [model] =>
// )
// )
複数文翻訳の場合、指定できる配列の要素数は128が最大のようです。
1つのリクエストで別々に翻訳することができるので、複数の単語を翻訳するときには便利かもしれません。
comments powered by Disqus