stichoza/google-translate-php
Composer 安装命令:
composer require stichoza/google-translate-php
包简介
Free Google Translate API PHP Package
README 文档
README
Free Google Translate API PHP Package. Translates totally free of charge.
Installation
Install this package via Composer.
composer require stichoza/google-translate-php
Note
PHP 8.0 or later is required. Use following versions of this package for older PHP versions:
| Package version | PHP Version | Documentation |
|---|---|---|
^5.1 |
PHP >= 8.0 | v5 Docs |
^4.1 |
PHP >= 7.1 | v4 Docs |
^3.2 |
PHP < 7.1 | v3 Docs |
Basic Usage
Create GoogleTranslate object
use Stichoza\GoogleTranslate\GoogleTranslate; $tr = new GoogleTranslate('en'); // Translates into English
Or you can change languages later
$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
Translate sentences
echo $tr->translate('Hello World!');
Also, you can also use method chaining
echo $tr->setSource('en')->setTarget('ka')->translate('Goodbye');
Or call a shorthand static method trans
echo GoogleTranslate::trans('Hello again', 'ka', 'en');
Advanced Usage
Language Detection
To detect language automatically, just set the source language to null:
$tr = new GoogleTranslate('es', null); // Or simply do not pass the second parameter
$tr->setSource(); // Another way
Use getLastDetectedSource() to get detected language:
$tr = new GoogleTranslate('fr'); $text = $tr->translate('Hello World!'); echo $tr->getLastDetectedSource(); // Output: en
Return value will be null if the language couldn't be detected.
Supported Languages
You can get a list of all the supported languages using the languages method.
$tr = new GoogleTranslate(); $languages = $tr->languages(); // Get supported languages in iso-639 format // Output: [ 'ab', 'ace', 'ach', 'aa', 'af', 'sq', 'alz', ... ]
Optionally, pass a target language code to retrieve supported languages with names displayed in that language.
$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'
Same as with the translate/trans methods, you can also use a static langs method:
GoogleTranslate::langs(); // Output: [ 'ab', 'ace', 'ach', 'aa', 'af', 'sq', 'alz', ... ] GoogleTranslate::langs('en'); // Output: [ 'en' => English', 'es' => 'Spanish', 'it' => 'Italian', ... ]
Supported languages are also listed in Google API docs.
Preserving Parameters
The preserveParameters() method allows you to preserve certain parameters in strings while performing translations. This is particularly useful when dealing with localization files or templating engines where specific placeholders need to be excluded from translation.
Default regex is /:(\w+)/ which covers parameters starting with :. Useful for translating language files of Laravel and other frameworks. You can also pass your custom regex to modify the parameter syntax.
$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
Or use custom regex:
$text = $tr->preserveParameters('/\{\{([^}]+)\}\}/') ->translate('Page {{current}} of {{total}}'); // Seite {{current}} von {{total}}
You can use same feature with static trans() method too.
GoogleTranslate::trans('Welcome :name', 'fr', preserveParameters: true); // Default regex GoogleTranslate::trans('Welcome {{name}}', 'fr', preserveParameters: '/\{\{([^}]+)\}\}/'); // Custom regex
Using Raw Response
For advanced usage, you might need the raw results that Google Translate provides. you can use getResponse method for that.
$responseArray = $tr->getResponse('Hello world!');
Custom URL
You can override the default Google Translate url by setUrl method. Useful for some countries
$tr->setUrl('http://translate.google.cn/translate_a/single');
HTTP Client Configuration
This package uses Guzzle for HTTP requests. You can pass an array of guzzle client configuration options as a third parameter to GoogleTranslate constructor, or just use setOptions method.
You can configure proxy, user-agent, default headers, connection timeout and so on using this options.
$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');
For more information, see Creating a Client section in Guzzle docs.
Custom Token Generator
You can override the token generator class by passing a generator object as a fourth parameter of constructor or just use setTokenProvider method.
Generator must implement 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 } }
And use:
$tr->setTokenProvider(new MyTokenGenerator);
Translation Client (Quality)
Google Translate has a parameter named client which defines quality of translation. First it was set to webapp but later google added gtx value which results in a better translation quality in terms of grammar and overall meaning of sentences.
You can use ->setClient() method to switch between clients. For example if you want to use older version of translation algorithm, type $tr->setClient('webapp')->translate('lorem ipsum...'). Default value is gtx.
Errors and Exception Handling
Static method trans() and non-static translate() and getResponse() methods will throw following exceptions:
ErrorExceptionIf the HTTP request fails for some reason.UnexpectedValueExceptionIf data received from Google cannot be decoded.
As of v5.1.0 concrete exceptions are available in \Stichoza\GoogleTranslate\Exceptions namespace:
LargeTextExceptionIf the requested text is too large to translate.RateLimitExceptionIf Google has blocked you for excessive amount requests.TranslationRequestExceptionIf any other HTTP related error occurs during translation.TranslationDecodingExceptionIf the response JSON cannot be decoded.
All concrete exceptions are backwards compatible, so if you were using older versions, you won't have to update your code.
TranslationDecodingException extends UnexpectedValueException, while LargeTextException, RateLimitException and TranslationRequestException extend ErrorException that was used in older versions (<5.1.0) of this package.
In addition, translate() and trans() methods will return null if there is no translation available.
Known Limitations
503 Service Unavailableresponse: If you are getting this error, it is most likely that Google has banned your external IP address and/or requires you to solve a CAPTCHA. This is not a bug in this package. Google has become stricter, and it seems like they keep lowering the number of allowed requests per IP per a certain amount of time. Try sending less requests to stay under the radar, or change your IP frequently (for example using proxies). Please note that once an IP is banned, even if it's only temporary, the ban can last from a few minutes to more than 12-24 hours, as each case is different.429 Too Many Requestsresponse: This error is basically the same as explained above.413 Request Entity Too Largeresponse: This error means that your input string is too long. Google only allows a maximum of 5000 characters to be translated at once. If you want to translate a longer text, you can split it to shorter parts, and translate them one-by-one.403 Forbiddenresponse: This is not an issue with this package. Google Translate itself has some problems when it comes to translating some characters and HTML entities. See #119 (comment)
Disclaimer
This package is developed for educational purposes only. Do not depend on this package as it may break anytime as it is based on crawling the Google Translate website. Consider buying Official Google Translate API for other types of usage.
Donation
If this package helped you reduce your time to develop something, or it solved any major problems you had, feel free to give me a cup of coffee :)
stichoza/google-translate-php 适用场景与选型建议
stichoza/google-translate-php 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 8.13M 次下载、GitHub Stars 达 1.94k, 最近一次更新时间为 2014 年 10 月 16 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「google」 「translator」 「translate」 「translating」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 stichoza/google-translate-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 stichoza/google-translate-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 stichoza/google-translate-php 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Magento 2 Social Login extension is designed for quick login to your Magento 2 store without procesing complex register steps
Client for Google Directions API to add interpolated points to a route consisting of given coordinates.
Olympus Hermes is a bundle used to translate all messages from your WordPress packages and Olympus bundles.
Alfabank REST API integration
This is a simple light weight language parser to help with language key translation built for speed using in-memory caching optimization technique.
Simple and fast translator and tools to internationalize your PHP application.
统计信息
- 总下载量: 8.13M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1957
- 点击次数: 29
- 依赖项目数: 151
- 推荐数: 4
其他信息
- 授权协议: MIT
- 更新时间: 2014-10-16