無料の Google 翻訳 API PHP パッケージ。完全無料で翻訳します。
このパッケージは Composer 経由でインストールします。
composer require stichoza/google-translate-php
注: PHP 8.0 以降が必要です。古い PHP バージョンの場合は、このパッケージの次のバージョンを使用してください。
パッケージバージョン | PHPのバージョン | ドキュメント |
---|---|---|
^5.1 | PHP >= 8.0 | v5 ドキュメント |
^4.1 | PHP >= 7.1 | v4 ドキュメント |
^3.2 | PHP < 7.1 | v3 ドキュメント |
GoogleTranslate オブジェクトを作成する
use Stichoza GoogleTranslate GoogleTranslate ;
$ tr = new GoogleTranslate ( ' en ' ); // Translates into English
または、後で言語を変更することもできます
$ tr = new GoogleTranslate (); // Translates to ' en ' from auto - detected language by default
$ tr -> setSource ( ' en ' ); // Translate from English
$ tr -> setSource (); // Detect language automatically
$ tr -> setTarget ( ' ka ' ); // Translate to Georgian
文章を翻訳する
echo $ tr -> translate ( ' Hello World! ' );
また、メソッドチェーンを使用することもできます
echo $ tr -> setSource ( ' en ' )-> setTarget ( ' ka ' )-> translate ( ' Goodbye ' );
または、短縮形の静的メソッドtrans
呼び出します。
echo GoogleTranslate:: trans ( ' Hello again ' , ' ka ' , ' en ' );
言語を自動的に検出するには、ソース言語をnull
に設定するだけです。
$ tr = new GoogleTranslate ( ' es ' , null ); // Or simply do not pass the second parameter
$ tr -> setSource (); // Another way
getLastDetectedSource()
を使用して、検出された言語を取得します。
$ tr = new GoogleTranslate ( ' fr ' );
$ text = $ tr -> translate ( ' Hello World! ' );
echo $ tr -> getLastDetectedSource (); // Output : en
言語が検出できなかった場合、戻り値はnull
になります。
languages
メソッドを使用すると、サポートされているすべての言語のリストを取得できます。
$ tr = new GoogleTranslate ();
$ languages = $ tr -> languages (); // Get supported languages in iso - 639 format
// Output : [ 'ab' , 'ace' , 'ach' , 'aa' , 'af' , 'sq' , 'alz' , ... ]
必要に応じて、ターゲット言語コードを渡して、その言語で表示される名前を持つサポートされている言語を取得します。
$ tr = new GoogleTranslate ();
$ languages = $ tr -> languages ( ' en ' ); // Get supported languages , display name in english
// Output : [ 'en' => English' , ' es ' => ' Spanish ' , ' it' => 'Italian' , ... ]
echo $ languages [ ' en ' ]; // Output : ' English '
echo $ languages [ ' ka ' ]; // Output : ' Georgian '
translate
/ trans
メソッドと同様に、静的langs
メソッドも使用できます。
GoogleTranslate:: langs ();
// Output : [ 'ab' , 'ace' , 'ach' , 'aa' , 'af' , 'sq' , 'alz' , ... ]
GoogleTranslate:: langs ( ' en ' );
// Output : [ 'en' => English' , ' es ' => ' Spanish ' , ' it' => 'Italian' , ... ]
サポートされている言語は、Google API ドキュメントにもリストされています。
preserveParameters()
メソッドを使用すると、翻訳の実行中に文字列内の特定のパラメータを保存できます。これは、特定のプレースホルダーを翻訳から除外する必要があるローカリゼーション ファイルまたはテンプレート エンジンを扱う場合に特に便利です。
デフォルトの正規表現は/:(w+)/
で、 :
で始まるパラメータをカバーします。 Laravel やその他のフレームワークの言語ファイルを翻訳するのに役立ちます。カスタム正規表現を渡してパラメータ構文を変更することもできます。
$ tr = new GoogleTranslate ( ' de ' );
$ text = $ tr -> translate ( ' Page :current of :total ' ); // Seite : aktuell von : gesamt
$ text = $ tr -> preserveParameters ()
-> translate ( ' Page :current of :total ' ); // Seite : current von : total
または、カスタム正規表現を使用します。
$ text = $ tr -> preserveParameters ( ' /{{([^}]+)}}/ ' )
-> translate ( ' Page {{current}} of {{total}} ' ); // Seite { { current } } von { { total } }
同じ機能を静的なtrans()
メソッドでも使用できます。
GoogleTranslate:: trans ( ' Welcome :name ' , ' fr ' , preserveParameters: true ); // Default regex
GoogleTranslate:: trans ( ' Welcome {{name}} ' , ' fr ' , preserveParameters: ' /{{([^}]+)}}/ ' ); // Custom regex
高度な使用方法では、Google 翻訳が提供する生の結果が必要になる場合があります。それにはgetResponse
メソッドを使用できます。
$ responseArray = $ tr -> getResponse ( ' Hello world! ' );
setUrl
メソッドを使用して、デフォルトの Google 翻訳 URL をオーバーライドできます。一部の国では便利
$ tr -> setUrl ( ' http://translate.google.cn/translate_a/single ' );
このパッケージは HTTP リクエストに Guzzle を使用します。 Guzzle クライアント構成オプションの配列を 3 番目のパラメーターとしてGoogleTranslate
コンストラクターに渡すか、単にsetOptions
メソッドを使用することができます。
このオプションを使用して、プロキシ、ユーザー エージェント、デフォルト ヘッダー、接続タイムアウトなどを構成できます。
$ tr = new GoogleTranslate ( ' en ' , ' ka ' , [
' timeout ' => 10 ,
' proxy ' => [
' http ' => ' tcp://localhost:8125 ' ,
' https ' => ' tcp://localhost:9124 '
],
' headers ' => [
' User-Agent ' => ' Foo/5.0 Lorem Ipsum Browser '
]
]);
// Set proxy to tcp : // localhost : 8090
$ tr -> setOptions ([ ' proxy ' => ' tcp://localhost:8090 ' ])-> translate ( ' Hello ' );
// Set proxy to socks5 : // localhost : 1080
$ tr -> setOptions ([ ' proxy ' => ' socks5://localhost:1080 ' ])-> translate ( ' World ' );
詳細については、Guzzle ドキュメントの「クライアントの作成」セクションを参照してください。
コンストラクターの 4 番目のパラメーターとしてジェネレーター オブジェクトを渡すか、単にsetTokenProvider
メソッドを使用することによって、トークン ジェネレーター クラスをオーバーライドできます。
ジェネレーターはStichozaGoogleTranslateTokensTokenProviderInterface
を実装する必要があります。
use Stichoza GoogleTranslate Tokens TokenProviderInterface ;
class MyTokenGenerator implements TokenProviderInterface
{
public function generateToken ( string $ source , string $ target , string $ text ): string
{
// Your code here
}
}
そして使用します:
$ tr -> setTokenProvider ( new MyTokenGenerator );
Google 翻訳には、翻訳の品質を定義するclient
というパラメータがあります。最初はwebapp
に設定されていましたが、後に Google がgtx
値を追加したため、文法と文の全体的な意味の点で翻訳品質が向上しました。
->setClient()
メソッドを使用してクライアントを切り替えることができます。たとえば、古いバージョンの変換アルゴリズムを使用する場合は、 $tr->setClient('webapp')->translate('lorem ipsum...')
と入力します。デフォルト値はgtx
です。
静的メソッドのtrans()
と非静的translate()
およびgetResponse()
メソッドは、次の例外をスローします。
ErrorException
何らかの理由で HTTP リクエストが失敗した場合。UnexpectedValueException
Google から受信したデータをデコードできない場合。 v5.1.0以降、具体的な例外はStichozaGoogleTranslateExceptions
名前空間で利用できます。
LargeTextException
要求されたテキストが大きすぎて翻訳できない場合。RateLimitException
Google が過剰な量のリクエストをブロックした場合。TranslationRequestException
翻訳中にその他の HTTP 関連エラーが発生した場合。TranslationDecodingException
応答の JSON をデコードできない場合。すべての具体的な例外には下位互換性があるため、古いバージョンを使用していた場合はコードを更新する必要はありません。
TranslationDecodingException
UnexpectedValueException
を拡張し、 LargeTextException
、 RateLimitException
、およびTranslationRequestException
このパッケージの古いバージョン ( <5.1.0
) で使用されていたErrorException
を拡張します。
さらに、利用可能な翻訳がない場合、 translate()
とtrans()
メソッドはnull
を返します。
503 Service Unavailable
応答: このエラーが発生した場合は、Google が外部 IP アドレスを禁止しているか、CAPTCHA を解決するよう要求している可能性があります。これはこのパッケージのバグではありません。 Googleはさらに厳しくなり、IPごとに一定時間あたりに許可されるリクエストの数を減らし続けているようです。目立たないようにするために送信するリクエストを減らすか、IP を頻繁に変更してください (プロキシを使用するなど)。 IP が禁止されると、一時的であっても、ケースごとに異なるため、禁止は数分から 12 ~ 24 時間以上続く場合があることに注意してください。429 Too Many Requests
応答: このエラーは基本的に上記で説明したものと同じです。413 Request Entity Too Large
応答: このエラーは、入力文字列が長すぎることを意味します。 Google では、一度に最大 5,000 文字までの翻訳を許可しています。長いテキストを翻訳したい場合は、短い部分に分割して 1 つずつ翻訳することができます。403 Forbidden
応答: これはこのパッケージの問題ではありません。 Google 翻訳自体には、一部の文字や HTML エンティティを翻訳する際にいくつかの問題があります。 #119 (コメント) を参照してください。 このパッケージは教育目的のみに開発されています。このパッケージは Google 翻訳 Web サイトのクロールに基づいているため、いつでも壊れる可能性があるため、依存しないでください。他の種類の使用のために公式 Google Translate API の購入を検討してください。
このパッケージが何かの開発時間を短縮するのに役立った場合、または抱えていた大きな問題を解決した場合は、遠慮なくコーヒーを一杯ください :)