benomas/crudvel-translate

免费的Google Translate API PHP包,stichoza/google-translate-php的分支

v4.1.0 2020-02-11 01:34 UTC

README

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

免费的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用于其他类型的用途。

捐赠

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