Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Everson Gonçalves

Tradução de Textos em PHP

Recommended Posts

Olá pessoa,

 

Eu tenho esse script de tradução de textos para outras linguagens, só tem um problema.. quando eu coloco um texto muito grande ele não traduz, parece que tem um limitador de caracteres.

 

Alguém o que pode estar acontecendo??

 

Valew!!! Segue abaixo o script..

 

<?php

/*
	FUNÇÃO PARA TRADUÇÃO USANDO PHP
	
	@Créditos:
		Criado por Bruno da Silva (antigo nick DraKiNs)
			Acessem: www.ips-team.blogspot.com

	@Função
		Traduzir texto com simples função php, feito através do tradutor da Google

	@Uso:
		Usas: getTranslationText("texto para traduzir", "língua de entrada", " língua de saida");
		Atenção, o formato de saida e entrada deve ser feito de forma abreviada	

	@Update:  6/07/2011
	@Release: 4/07/2011
	Bom proveito, preserve os créditos
		
*/

echo(getTranslationText("Será que realmente funciona?", "pt", "en")); // português para inglês

function getTranslationText($texto, $entrada, $saida) //Data Base by Google
{      
        //======= [ Tratar Endereço ] ==============================
 
        $UrlTranslate = parse_url("http://translate.google.com/translate_t");
        $DataReceived  = " ";
 
        $post_google = array('sl' => $entrada, 'tl' => $saida ,'text' => utf8_encode(($texto)));       
        $post_google = http_build_query(($post_google));

        //======= [ Abrir a conexão ] ====================
        $TranslateSock = fsockopen($UrlTranslate['host'], 80, $errno, $errstr, 30);    
 
        if (!$TranslateSock)
        {
                fclose($TranslateSock);
                die("[ERRO] Erro de conexão, verifique o pedido");
        }
 
        fputs($TranslateSock, "POST ". $UrlTranslate['path'] . " HTTP/1.1\r\n");
        fputs($TranslateSock, "Host: " . $UrlTranslate['host'] . " \r\n");
 
        fputs($TranslateSock, "Content-type: application/x-www-form-urlencoded\r\n");
        fputs($TranslateSock, "Content-length: ". strlen($post_google) ."\r\n");
        fputs($TranslateSock, "Connection: close\r\n\r\n");
        fputs($TranslateSock, $post_google);
 
        while(!feof($TranslateSock))
        {
                $DataReceived .= fgets($TranslateSock, 128);
        }
        fclose($TranslateSock);
 
        //======= [ Tratar resposta ] ====================
 
        $DataReceived = explode("short_text", $DataReceived);
        $DataReceived[1] = strip_tags(substr($DataReceived[1] ,2, -(strlen($DataReceived[1]) - strpos($DataReceived[1], "</span>") )));
        return ($DataReceived[1]);
}
 


?>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qualquer texto grande que você tentar traduzir ele não mostra nada.. segue abaixo um exemplo:

 

<?php

/*
	FUNÇÃO PARA TRADUÇÃO USANDO PHP
	
	@Créditos:
		Criado por Bruno da Silva (antigo nick DraKiNs)
			Acessem: www.ips-team.blogspot.com

	@Função
		Traduzir texto com simples função php, feito através do tradutor da Google

	@Uso:
		Usas: getTranslationText("texto para traduzir", "língua de entrada", " língua de saida");
		Atenção, o formato de saida e entrada deve ser feito de forma abreviada	

	@Update:  6/07/2011
	@Release: 4/07/2011
	Bom proveito, preserve os créditos
		
*/

echo(getTranslationText("Modelo CT 200h ‘para jovens’ tem motor 1.8 a gasolina e outro elétrico.
Consumo de combustível pode ser de até 22 km/l na cidade.", "pt", "en")); // português para inglês

function getTranslationText($texto, $entrada, $saida) //Data Base by Google
{      
        //======= [ Tratar Endereço ] ==============================
 
        $UrlTranslate = parse_url("http://translate.google.com/translate_t");
        $DataReceived  = " ";
 
        $post_google = array('sl' => $entrada, 'tl' => $saida ,'text' => utf8_encode(($texto)));       
        $post_google = http_build_query(($post_google));

        //======= [ Abrir a conexão ] ====================
        $TranslateSock = fsockopen($UrlTranslate['host'], 80, $errno, $errstr, 30);    
 
        if (!$TranslateSock)
        {
                fclose($TranslateSock);
                die("[ERRO] Erro de conexão, verifique o pedido");
        }
 
        fputs($TranslateSock, "POST ". $UrlTranslate['path'] . " HTTP/1.1\r\n");
        fputs($TranslateSock, "Host: " . $UrlTranslate['host'] . " \r\n");
 
        fputs($TranslateSock, "Content-type: application/x-www-form-urlencoded\r\n");
        fputs($TranslateSock, "Content-length: ". strlen($post_google) ."\r\n");
        fputs($TranslateSock, "Connection: close\r\n\r\n");
        fputs($TranslateSock, $post_google);
 
        while(!feof($TranslateSock))
        {
                $DataReceived .= fgets($TranslateSock, 128);
        }
        fclose($TranslateSock);
 
        //======= [ Tratar resposta ] ====================
 
        $DataReceived = explode("short_text", $DataReceived);
        $DataReceived[1] = strip_tags(substr($DataReceived[1] ,2, -(strlen($DataReceived[1]) - strpos($DataReceived[1], "</span>") )));
        return ($DataReceived[1]);
}
 


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

POIs é Alaerte, e agora como que eu faço pra resolver isso? Já substitui por 9999 alie não adiantou...

 

Ao invés de ler uma linha com fgets() leia a stream como um todo com fread(). Aí sim você pode ler um pedaço de cada vez enquanto o feof() não for atingido.

 

Mas não precisa ser só 128 não, normalmente usa-se 4096 embora o "limite" de fread() seja 8192.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno, mas mesmo assim não funcionou não.. :(

veja se eu fiz correto:

 

while(!feof($TranslateSock))
        {
                $DataReceived .= fread($TranslateSock, 8192);
        }
        fclose($TranslateSock);
 
        //======= [ Tratar resposta ] ====================
 
        $DataReceived = explode("short_text", $DataReceived);
        $DataReceived[1] = strip_tags(substr($DataReceived[1] ,2, -(strlen($DataReceived[1]) - strpos($DataReceived[1], "</span>") )));
        return ($DataReceived[1]);

 

 

 

abraço..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.