stichoza / google-translate-php
免费 Google Translate API PHP 包
Requires
- php: ^8.0
- ext-dom: *
- ext-json: *
- ext-mbstring: *
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- phpunit/phpunit: ^9.5.10
- dev-master
- v5.2.0
- v5.1.4
- v5.1.3
- v5.1.2
- v5.1.1
- v5.1.0
- v5.0.2
- v5.0.1
- v5.0.0
- 4.1.x-dev
- v4.1.7
- v4.1.6
- v4.1.5
- v4.1.4
- v4.1.3
- v4.1.2
- v4.1.1
- v4.1.0
- v4.0.2
- v4.0.1
- v4.0.0
- 3.2.x-dev
- v3.2.15
- v3.2.14
- v3.2.13
- v3.2.12
- v3.2.11
- v3.2.10
- v3.2.9
- v3.2.8
- v3.2.7
- v3.2.6
- v3.2.5
- v3.2.4
- v3.2.3
- v3.2.2
- v3.2.1
- v3.2.0
- v3.1.2
- v3.1.1
- v3.1.0
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v2.0.3
- v2.0.0
- dev-develop
This package is auto-updated.
Last update: 2024-09-05 19:46:42 UTC
README
免费 Google Translate API PHP 包。完全免费翻译。
安装
通过 Composer 安装此包。
composer require stichoza/google-translate-php
注意 PHP 8.0 或更高版本 需要。为旧版本 PHP 使用以下版本的此包
基本用法
创建 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 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 文档中的 创建客户端 部分。
自定义令牌生成器
您可以通过将生成器对象作为构造函数的第四个参数传递或使用 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);
翻译客户端(质量)
Google Translate 有一个名为 client 的参数,用于定义翻译质量。最初它被设置为 webapp,但后来 Google 添加了 gtx 值,这使得翻译在语法和句子整体意义上有了更好的质量。
您可以使用 ->setClient() 方法在客户端之间切换。例如,如果您想使用旧版本的翻译算法,请输入 $tr->setClient('webapp')->translate('lorem ipsum...')。默认值为 gtx。
错误和异常处理
静态方法 trans() 和非静态方法 translate() 和 getResponse() 将抛出以下异常
ErrorException如果由于某种原因 HTTP 请求失败。UnexpectedValueException如果从 Google 收到的数据无法解码。
截至 v5.1.0 版本,具体的异常在 \Stichoza\GoogleTranslate\Exceptions 命名空间中可用
LargeTextException如果请求的文本太大而无法翻译。RateLimitException如果 Google 因请求过多而阻止了您。TranslationRequestException如果在翻译过程中发生任何其他与 HTTP 相关的错误。TranslationDecodingException如果响应的 JSON 无法解码。
所有具体的异常都是向后兼容的,所以如果您使用的是旧版本,您不需要更新您的代码。
TranslationDecodingException 继承自 UnexpectedValueException,而 LargeTextException、RateLimitException 和 TranslationRequestException 继承自旧版本(<5.1.0)中使用的 ErrorException。
此外,如果不存在翻译,则 translate() 和 trans() 方法将返回 null。
已知限制
503 服务不可用响应:如果您收到此错误,很可能是 Google 禁用了您的外部 IP 地址和/或 要求您解决 CAPTCHA。这不是本包的 bug。Google 变得更加严格,似乎他们不断地降低每个 IP 每一定时间内允许的请求数量。尝试减少请求以保持不被发现,或者频繁更改您的 IP(例如使用代理(例如使用代理))。请注意,一旦 IP 被禁用,即使只是临时性的,禁用可能持续几分钟到超过 12-24 小时,具体情况不同。429 Too Many Requests响应:此错误基本上与上述解释相同。413 Request Entity Too Large响应:此错误意味着您的输入字符串太长。Google 只允许一次翻译最多 5000 个字符。如果您想翻译更长的文本,可以将它分成较短的段落,并逐个翻译它们。403 Forbidden响应:这不是本包的问题。Google 翻译本身在翻译某些字符和 HTML 实体时存在一些问题。请参阅 #119(评论)
免责声明
本包仅用于教育目的开发。不要将此包作为依赖项,因为它可能随时中断,因为它基于爬取 Google 翻译网站。考虑购买 官方 Google 翻译 API 用于其他类型的使用。
捐赠
如果您使用此包减少了开发时间或解决了您遇到的任何主要问题,请随意给我一杯咖啡:)