canadadry / google-translate-php

免费 Google Translate API PHP 包

4.0.2 2019-07-22 07:37 UTC

README

Build Status Latest Stable Version Total Downloads Downloads Month Petreon donation PayPal donation

免费 Google Translate API PHP 包。完全免费翻译。

这是一个应用了 PR 109 的分支。等待主仓库合并。

安装

通过 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地址和/或需要您解决CAPTCHA。这并不是本包的bug。谷歌变得更加严格,似乎他们不断降低每个IP在一定时间内的允许请求数量。尝试减少请求以保持不被察觉,或者频繁更改IP(例如使用代理请注意,一旦IP被禁止,即使只是临时性的,禁令也可能持续几分钟到超过12-24小时,因为每个案例都不同。
  • 413 请求实体过大响应
    此错误表示您的输入字符串过长。谷歌只允许一次翻译最多5000个字符。如果您想翻译更长的文本,可以将其拆分为较短的段落,并逐个翻译。

免责声明

本包仅用于教育目的开发。请不要依赖此包,因为它可能随时崩溃,因为它基于爬取谷歌翻译网站。考虑购买官方谷歌翻译API用于其他类型的用途。

捐赠

如果这个包帮助您减少了开发时间,或者解决了您遇到的主要问题,请随意给我一杯咖啡:)