ciao a tutti! mi potete dire come posso tradurre un testo utilizzando php? ho seguito questa guida ma a me non va http://www.gennarovarriale.it/funzio...le-translator/
ciao a tutti! mi potete dire come posso tradurre un testo utilizzando php? ho seguito questa guida ma a me non va http://www.gennarovarriale.it/funzio...le-translator/
"non va" non vuol dire niente.
Ricevi un errore? Quale?
schermata bianca... per questo sono un pò vago.. a voi funziona?
Ciao, io per testare l'esempio che hai postato tu ho utilizzato questo codice
Ma ricevo questi errori, non pagina bianca...Codice PHP:
<?php
function postURL( $url ,$params) {
$buffer='';
$url_parsed = parse_url($url);
$host = $url_parsed["host"];
$port = $url_parsed["port"];
if ($port==0) $port = 80;
$path = $url_parsed["path"];
$ContentLength = strlen($params);
$out = "POST $path HTTP/1.0\r\n".
"Host: $host\r\n".
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Content-Length: $ContentLength\n\n".
"$params\n";
$fp = fsockopen($host, $port, $errno, $errstr, 30);
fwrite($fp, $out);
while (!feof($fp)) {
$buffer.= fgets($fp, 128);
}
fclose($fp);
return $buffer;
}
function traduci ($testo,$src,$dest) {
/* var riale:gennaro; */
$tag='JHIKE';
$testo=urlencode($tag.$testo.$tag);
$params="langpair=$src|$dest&text=".$testo;
$data= postURL('http://translate.google.com/translate_t', $params);
preg_match_all("/result_box.*".$tag."(.*)".$tag."\s*\<\/div\>/mi", $data, $result, PREG_SET_ORDER);
return $result[0][1];
}
echo traduci ('la penna è sul tavolo rosso','it','en');
?>
Notice: Undefined index: port in C:\Programmi\EasyPHP5.3.0\www\prova.php on line 6
Notice: Undefined offset: 0 in C:\Programmi\EasyPHP5.3.0\www\prova.php on line 32
Dalla funzione traduci() invece di $result, fatti ritornare $data e stampala con
echo "<pre>";
print_r(traduci(.....));
echo "</pre>";
è probabile che lo script sia vecchio e da allora Google abbia cambiato il layout della risposta, quindi l'espressione regolare non trova un match.
ho provato come mi avete detto ma mi dice:
codice:Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'd' in lingua.php on line 31
La d nell'espressione regolare da dove salta fuori? Come modificatori ci sono "mi" nello script.
ho scritto
nel complesso funziona comunque... ma è possibile farsi ritornare solo la traduzione?Codice PHP:
<?php
function postURL( $url ,$params) {
$buffer='';
$url_parsed = parse_url($url);
$host = $url_parsed["host"];
$port = $url_parsed["port"];
if ($port==0) $port = 80;
$path = $url_parsed["path"];
$ContentLength = strlen($params);
$out = "POST $path HTTP/1.0\r\n".
"Host: $host\r\n".
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Content-Length: $ContentLength\n\n".
"$params\n";
$fp = fsockopen($host, $port, $errno, $errstr, 30);
fwrite($fp, $out);
while (!feof($fp)) {
$buffer.= fgets($fp, 128);
}
fclose($fp);
return $buffer;
}
function traduci ($testo,$src,$dest) {
/* var riale:gennaro; */
$tag='JHIKE';
$testo=urlencode($tag.$testo.$tag);
$params="langpair=$src|$dest&text=".$testo;
$data= postURL('http://translate.google.com/translate_t', $params);
preg_match_all("/result_box.*".$tag."(.*)".$tag."s*</div>/mi", $data, $result, PREG_SET_ORDER);
return $data;
}
echo "<pre>";
print_r(traduci ('la penna è sul tavolo rosso','it','en'));
echo "</pre>";
//echo traduci ('la penna è sul tavolo rosso','it','en');
?>
$result dovrebbe ritornare solo la traduzione, ma evidentemente la preg_match_all non trova corrispondenze perché la stringa che ritorna google è cambiata e la regola dell'espressione regolare non va più bene.
Dovresti crearti una nuova regola per la preg_match_all() guardando ciò che ti restituisce la print_r(), per questo te l'ho fatta stampare.
sto riprendendo le espressioni regolari... mi potresti dare una mano?
praticamente la regola è che il testo è contenuto tra il testo JHIKE e JHIKE.
ho provato con l'explode ma non so perchè non va