免费的 Google 翻译 API PHP 包。完全免费翻译。
通过 Composer 安装此软件包。
composer require stichoza/google-translate-php
注意需要PHP 8.0 或更高版本。对于较旧的 PHP 版本,请使用此软件包的以下版本:
套餐版本 | PHP版本 | 文档 |
---|---|---|
^5.1 | PHP >= 8.0 | v5 文档 |
^4.1 | PHP >= 7.1 | v4 文档 |
^3.2 | PHP < 7.1 | v3 文档 |
创建 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 翻译提供的原始结果。您可以使用getResponse
方法。
$ responseArray = $ tr -> getResponse ( ' Hello world! ' );
您可以通过setUrl
方法覆盖默认的 Google Translate url。对某些国家/地区有用
$ tr -> setUrl ( ' http://translate.google.cn/translate_a/single ' );
该包使用 Guzzle 进行 HTTP 请求。您可以将 guzzle 客户端配置选项数组作为第三个参数传递给GoogleTranslate
构造函数,或者仅使用setOptions
方法。
您可以使用此选项配置代理、用户代理、默认标头、连接超时等。
$ tr = new GoogleTranslate ( ' en ' , ' ka ' , [
' timeout ' => 10 ,
' proxy ' => [
' http ' => ' tcp://localhost:8125 ' ,
' https ' => ' tcp://localhost:9124 '
],
' headers ' => [
' User-Agent ' => ' Foo/5.0 Lorem Ipsum Browser '
]
]);
// Set proxy to tcp : // localhost : 8090
$ tr -> setOptions ([ ' proxy ' => ' tcp://localhost:8090 ' ])-> translate ( ' Hello ' );
// Set proxy to socks5 : // localhost : 1080
$ tr -> setOptions ([ ' proxy ' => ' socks5://localhost:1080 ' ])-> translate ( ' World ' );
有关更多信息,请参阅 Guzzle 文档中的创建客户端部分。
您可以通过将生成器对象作为构造函数的第四个参数传递或仅使用setTokenProvider
方法来重写令牌生成器类。
生成器必须实现StichozaGoogleTranslateTokensTokenProviderInterface
。
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 );
谷歌翻译有一个名为client
参数,它定义翻译质量。首先它被设置为webapp
但后来谷歌添加了gtx
值,这导致在语法和句子的整体含义方面有更好的翻译质量。
您可以使用->setClient()
方法在客户端之间切换。例如,如果您想使用旧版本的翻译算法,请输入$tr->setClient('webapp')->translate('lorem ipsum...')
。默认值为gtx
。
静态方法trans()
和非静态translate()
和getResponse()
方法将抛出以下异常:
ErrorException
如果 HTTP 请求由于某种原因失败。UnexpectedValueException
如果从 Google 收到的数据无法解码。从v5.1.0开始, StichozaGoogleTranslateExceptions
命名空间中提供了具体的异常:
LargeTextException
如果请求的文本太大而无法翻译。RateLimitException
如果 Google 因过多的请求而阻止您。TranslationRequestException
如果在翻译过程中发生任何其他 HTTP 相关错误。TranslationDecodingException
如果无法解码响应 JSON。所有具体异常都是向后兼容的,因此如果您使用旧版本,则无需更新代码。
TranslationDecodingException
扩展了UnexpectedValueException
,而LargeTextException
、 RateLimitException
和TranslationRequestException
扩展了此包的旧版本 ( <5.1.0
) 中使用的ErrorException
。
此外,如果没有可用的翻译, translate()
和trans()
方法将返回null
。
503 Service Unavailable
响应:如果您收到此错误,则很可能 Google 已禁止您的外部 IP 地址和/或要求您解决验证码。这不是这个包中的错误。谷歌变得更加严格,他们似乎不断降低每个IP在一定时间内允许的请求数量。尝试发送较少的请求以保持低调,或经常更改您的 IP(例如使用代理)。请注意,一旦 IP 被封禁,即使只是暂时的,封禁时间也可能会持续几分钟到 12-24 小时以上,具体情况各不相同。429 Too Many Requests
响应:这个错误与上面解释的基本相同。413 Request Entity Too Large
响应:此错误意味着您的输入字符串太长。 Google 只允许一次最多翻译 5000 个字符。如果您想翻译较长的文本,可以将其拆分为较短的部分,然后逐一翻译。403 Forbidden
响应:这不是此软件包的问题。 Google Translate 本身在翻译某些字符和 HTML 实体时存在一些问题。参见#119(评论) 该软件包仅出于教育目的而开发。不要依赖这个包,因为它基于抓取 Google 翻译网站,因此可能随时损坏。考虑购买官方 Google Translate API 用于其他类型的使用。
如果这个包帮助您减少了开发某些东西的时间,或者解决了您遇到的任何主要问题,请随时给我一杯咖啡:)