benomas/ crudvel-translate
免费的Google Translate API PHP包,stichoza/google-translate-php的分支
Requires
- php: ^7.1
- ext-json: *
- ext-mbstring: *
- guzzlehttp/guzzle: ~6.0
Requires (Dev)
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-09-23 12:33:50 UTC
README
免费的Google Translate API PHP包。完全免费翻译。
安装
通过Composer安装此包。
composer require stichoza/google-translate-php
注意:需要PHP 7.1或更高版本。对于旧版本,使用此包的
^3.2版本(请参阅旧文档)。
基本用法
创建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。
支持的语言列表在Google API文档中列出。
使用原始响应
对于高级用法,您可能需要Google Translate提供的原始结果。您可以使用getResponse方法。
$responseArray = $tr->getResponse('Hello world!');
自定义URL
您可以通过setUrl方法覆盖默认的Google Translate URL。这对于一些国家很有用。
$tr->setUrl('http://translate.google.cn/translate_a/single');
HTTP客户端配置
此包使用Guzzle进行HTTP请求。您可以将guzzle客户端配置选项的数组作为GoogleTranslate构造函数的第三个参数传递,或者只需使用setOptions方法。
您可以使用这些选项配置代理、用户代理、默认标头、连接超时等。
$tr = new GoogleTranslate('en', 'ka', [ 'timeout' => 10, 'proxy' => [ 'http' => 'tcp://:8125', 'https' => 'tcp://:9124' ], 'headers' => [ 'User-Agent' => 'Foo/5.0 Lorem Ipsum Browser' ] ]);
// Set proxy to tcp://:8090 $tr->setOptions(['proxy' => 'tcp://:8090'])->translate('Hello'); // Set proxy to socks5://:1080 $tr->setOptions(['proxy' => 'socks5://:1080'])->translate('World');
有关更多信息,请参阅Guzzle文档中的创建客户端部分(6.x版本)。
自定义令牌生成器
您可以通过将生成器对象作为构造函数的第四个参数传递或使用setTokenProvider方法来覆盖令牌生成器类。
生成器必须实现Stichoza\GoogleTranslate\Tokens\TokenProviderInterface。
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);
错误和异常处理
静态方法trans()和非静态的translate()和getResponse()将抛出以下异常
ErrorException如果由于某些原因HTTP请求失败。UnexpectedValueException如果从Google接收的数据无法解码。
此外,如果不可用,则translate()和trans()方法将返回null。
已知限制
503 服务不可用响应:如果您遇到此错误,很可能是因为谷歌禁止了您的公网IP地址,或者需要您解决验证码问题。这并不是本包的bug。谷歌变得更加严格,并且似乎他们不断降低每个IP在一段时间内允许的请求数量。尝试减少请求以保持在雷达之下,或者频繁更改IP(例如使用代理。请注意,一旦某个IP被禁止,即使只是临时性的,禁止时间可能从几分钟到超过12-24小时,具体情况不同。429 请求过多响应:此错误基本上与上述解释相同。413 请求实体过大响应:此错误表示您的输入字符串过长。谷歌一次只允许翻译最多5000个字符。如果您想翻译较长的文本,可以将其分成较短的段落,并逐一翻译。403 禁止响应:这不是本包的问题。谷歌翻译本身在翻译某些字符和HTML实体时存在问题。请参阅Stichoza#119 (评论)
免责声明
本包仅用于教育目的开发。请不要依赖此包,因为它可能随时崩溃,因为它基于爬取谷歌翻译网站。考虑购买官方谷歌翻译API用于其他类型的用途。
捐赠
如果本包帮助您减少了开发时间,或者解决了您遇到的主要问题,请随意给我一杯咖啡:)