canadadry / google-translate-php
Free Google Translate API PHP Package
Installs: 505
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 389
pkg:composer/canadadry/google-translate-php
Requires
- php: ^7.1
- ext-json: *
- ext-mbstring: *
- guzzlehttp/guzzle: ~6.0
Requires (Dev)
- phpunit/phpunit: ^7.0
README
Free Google Translate API PHP Package. Translates totally free of charge.
This is a fork with PR 109 Applied. Waiting for the main repo to merge it.
Installation
Install this package via Composer.
composer require stichoza/google-translate-php
Note: PHP 7.1 or later is required. For older versoins, use
^3.2version of this package (see old 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 are listed in Google API docs.
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 (6.x version).
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);
Errors and Exception Handling
Static method trans() and non-static translate() and getResponse() will throw following Exceptions:
ErrorExceptionIf the HTTP request fails for some reason.UnexpectedValueExceptionIf data received from Google cannot be decoded.
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.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.
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 give me a cup of coffee :)