michimani.net

PHP(Laravel5.x)でGoogle Cloud Translation APIを実行する(単文・複数文)

2017-11-09

Laravel プロジェクトで Google の 翻訳 API (Google Cloud Translation API) を実行したときのメモです。

必要なもの

GCP(Google Cloud Platform)で、Google Cloud Translation API用のAPIキーを発行しておきます。

ライブラリをインストール

PHP用のライブラリが用意されているので、composerでインストールします。

$ composer require google/cloud-translate

実装

.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