目次
サンプル・プログラムの実行例
サンプル・プログラム
| translate.php | サンプル・プログラム本体 |
| .pahooEnv | クラウドサービスを利用するためのアカウント情報などを記入する .env ファイル。 使い方は「各種クラウド連携サービス(WebAPI)の登録方法」を参照。include_path が通ったディレクトリに配置すること。 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 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に対応 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 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対応
Windowsでは、"php.ini" の下記の行を有効化する。
extension=php_openssl.dllLinuxでは --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"Linuxでは、通常はOSのCA証明書が使われるので、この設定は要らない。
openssl.cafile = "C:\php\extras\ssl\cacert.pem"
これで準備は完了だ。
準備:pahooInputData 関数群
また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .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: );
複数のクラウド翻訳サービスを使い分けることができるが、もし利用しないのであれば、配列 $apiTable で使わないサービスの行をコメントアウトすればよい。
準備:Google Cloud Translation API
このAPIは、1ヶ月当たり最初の50万文字までは無料だが、それ以上は有料になる。
translate.php
なお、Google Cloud Translation API を利用しないのであれば、代入する必要はない。
仕様:Google Cloud Translation API v2
| URL |
|---|
| https://translation.googleapis.com/language/translate/v2 |
| フィールド名 | 要否 | 内 容 |
|---|---|---|
| q | 必須 | 翻訳したいテキスト(UTF-8) |
| target | 必須 | ターゲット(翻訳先)言語(ISO-639コード) |
| key | 必須 | APIキー |
| format | 任意 | html | text(デフォルト) |
| source | 任意 | 翻訳したいテキストの言語(ISO-639コード) |
| model | 任意 | 翻訳モデル。nmt固定 |
解説: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: }
API呼び出しには cURL関数を用いた。
準備:DeepL API
translate.php
なお、DeepL API を利用しないのであれば、代入する必要はない。
仕様:DeepL API v2
| URL |
|---|
| https://api-free.deepl.com/v2/translate |
| フィールド名 | 要否 | 内 容 |
|---|---|---|
| text | 必須 | 翻訳したいテキスト(UTF-8) |
| target_lang | 必須 | ターゲット(翻訳先)言語(英大文字) |
| auth_key | 必須 | APIキー |
解説: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: }

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