Pacote PHP gratuito da API do Google Tradutor. Traduz de forma totalmente gratuita.
Instale este pacote via Composer.
composer require stichoza/google-translate-php
Nota É necessário PHP 8.0 ou posterior . Use as seguintes versões deste pacote para versões mais antigas do PHP:
Versão do pacote | Versão PHP | Documentação |
---|---|---|
^5.1 | PHP >= 8.0 | Documentos v5 |
^4.1 | PHP >= 7.1 | Documentos v4 |
^3.2 | PHP <7.1 | Documentos v3 |
Criar objeto GoogleTranslate
use Stichoza GoogleTranslate GoogleTranslate ;
$ tr = new GoogleTranslate ( ' en ' ); // Translates into English
Ou você pode alterar o idioma mais 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
Traduzir frases
echo $ tr -> translate ( ' Hello World! ' );
Além disso, você também pode usar o encadeamento de métodos
echo $ tr -> setSource ( ' en ' )-> setTarget ( ' ka ' )-> translate ( ' Goodbye ' );
Ou chame um método estático abreviado trans
echo GoogleTranslate:: trans ( ' Hello again ' , ' ka ' , ' en ' );
Para detectar o idioma automaticamente, basta definir o idioma de origem como null
:
$ tr = new GoogleTranslate ( ' es ' , null ); // Or simply do not pass the second parameter
$ tr -> setSource (); // Another way
Use getLastDetectedSource()
para obter o idioma detectado:
$ tr = new GoogleTranslate ( ' fr ' );
$ text = $ tr -> translate ( ' Hello World! ' );
echo $ tr -> getLastDetectedSource (); // Output : en
O valor de retorno será null
se o idioma não puder ser detectado.
Você pode obter uma lista de todos os idiomas suportados usando o 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, passe um código de idioma de destino para recuperar idiomas suportados com nomes exibidos nesse 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 '
Da mesma forma que com os métodos translate
/ trans
, você também pode usar um método static langs
:
GoogleTranslate:: langs ();
// Output : [ 'ab' , 'ace' , 'ach' , 'aa' , 'af' , 'sq' , 'alz' , ... ]
GoogleTranslate:: langs ( ' en ' );
// Output : [ 'en' => English' , ' es ' => ' Spanish ' , ' it' => 'Italian' , ... ]
Os idiomas suportados também estão listados nos documentos da API do Google.
O método preserveParameters()
permite preservar certos parâmetros em strings enquanto realiza traduções. Isto é particularmente útil ao lidar com arquivos de localização ou mecanismos de modelagem onde espaços reservados específicos precisam ser excluídos da tradução.
O regex padrão é /:(w+)/
que cobre parâmetros começando com :
. Útil para traduzir arquivos de linguagem do Laravel e outros frameworks. Você também pode passar seu regex personalizado para modificar a sintaxe do 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
Ou use regex personalizado:
$ text = $ tr -> preserveParameters ( ' /{{([^}]+)}}/ ' )
-> translate ( ' Page {{current}} of {{total}} ' ); // Seite { { current } } von { { total } }
Você também pode usar o mesmo recurso com o método static trans()
.
GoogleTranslate:: trans ( ' Welcome :name ' , ' fr ' , preserveParameters: true ); // Default regex
GoogleTranslate:: trans ( ' Welcome {{name}} ' , ' fr ' , preserveParameters: ' /{{([^}]+)}}/ ' ); // Custom regex
Para uso avançado, você pode precisar dos resultados brutos fornecidos pelo Google Tradutor. você pode usar o método getResponse
para isso.
$ responseArray = $ tr -> getResponse ( ' Hello world! ' );
Você pode substituir o URL padrão do Google Tradutor pelo método setUrl
. Útil para alguns países
$ tr -> setUrl ( ' http://translate.google.cn/translate_a/single ' );
Este pacote usa Guzzle para solicitações HTTP. Você pode passar uma série de opções de configuração do cliente guzzle como um terceiro parâmetro para o construtor GoogleTranslate
ou apenas usar o método setOptions
.
Você pode configurar proxy, agente de usuário, cabeçalhos padrão, tempo limite de conexão e assim por diante usando essas opções.
$ 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 obter mais informações, consulte a seção Criando um cliente nos documentos do Guzzle.
Você pode substituir a classe geradora de token passando um objeto gerador como um quarto parâmetro do construtor ou apenas usar o método setTokenProvider
.
O gerador deve implementar StichozaGoogleTranslateTokensTokenProviderInterface
.
use Stichoza GoogleTranslate Tokens TokenProviderInterface ;
class MyTokenGenerator implements TokenProviderInterface
{
public function generateToken ( string $ source , string $ target , string $ text ): string
{
// Your code here
}
}
E use:
$ tr -> setTokenProvider ( new MyTokenGenerator );
O Google Translate possui um parâmetro denominado client
que define a qualidade da tradução. Primeiro foi definido como webapp
, mas depois o Google adicionou valor gtx
, o que resulta em uma melhor qualidade de tradução em termos de gramática e significado geral das frases.
Você pode usar o método ->setClient()
para alternar entre clientes. Por exemplo, se você quiser usar uma versão mais antiga do algoritmo de tradução, digite $tr->setClient('webapp')->translate('lorem ipsum...')
. O valor padrão é gtx
.
O método estático trans()
e os métodos não estáticos translate()
e getResponse()
lançarão as seguintes exceções:
ErrorException
Se a solicitação HTTP falhar por algum motivo.UnexpectedValueException
Se os dados recebidos do Google não puderem ser decodificados. A partir da versão 5.1.0, exceções concretas estão disponíveis no namespace StichozaGoogleTranslateExceptions
:
LargeTextException
Se o texto solicitado for muito grande para ser traduzido.RateLimitException
Se o Google bloqueou você por solicitações de quantidade excessiva.TranslationRequestException
Se ocorrer algum outro erro relacionado ao HTTP durante a tradução.TranslationDecodingException
Se o JSON da resposta não puder ser decodificado.Todas as exceções concretas são compatíveis com versões anteriores, portanto, se você estiver usando versões mais antigas, não precisará atualizar seu código.
TranslationDecodingException
estende UnexpectedValueException
, enquanto LargeTextException
, RateLimitException
e TranslationRequestException
estendem ErrorException
que foi usado em versões mais antigas ( <5.1.0
) deste pacote.
Além disso, os métodos translate()
e trans()
retornarão null
se não houver tradução disponível.
503 Service Unavailable
: Se você estiver recebendo esse erro, é mais provável que o Google tenha banido seu endereço IP externo e/ou exija que você resolva um CAPTCHA. Este não é um bug neste pacote. O Google se tornou mais rígido e parece que continua reduzindo o número de solicitações permitidas por IP por um determinado período de tempo. Tente enviar menos solicitações para ficar fora do radar ou altere seu IP com frequência (por exemplo, usando proxies). Observe que uma vez que um IP é banido, mesmo que seja apenas temporário, o banimento pode durar de alguns minutos a mais de 12 a 24 horas, pois cada caso é um caso.429 Too Many Requests
: Este erro é basicamente o mesmo explicado acima.413 Request Entity Too Large
: Este erro significa que sua string de entrada é muito longa. O Google permite a tradução de no máximo 5.000 caracteres por vez. Se quiser traduzir um texto mais longo, você pode dividi-lo em partes mais curtas e traduzi-las uma por uma.403 Forbidden
: Este não é um problema com este pacote. O próprio Google Translate tem alguns problemas quando se trata de traduzir alguns caracteres e entidades HTML. Veja # 119 (comentário) Este pacote foi desenvolvido apenas para fins educacionais. Não dependa deste pacote, pois ele pode falhar a qualquer momento, pois é baseado no rastreamento do site do Google Tradutor. Considere comprar a API oficial do Google Translate para outros tipos de uso.
Se este pacote ajudou você a reduzir seu tempo de desenvolvimento de algo, ou resolveu algum problema importante que você teve, fique à vontade para me dar uma xícara de café :)