penobit / google-translate-php
免费 Google Translate API PHP 包
Requires
- php: ^7.1|^8
- ext-json: *
- ext-mbstring: *
- guzzlehttp/guzzle: ~6.0|~7.0
Requires (Dev)
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-09-21 18:44:39 UTC
README
免费 Google Translate API PHP 包。完全免费翻译。
安装
通过 Composer 安装此包。
composer require penobit/google-translate-php
注意:需要 PHP 7.1 或更高版本。
基本用法
创建 GoogleTranslate 对象
use Penobit\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
方法来覆盖令牌生成器类。
生成器必须实现 Penobit\GoogleTranslate\Tokens\TokenProviderInterface
。
use Penobit\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 服务不可用
响应:如果您遇到此错误,最有可能的原因是 Google 禁止了您的外部 IP 地址,或要求您解决 CAPTCHA。这不是此包中的错误。Google 变得更加严格,并且似乎他们不断降低每个 IP 在一定时间内的请求次数。尝试减少请求量以保持低于雷达,或者频繁更改 IP(例如使用代理)。请注意,一旦 IP 被禁止,即使只是临时性的,禁止可能持续几分钟到超过 12-24 小时,具体取决于每种情况。429 请求过多
响应:此错误基本上与上述解释相同。413 请求实体过大
响应:这个错误意味着您的输入字符串过长。Google 只允许一次翻译最多 5000 个字符。如果您想翻译更长的文本,可以将文本分割成更短的段落,然后逐个翻译。403 禁止访问
响应:这不是本包的问题。当涉及到翻译某些字符和 HTML 实体时,Google 翻译本身存在一些问题。
免责声明
本包仅用于教育目的开发。不要依赖此包,因为它可能随时会崩溃,因为它基于爬取 Google 翻译网站。考虑购买官方 Google 翻译 API以进行其他类型的用途。