- Saved searches
- Use saved searches to filter your results more quickly
- License
- Stichoza/google-translate-php
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- PHP транслит
- Транслит для текста
- Результат
- Транслит для ЧПУ
- Результат:
- Транслит для URL
- Результат:
- Транслит для имен файлов
- Результат:
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
🌐 Free Google Translate API PHP Package. Translates totally free of charge.
License
Stichoza/google-translate-php
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Free Google Translate API PHP Package. Translates totally free of charge.
- Installation
- Basic Usage
- Advanced Usage
- Language Detection
- Using Raw Response
- Custom URL
- HTTP Client Configuration
- Custom Token Generator
- Errors and Exception Handling
composer require stichoza/google-translate-php
Note: PHP 8.0 or later is required. Use following versions of this package for older PHP versions:
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
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');
To detect language automatically, just set the source language to null :
$tr = new GoogleTranslate('es', null); // Or simply do not pass the second parameter
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.
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!');
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.
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 > >
$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:
- ErrorException If the HTTP request fails for some reason.
- UnexpectedValueException If data received from Google cannot be decoded.
As of v5.1.0 concrete exceptions are available in \Stichoza\GoogleTranslate\Exceptions namespace:
- LargeTextException If the requested text is too large to translate.
- RateLimitException If Google has blocked you for excessive amount requests.
- TranslationRequestException If any other HTTP related error occurs during translation.
- TranslationDecodingException If 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 (
In addition, translate() and trans() methods will return null if there is no translation available.
- 503 Service Unavailable response: 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 Requests response: This error is basically the same as explained above.
- 413 Request Entity Too Large response: 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 Forbidden response: 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)
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.
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 🙂
About
🌐 Free Google Translate API PHP Package. Translates totally free of charge.
PHP транслит
PHP функции для перевода текста, ЧПУ, ссылок и имен файлов в транслит.
Транслит для текста
function translit($value) < $converter = array( 'а' =>'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '', 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', ); $value = strtr($value, $converter); return $value; > echo translit('Яндекс, Гугл, Майл ру');
Результат
Транслит для ЧПУ
Транслитерация для части URL (path), текст переводится в нижний регистр, пробелы и знаки препинания заменяются на « — ».
function translit_sef($value) < $converter = array( 'а' =>'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', ); $value = mb_strtolower($value); $value = strtr($value, $converter); $value = mb_ereg_replace('[^-0-9a-z]', '-', $value); $value = mb_ereg_replace('[-]+', '-', $value); $value = trim($value, '-'); return $value; > echo translit_sef('Яндекс, Гугл, Майл ру');
Результат:
Транслит для URL
В данную функцию можно передавать URL целиком, домен и GET параметры останутся без изменений.
function translit_path($value) < $converter = array( 'а' =>'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', ); $value = mb_strtolower($value); $value = strtr($value, $converter); $value = mb_ereg_replace('[^-0-9a-z\.]', '-', $value); $value = mb_ereg_replace('[-]+', '-', $value); $value = trim($value, '-'); return $value; > function traslit_url($url) < $url = parse_url(trim($url)); if (!empty($url['host'])) < $res = ''; if (!empty($url['scheme'])) < $res .= $url['scheme'] . '://'; >if (!empty($url['host'])) < $res .= idn_to_ascii($url['host']); >if (!empty($url['port'])) < $res .= ':' . $url['port']; >if (!empty($url['path'])) < $path = explode('/', $url['path']); foreach ($path as $i =>$row) < if (preg_match('/[а-яё]/iu', $row)) < $path[$i] = translit_path($row); >> $res .= implode('/', $path); > if (!empty($url['query'])) < $res .= '?' . $url['query']; >if (!empty($url['fragment'])) < $res .= '#' . $url['fragment']; >return $res; > else < return translit_path($url); >> echo traslit_url('https://example.com/category/статья о транслите.html?page=1');
Результат:
https://example.com/category/statya-o-translite.html?page=1
Транслит для имен файлов
function translit_file($filename) < $converter = array( 'а' =>'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '', 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', ); $new = ''; $file = pathinfo(trim($filename)); if (!empty($file['dirname']) && @$file['dirname'] != '.') < $new .= rtrim($file['dirname'], '/') . '/'; >if (!empty($file['filename'])) < $file['filename'] = str_replace(array(' ', ','), '-', $file['filename']); $file['filename'] = strtr($file['filename'], $converter); $file['filename'] = mb_ereg_replace('[-]+', '-', $file['filename']); $file['filename'] = trim($file['filename'], '-'); $new .= $file['filename']; >if (!empty($file['extension'])) < $new .= '.' . $file['extension']; >return $new; > echo translit_file('/upload/Пример файла.jpg');
Результат: