Paquete PHP gratuito de la API del Traductor de Google. Traduce totalmente gratis.
Instale este paquete a través de Composer.
composer require stichoza/google-translate-php
Nota Se requiere PHP 8.0 o posterior . Utilice las siguientes versiones de este paquete para versiones anteriores de PHP:
Versión del paquete | Versión PHP | Documentación |
---|---|---|
^5.1 | PHP >= 8.0 | Documentos v5 |
^4.1 | PHP >= 7.1 | Documentos v4 |
^3.2 | PHP<7.1 | Documentos v3 |
Crear objeto GoogleTranslate
use Stichoza GoogleTranslate GoogleTranslate ;
$ tr = new GoogleTranslate ( ' en ' ); // Translates into English
O puedes cambiar de idioma más tarde
$ 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
Traducir oraciones
echo $ tr -> translate ( ' Hello World! ' );
Además, también puedes utilizar el encadenamiento de métodos.
echo $ tr -> setSource ( ' en ' )-> setTarget ( ' ka ' )-> translate ( ' Goodbye ' );
O llamar a un método estático abreviado trans
echo GoogleTranslate:: trans ( ' Hello again ' , ' ka ' , ' en ' );
Para detectar el idioma automáticamente, simplemente configure el idioma de origen en null
:
$ tr = new GoogleTranslate ( ' es ' , null ); // Or simply do not pass the second parameter
$ tr -> setSource (); // Another way
Utilice getLastDetectedSource()
para obtener el idioma detectado:
$ tr = new GoogleTranslate ( ' fr ' );
$ text = $ tr -> translate ( ' Hello World! ' );
echo $ tr -> getLastDetectedSource (); // Output : en
El valor de retorno será null
si no se pudo detectar el idioma.
Puede obtener una lista de todos los idiomas admitidos utilizando el método languages
.
$ tr = new GoogleTranslate ();
$ languages = $ tr -> languages (); // Get supported languages in iso - 639 format
// Output : [ 'ab' , 'ace' , 'ach' , 'aa' , 'af' , 'sq' , 'alz' , ... ]
Opcionalmente, pase un código de idioma de destino para recuperar los idiomas admitidos con nombres que se muestran en ese idioma.
$ 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 '
Al igual que con los métodos translate
/ trans
, también puedes usar un método langs
estáticos:
GoogleTranslate:: langs ();
// Output : [ 'ab' , 'ace' , 'ach' , 'aa' , 'af' , 'sq' , 'alz' , ... ]
GoogleTranslate:: langs ( ' en ' );
// Output : [ 'en' => English' , ' es ' => ' Spanish ' , ' it' => 'Italian' , ... ]
Los idiomas admitidos también se enumeran en los documentos de la API de Google.
El método preserveParameters()
le permite conservar ciertos parámetros en cadenas mientras realiza traducciones. Esto es particularmente útil cuando se trata de archivos de localización o motores de plantillas donde es necesario excluir marcadores de posición específicos de la traducción.
La expresión regular predeterminada es /:(w+)/
que cubre parámetros que comienzan con :
. Útil para traducir archivos de idioma de Laravel y otros frameworks. También puede pasar su expresión regular personalizada para modificar la sintaxis del parámetro.
$ 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
O use expresiones regulares personalizadas:
$ text = $ tr -> preserveParameters ( ' /{{([^}]+)}}/ ' )
-> translate ( ' Page {{current}} of {{total}} ' ); // Seite { { current } } von { { total } }
También puedes usar la misma función con el método trans()
estático.
GoogleTranslate:: trans ( ' Welcome :name ' , ' fr ' , preserveParameters: true ); // Default regex
GoogleTranslate:: trans ( ' Welcome {{name}} ' , ' fr ' , preserveParameters: ' /{{([^}]+)}}/ ' ); // Custom regex
Para un uso avanzado, es posible que necesite los resultados sin procesar que proporciona Google Translate. puedes usar el método getResponse
para eso.
$ responseArray = $ tr -> getResponse ( ' Hello world! ' );
Puede anular la URL predeterminada del Traductor de Google mediante el método setUrl
. Útil para algunos países.
$ tr -> setUrl ( ' http://translate.google.cn/translate_a/single ' );
Este paquete utiliza Guzzle para solicitudes HTTP. Puede pasar una serie de opciones de configuración del cliente Guzzle como tercer parámetro al constructor GoogleTranslate
, o simplemente usar el método setOptions
.
Puede configurar proxy, agente de usuario, encabezados predeterminados, tiempo de espera de conexión, etc. utilizando estas opciones.
$ 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 ' );
Para obtener más información, consulte la sección Creación de un cliente en los documentos de Guzzle.
Puede anular la clase del generador de tokens pasando un objeto generador como cuarto parámetro del constructor o simplemente usando el método setTokenProvider
.
El generador debe implementar StichozaGoogleTranslateTokensTokenProviderInterface
.
use Stichoza GoogleTranslate Tokens TokenProviderInterface ;
class MyTokenGenerator implements TokenProviderInterface
{
public function generateToken ( string $ source , string $ target , string $ text ): string
{
// Your code here
}
}
Y uso:
$ tr -> setTokenProvider ( new MyTokenGenerator );
Google Translate tiene un parámetro llamado client
que define la calidad de la traducción. Primero se configuró en webapp
pero luego Google agregó el valor gtx
, lo que resulta en una mejor calidad de traducción en términos de gramática y significado general de las oraciones.
Puede utilizar el método ->setClient()
para cambiar entre clientes. Por ejemplo, si desea utilizar una versión anterior del algoritmo de traducción, escriba $tr->setClient('webapp')->translate('lorem ipsum...')
. El valor predeterminado es gtx
.
El método estático trans()
y los métodos no estáticos translate()
y getResponse()
generarán las siguientes excepciones:
ErrorException
Si la solicitud HTTP falla por algún motivo.UnexpectedValueException
Si los datos recibidos de Google no se pueden decodificar. A partir de la versión 5.1.0, hay excepciones concretas disponibles en el espacio de nombres StichozaGoogleTranslateExceptions
:
LargeTextException
Si el texto solicitado es demasiado grande para traducirlo.RateLimitException
Si Google te ha bloqueado por solicitudes de cantidad excesiva.TranslationRequestException
Si se produce cualquier otro error relacionado con HTTP durante la traducción.TranslationDecodingException
Si la respuesta JSON no se puede decodificar.Todas las excepciones concretas son compatibles con versiones anteriores, por lo que si estaba utilizando versiones anteriores, no tendrá que actualizar su código.
TranslationDecodingException
extiende UnexpectedValueException
, mientras que LargeTextException
, RateLimitException
y TranslationRequestException
extienden ErrorException
que se usó en versiones anteriores ( <5.1.0
) de este paquete.
Además, los métodos translate()
y trans()
devolverán null
si no hay traducción disponible.
503 Service Unavailable
: si recibe este error, lo más probable es que Google haya prohibido su dirección IP externa y/o requiera que resuelva un CAPTCHA. Esto no es un error en este paquete. Google se ha vuelto más estricto y parece que siguen reduciendo la cantidad de solicitudes permitidas por IP durante un cierto período de tiempo. Intente enviar menos solicitudes para permanecer fuera del radar o cambie su IP con frecuencia (por ejemplo, utilizando servidores proxy). Tenga en cuenta que una vez que se prohíbe una IP, incluso si es solo temporal, la prohibición puede durar desde unos minutos hasta más de 12 a 24 horas, ya que cada caso es diferente.429 Too Many Requests
: Este error es básicamente el mismo que se explicó anteriormente.413 Request Entity Too Large
: este error significa que la cadena de entrada es demasiado larga. Google sólo permite traducir un máximo de 5000 caracteres a la vez. Si deseas traducir un texto más largo, puedes dividirlo en partes más cortas y traducirlas una por una.403 Forbidden
: Esto no es un problema con este paquete. El propio Google Translate tiene algunos problemas a la hora de traducir algunos caracteres y entidades HTML. Ver #119 (comentario) Este paquete está desarrollado únicamente con fines educativos. No dependa de este paquete, ya que puede fallar en cualquier momento, ya que se basa en el rastreo del sitio web de Google Translate. Considere comprar la API oficial de Google Translate para otros tipos de uso.
Si este paquete te ayudó a reducir tu tiempo para desarrollar algo, o resolvió algún problema importante que tuviste, no dudes en darme una taza de café :)