PHPでクラウド翻訳サービスを利用する

(1/1)
PHPを使って、Google翻訳DeepL翻訳といったクラウド翻訳サービスのAPIを呼び出し、入力したテキストを翻訳するプログラムを作ってみることにする。

(2025年9月15日).pahooEnv導入

目次

サンプル・プログラムの実行例

PHPでクラウド翻訳サービスを利用する

サンプル・プログラム

圧縮ファイルの内容
translate.phpサンプル・プログラム本体
.pahooEnvクラウドサービスを利用するためのアカウント情報などを記入する .env ファイル。
使い方は「各種クラウド連携サービス(WebAPI)の登録方法」を参照。include_path が通ったディレクトリに配置すること。
pahooInputData.phpデータ入力に関わる関数群。
使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
translate.php 更新履歴
バージョン 更新日 内容
2.1.1 2025/09/15 .pahooEnv導入
2.0.1 2024/09/23 参考URL変更
1.0.0 2023/03/04 Google Cloud Translate,DeepL APIに対応
pahooInputData.php 更新履歴
バージョン 更新日 内容
2.0.1 2025/08/11 getParam() bug-fix
2.0.0 2025/08/11 pahooLoadEnv() 追加
1.9.0 2025/07/26 getParam() 引数に$trim追加
1.8.1 2025/03/15 validRegexPattern() debug
1.8.0 2024/11/12 validRegexPattern() 追加

準備:PHP の https対応

クラウド連携や相手先サイトのデータを読み込むのに https通信を使うため、PHPに OpenSSLモジュールが組み込まれている必要がある。関数  phpinfo  を使って、下図のように表示されればOKだ。
OpenSSL - PHP
そうでない場合は、次の手順に従ってOpenSSLを有効化し、PHPを再起動させる必要がある。

Windowsでは、"php.ini" の下記の行を有効化する。
extension=php_openssl.dll
Linuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順

これで準備は完了だ。

準備:pahooInputData 関数群

PHPのバージョンや入力データのバリデーションなど、汎用的に使う関数群を収めたファイル "pahooInputData.php" が同梱されているが、include_path が通ったディレクトリに配置してほしい。他のプログラムでも "pahooInputData.php" を利用するが、常に最新のファイルを1つ配置すればよい。

また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .pahooEnv ファイルから読み込む関数 pahooLoadEnv を備えている。こちらについては、「各種クラウド連携サービス(WebAPI)の登録方法」をご覧いただきたい。

準備:クラウド翻訳サービス選択

translate.php

 142:     // クラウド翻訳サービス選択
 143:     // 利用しないクラウド翻訳サービスはコメントアウトすること.
 144:     public $apiTable = array(
 145:     // 値               タイトル               翻訳メソッド
 146:     'google' => array('title'=>'Google翻訳', 'func'=>'googleCloudTranslate'),
 147:     'deepl'  => array('title'=>'DeepL翻訳',  'func'=>'deepLTranslate'),
 148:     );

クラウド翻訳サービスを利用する処理はクラス pahooTranslate として分離させた。
複数のクラウド翻訳サービスを使い分けることができるが、もし利用しないのであれば、配列 $apiTable で使わないサービスの行をコメントアウトすればよい。

準備:Google Cloud Translation API

Google翻訳(Google Cloud Translation API)を利用するには、まず、Google Cloud Platformに登録する必要がある。登録は無料。手続きは「各種WebAPIの登録方法 - Google Cloud Platform」をご覧いただきたい。あとでAPIキーを使うので控えておいてほしい。
Google Cloud Translation API
次に、検索窓から Cloud Translation APIを検索し、有効にする。これでGoogle翻訳が利用できるようになる。
このAPIは、1ヶ月当たり最初の50万文字までは無料だが、それ以上は有料になる。

translate.php

 131:     // Google Cloud Platform APIキー
 132:     // https://cloud.google.com/maps-platform/ から無料申込み.
 133:     // 1ヶ月当たり最初の50万文字までは無料だが、それ以上は有料になる.
 134:     // 利用しないのなら未定義のままでよい.
 135:     public $GOOGLE_API_KEY = '';

前述のAPIキーを、.pahooEnv ファイルの PAHOO_GOOGLE_API_KEY_2 に代入するか、本プログラムの $GOOGLE_API_KEYに代入する。
なお、Google Cloud Translation API を利用しないのであれば、代入する必要はない。

仕様:Google Cloud Translation API v2

Google Cloud Translation API は、入力パラメータとしてPOSTを、出力結果がJSON形式で戻るというAPIである。
WebAPIのURL
URL
https://translation.googleapis.com/language/translate/v2

入力パラメータ
フィールド名 要否 内  容
q 必須 翻訳したいテキスト(UTF-8)
target 必須 ターゲット(翻訳先)言語(ISO-639コード)
key 必須 APIキー
format 任意 html | text(デフォルト)
source 任意 翻訳したいテキストの言語(ISO-639コード)
model 任意 翻訳モデル。nmt固定
応答データ構造(json) data translations _0 translatedText 翻訳テキスト detectedSourceLanguage 入力テキストの言語

解説:Google Cloud Translation API v2

translate.php

 254: /**
 255:  * Google Cloud Translate APIを使って翻訳を行う.
 256:  * @param   string $text            翻訳したいテキスト
 257:  * @param   string $targetLanguage  翻訳先言語(省略時:ja)
 258:  * @return  string 翻訳テキスト/FALSE:失敗
 259: */
 260: function googleCloudTranslate($text, $targetLanguage='ja') {
 261:     $this->webapi = 'https://translation.googleapis.com/language/translate/v2';
 262:     $data = array(
 263:         'q'         => $text,
 264:         'target'    => $targetLanguage,
 265:         'key'       => $this->GOOGLE_API_KEY,
 266:     );
 267: 
 268:     //Google Cloud Translate APIを呼び出す.
 269:     $ch = curl_init();
 270:     curl_setopt($ch, CURLOPT_URL, $this->webapi);
 271:     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
 272:     curl_setopt($ch, CURLOPT_POST, TRUE);
 273:     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 274: 
 275:     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 276:     curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
 277:     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 278:     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 279: 
 280:     $response = curl_exec($ch);
 281:     curl_close($ch);
 282: 
 283:     //APIエラー
 284:     if ($response == FALSE) {
 285:         $this->errmsg = 'Google Cloud Translate APIにアクセスできません';
 286:         $ret = FALSE;
 287:     } else {
 288:         $arr = json_decode($response, TRUE);
 289:         if ($arr == FALSE) {
 290:             $this->errmsg = 'Google Cloud Translate APIの応答が不正です';
 291:             $ret = FALSE;
 292:         //翻訳成功
 293:         } else if (isset($arr['data']['translations'][0]['translatedText'])) {
 294:             $ret = (string)$arr['data']['translations'][0]['translatedText'];
 295:         } else {
 296:             $this->errmsg = 'Google Cloud Translate APIの応答が不正です';
 297:             $ret = FALSE;
 298:         }
 299:     }
 300: 
 301:     return $ret;
 302: }

メソッド googleCloudTranslate は、Google Cloud Translation APIに翻訳したいテキストと翻訳したい言語を渡し、翻訳結果のテキストを求める。
API呼び出しには cURL関数を用いた。

準備:DeepL API

DeepL APIを利用するには、まず、DeepL APIに登録する必要がある。無料プランが用意されている。
DeepL API登録
「無料で体験する」をクリックし、DeepL Freeに無料で登録する。
DeepL API登録
メールアドレスと3Dセキュア(本人認証機能)に対応しているクレジットカード情報等を入力すると、アカウント登録が完了する。
DeepL API登録
「アカウント管理」をクリックすると、画面下の方に「DeepL APIで使用する認証キー」が表示される。あとでAPIキーを使うので控えておいてほしい。

translate.php

 137:     // DeepL APIキー
 138:     // https://www.deepl.com/ja/docs-api から無料申込み.
 139:     // 利用しないのなら未定義のままでよい.
 140:     public $DEEPL_API_KEY = '';

前述のAPIキーを、.pahooEnv ファイルの PAHOO_DEEPL_API_KEY に代入するか、本プログラムの $DEEPL_API_KEYに代入する。
なお、DeepL API を利用しないのであれば、代入する必要はない。

仕様:DeepL API v2

DeepL API v2 は、入力パラメータとしてPOSTを、出力結果がJSON形式で戻るというAPIである。
WebAPIのURL
URL
https://api-free.deepl.com/v2/translate

入力パラメータ
フィールド名 要否 内  容
text 必須 翻訳したいテキスト(UTF-8)
target_lang 必須 ターゲット(翻訳先)言語(英大文字)
auth_key 必須 APIキー
応答データ構造(json) translations _0 text 翻訳テキスト detected_source_language 入力テキストの言語

解説:DeepL API v2

translate.php

 304: /**
 305:  * DeepL APIを使って翻訳を行う.
 306:  * @param   string $text            翻訳したいテキスト
 307:  * @param   string $targetLanguage  翻訳先言語(省略時:ja)
 308:  * @return  string 翻訳テキスト/FALSE:失敗
 309: */
 310: function deepLTranslate($text, $targetLanguage='ja') {
 311:     $this->webapi = 'https://api-free.deepl.com/v2/translate';
 312:     $data = array(
 313:         'text'          => $text,
 314:         'target_lang'   => strtoupper($targetLanguage),
 315:         'auth_key'      => $this->PAHOO_DEEPL_API_KEY,
 316:     );
 317: 
 318:     // Google Cloud Translate APIを呼び出す.
 319:     $ch = curl_init();
 320:     curl_setopt($ch, CURLOPT_URL, $this->webapi);
 321:     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
 322:     curl_setopt($ch, CURLOPT_POST, TRUE);
 323:     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
 324: 
 325:     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 326:     curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
 327:     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 328:     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 329: 
 330:     $response = curl_exec($ch);
 331:     curl_close($ch);
 332: 
 333:     // APIエラー
 334:     if ($response == FALSE) {
 335:         $this->errmsg = 'DeepL APIにアクセスできません';
 336:         $ret = FALSE;
 337:     } else {
 338:         $arr = json_decode($response, TRUE);
 339:         if ($arr == FALSE) {
 340:             $this->errmsg = 'DeepL APIの応答が不正です';
 341:             $ret = FALSE;
 342:         // 翻訳成功
 343:         } else if (isset($arr['translations'][0]['text'])) {
 344:             $ret = (string)$arr['translations'][0]['text'];
 345:         } else {
 346:             $this->errmsg = 'DeepL APIの応答が不正です';
 347:             $ret = FALSE;
 348:         }
 349:     }
 350: 
 351:     return $ret;
 352: }

メソッド deepLTranslate は、DeepL APIに翻訳したいテキストと翻訳したい言語を渡し、翻訳結果のテキストを求める。
API呼び出しには cURL関数を用いた。

参考サイト

(この項おわり)
header