Бесплатный PHP-пакет Google Translate API. Переводит совершенно бесплатно.
Установите этот пакет через 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 Translate. для этого вы можете использовать метод getResponse
.
$ responseArray = $ tr -> getResponse ( ' Hello world! ' );
Вы можете переопределить URL-адрес Google Translate по умолчанию с помощью метода setUrl
. Полезно для некоторых стран
$ 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 );
В Google Translate есть параметр client
, который определяет качество перевода. Сначала было установлено webapp
но позже Google добавил значение gtx
, что привело к улучшению качества перевода с точки зрения грамматики и общего смысла предложений.
Вы можете использовать метод ->setClient()
для переключения между клиентами. Например, если вы хотите использовать более старую версию алгоритма перевода, введите $tr->setClient('webapp')->translate('lorem ipsum...')
. Значение по умолчанию — gtx
.
Статический метод trans()
и нестатические методы translate()
и getResponse()
вызовут следующие исключения:
ErrorException
Если HTTP-запрос по какой-либо причине не выполнен.UnexpectedValueException
Если данные, полученные от Google, невозможно декодировать. Начиная с версии 5.1.0 конкретные исключения доступны в пространстве имен StichozaGoogleTranslateExceptions
:
LargeTextException
Если запрошенный текст слишком велик для перевода.RateLimitException
Если Google заблокировал вас за запросы на чрезмерную сумму.TranslationRequestException
Если во время трансляции возникает какая-либо другая ошибка, связанная с HTTP.TranslationDecodingException
Если ответ JSON не может быть декодирован.Все конкретные исключения обратно совместимы, поэтому, если вы использовали более старые версии, вам не придется обновлять свой код.
TranslationDecodingException
расширяет UnexpectedValueException
, а LargeTextException
, RateLimitException
и TranslationRequestException
расширяют ErrorException
, который использовался в более старых версиях ( <5.1.0
) этого пакета.
Кроме того, методы translate()
и trans()
вернут значение null
, если перевод недоступен.
503 Service Unavailable
. Если вы получаете эту ошибку, скорее всего, Google заблокировал ваш внешний IP-адрес и/или требует от вас пройти CAPTCHA. Это не ошибка в этом пакете. Google стал строже, и похоже, что они продолжают снижать количество разрешенных запросов на один IP-адрес в течение определенного периода времени. Старайтесь отправлять меньше запросов, чтобы оставаться незамеченными, или чаще меняйте свой IP-адрес (например, используя прокси). Обратите внимание, что после блокировки IP, даже если она временная, бан может длиться от нескольких минут до более 12-24 часов, поскольку каждый случай индивидуален.429 Too Many Requests
: Эта ошибка в основном такая же, как описано выше.413 Request Entity Too Large
: эта ошибка означает, что введенная строка слишком длинная. Google разрешает переводить не более 5000 символов одновременно. Если вы хотите перевести более длинный текст, вы можете разделить его на более короткие части и переводить их одну за другой.403 Forbidden
ответ: это не проблема этого пакета. Сам Google Translate имеет некоторые проблемы с переводом некоторых символов и объектов HTML. См. № 119 (комментарий). Этот пакет разработан только для образовательных целей. Не полагайтесь на этот пакет, поскольку он может сломаться в любой момент, поскольку он основан на сканировании веб-сайта Google Translate. Рассмотрите возможность приобретения официального API Google Translate для других типов использования.
Если этот пакет помог вам сократить время на разработку чего-либо или решил какие-либо серьезные проблемы, не стесняйтесь угостить меня чашечкой кофе :)