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

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

(2026年10月10日)DeepL API認証方式変更対応, PHP 8.5対応

目次

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

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

サンプル・プログラム

圧縮ファイルの内容
translate.phpサンプル・プログラム本体
.pahooEnvクラウドサービスを利用するためのアカウント情報などを記入する .env ファイル。
使い方は「各種クラウド連携サービス(WebAPI)の登録方法」を参照。include_path が通ったディレクトリに配置すること。
pahooInputData.phpデータ入力に関わる関数群。
使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
translate.php 更新履歴
バージョン 更新日 内容
2.2.0 2026/10/10 DeepL API認証方式変更対応, PHP 8.5対応
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.3 2026/09/26 validEmail(), validNumber(), getValidNumber(), roundFloat(), pahooLoadEnv() bug-fix
2.0.2 2026/09/26 pahooLoadEnv() -- str_starts_with()を使わないようにした(PHP7対応)
2.0.1 2025/08/11 getParam() bug-fix
2.0.0 2025/08/11 pahooLoadEnv() 追加
1.9.0 2025/07/26 getParam() 引数に$trim追加

準備:PHP の https対応

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

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

また、クラウド連携や相手先サイトとの https通信では、なりすましを防ぐため、相手サーバのSSL/TLS証明書を検証している。
Windows版のPHPには、証明書の検証に使うCA証明書(ルート証明書の一覧)が同梱されていないため、そのままでは https によるデータ取得に失敗する。CA証明書ファイル(cacert.pem)を入手し、"php.ini" に次の2行を追加してから、PHP(Webサーバ)を再起動してほしい。パスは cacert.pem を置いた場所に合わせること。
curl.cainfo = "C:\php\extras\ssl\cacert.pem"
openssl.cafile = "C:\php\extras\ssl\cacert.pem"
Linuxでは、通常はOSのCA証明書が使われるので、この設定は要らない。

これで準備は完了だ。

準備:pahooInputData 関数群

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

また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .pahooEnv ファイルから読み込む関数 pahooLoadEnv を備えている。こちらについては、「各種クラウド連携サービス(WebAPI)の登録方法」をご覧いただきたい。
.pahooEnv には「名前=値」を1行に1つずつ書く。値は "..." や '...' で囲んでもよい(囲んだ引用符は取り除かれる)。# ではじまる行はコメントで、空行や「=」のない行は読み飛ばす。

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

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

前述の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->PAHOO_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:     // PHP8.5:非推奨関数
 282:     if (PHP_VERSION_ID < 80500) {
 283:         curl_close($ch);
 284:     }
 285: 
 286:     // APIエラー
 287:     if ($response == FALSE) {
 288:         $this->errmsg = 'Google Cloud Translate APIにアクセスできません';
 289:         $ret = FALSE;
 290:     } else {
 291:         $arr = json_decode($response, TRUE);
 292:         if ($arr == FALSE) {
 293:             $this->errmsg = 'Google Cloud Translate APIの応答が不正です';
 294:             $ret = FALSE;
 295:         //翻訳成功
 296:         } else if (isset($arr['data']['translations'][0]['translatedText'])) {
 297:             $ret = (string)$arr['data']['translations'][0]['translatedText'];
 298:         } else {
 299:             $this->errmsg = 'Google Cloud Translate APIの応答が不正です';
 300:             $ret = FALSE;
 301:         }
 302:     }
 303: 
 304:     return $ret;
 305: }

メソッド 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

前述の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

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

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

参考サイト

(この項おわり)
header