Funzione php per tradurre testi utilizzando Google Translator 25





Ora che Google ha migliorato il suo sistema di traduzione, possiamo utilizzarlo per i nostri scopi, creando una funzione php che ci permetta di tradurre un testo da una lingua ad un’altra. La funzione accetta come input il testo da tradurre, la lingua sorgente (it/en/ja/ecc..) e la lingua destinazione (en/it/ja/ecc..) restituendo il testo tradotto.

Per far ciò ci avvaliamo della funzione postURL che ho introdotto nell’articolo ‘Prelevare il contenuto di una pagina web passando i parametri via POST (PHP)’“.
Ecco la funzione:

L’utilizzo è semplicissimo:

che permette di tradurre il testo dall’italiano all’inglese.

Logica della funzione:
Per prima cosa codifichiamo il testo tramite la funzione php urlencode , racchiudendolo in un tag unico non presente nel testo da tradurre. Io ho scelto la parola JHIKE (un mio nickname). Questo tag ha un ruolo fondamentale, per la ricerca del testo tradotto all’interno della pagina.
Impostiamo i parametri necessari al traduttore di google (langpair e text) e li passiamo alla mia precedente funzione postURL che ci restituirà la pagina di google con il testo tradotto.
Quindi preleviamo il testo con una espressione regolare, che dice grossomodo “restituiscimi il testo che è racchiuso tra il mio tag (JHIKE) facendo attenzione a prendermi quello tradotto”. Che definizione eh? ;)

Lo scopo di quest’articolo era come utilizzare praticamente  la funzione postURL . Effettuando il POST e non il GET per il sistema di traduzione di google, è possibile inserire testi più grandi.

Nel prossimo articolo illustrerò come creare un plugin per WordPress, che utilizzando queste funzioni, permetterà di tradurre in automatico il testo dei nostri articoli. Ovviamente, verrà tradotto SOLO l’articolo è non l’intera pagina ;)

Seguimi su twitter : @ironico

25 thoughts on “Funzione php per tradurre testi utilizzando Google Translator

  1. Reply Federico set 8,2012 18:45

    Peccato sembra non funzionare più….

  2. Reply angela apr 24,2012 12:10

    complimenti per le istruzioni sono perfette e facili anche per chi, come me, non mastica molto il linguaggio web. Sappi che solo con le istruzioni trovate nel tuo sito sono riuscita ad inserire google+
    grazie infinite
    angela

  3. Reply ivan nov 23,2010 20:31

    è ancora funzionante questa funzione ?
    o è stata migliorata con il tempo?

    • Reply Gennaro Varriale nov 24,2010 17:39

      ciao,
      ultimamente Google ha potenziato il servizio di traduzione, mostrando anche l’audio della traduzione.
      Cambiando la riga 7 del codice con la corretta espressione regolare dovrebbe ancora funzionare.

  4. Reply Andrea set 19,2009 14:53

    Ciao, ho lo stesso problema di Walter V. ma nn ho trovato l’espressione regolare corretta perchè quelle suggerite nn funzionano. Qual è l’espressione corretta?

    • Reply Gennaro Varriale set 19,2009 16:21

      Ciao Andrea, ad occhio l’espressione sembra corretta, però controlla se google ha cambiato l’html. Quando scrissi l’articolo e per molto tempo è andata bene, ora potrebbe essere che google abbia aggiornato. Scaricati la pagina e vedi di intercettare la stringa corretta.

  5. Reply Andrea set 19,2009 14:51

    Ciao Gennaro,
    ho lo stesso problema di Walter V. ma non sono riuscito a risolvere. Qual è l’istruzione preg_match_all corretta? Quelle suggerite nei post nn mi funzionano :(

  6. Reply Gennaro Varriale giu 3,2009 10:47

    @Walter: grazie ;) Ogni volta che modifico l’articolo wordpress aggiunge o toglie spazi..quindi lascio così ;)

  7. Reply Walter V. giu 2,2009 19:34

    Ho notato che lo script non traduceva bene la prima e l’ultima parola, probabilemtente perchè attaccate al tag. E’ bastato distanziare frase di uno spazio per sistemare il problema.

    Comunque complimenti e grazir veramente sia per questa funzione che per l’altra. Erano mesi che andavo avanti a usare javascript per tradurre :D.

  8. Reply Pitbull nov 20,2008 15:01

    eh data l’ora devo essermi perso qualcosa :D …grazie x la risposta tempestiva ;)

  9. Reply Gennaro Varriale nov 20,2008 09:35

    @Pitbull : beh..leggi meglio l’articolo..:) “Per far ciò ci avvaliamo della funzione postURL che ho introdotto nell’articolo ‘Prelevare il contenuto di una pagina web passando i parametri via POST (PHP)’“.
    Inoltre ricorda che postURL è diverso da posturl in php, rispetta minuscole e maiuscole.

  10. Reply Pitbull nov 20,2008 04:21

    a me da errore… Fatal error: Call to undefined function: posturl();

    la riga incriminata è:
    $data= postURL(‘http://translate.google.com/translate_t?’, $params);

  11. Reply Gennaro Varriale giu 13,2008 19:50

    Già! Ed anche lo slash della chisura del div..credo che c’è l’abbiamo fatta ;)

  12. Reply Luca giu 13,2008 08:59

    Ciao Gennaro,
    manca un < nel secondo div (non so se funziona senza) per il resto è ok (e scusami ancora per i multi messaggi :) )

  13. Reply Gennaro Varriale giu 13,2008 08:47

    Ciao Luca, credo ci siamo..
    ho eliminato i messaggi inutili , per rendere la pagina più pulita.
    Grazie per la tua collaborazione :)

  14. Reply Luca giu 13,2008 08:26

    Funzione corretta:

    function traduci ($testo,$src,$dest) {
    $testo=urlencode($testo);
    $params="langpair=$src|$dest&text=".$testo;
    $data= postURL('http://translate.google.com/translate_t?', $params);
    preg_match_all('/<div id=result_box dir=ltr>(.*?)>\/<\/div>/', $data, $result, PREG_SET_ORDER);
    return $result[0][1];
    }

  15. Reply Gennaro Varriale giu 9,2008 10:56

    @marcello:
    UPDATE: prova a cambiare la parola JHIKE da maiuscolo in minuscolo (‘jhike’).

    Al momento ho fatto questa prova inserendo il link direttamente nel browser
    “http://translate.google.com/translate_t?langpair=en|it&text=this%20is%20a%20test”
    che dovrebbe tradurre ‘this is a test’ dall’inglese all’italiano, ed è tutt’ok.

    Quindi se non funziona lo script, deve esserci un problema nell’estrazione del testo dalla pagina google, cosa che fa la seguente riga:
    preg_match_all(”/result_box.*”.$tag.”(.*)”.$tag.”\s*\< \/div\>/mi”, ..

    Molto probabilmente basta modificare “result_box” con una stringa più specifica,che si trova all’interno della pagina di ricerca.

    Puoi fare qualche test controllando che la variabile “$data” contenga la pagina derivante da Google (es: echo “$data”;)

    Se non ci riesci appena ho un pò di tempo, controllo.
    Ciao

  16. Reply Marcello Ciampa giu 8,2008 17:55

    ciao gennaro
    stavo utilizzando la funzione traduci() da una settimana a questa parte per ottenere un sito multilingua, andava tutto bene, ma da ieri sera per qualche strano motivo ha smesso di funzionare..

    dopo diversi tentativi mi rivolgo a te perchè non ho ancora capito dove sta l’inghippo!!

    grazie

  17. Reply Gennaro Varriale mag 17,2008 08:04

    1)Devi creare prima una form html contenente un campo input (es. testo),
    una select per la lingua di partenza (es.src) ed una per quella di arrivo (es.dest) (entrambi facoltativi),
    ed un submit button. L’action della form deve puntare al tuo script php (che contiene la funzione traduci) .
    2) Lo script php carica questi valori tramite $_GET[‘testo’], $_GET[‘src’] e $_GET[‘dest’] e li passi alla funzione traduci.

  18. Reply Michele Todaro mag 15,2008 13:44

    Potresti spiegarmi come faccio a collegare un bottone alla funzione che hai illustrato(GRAZIE!)per tradurre il testo di una pagina web?
    Sperando di ricevere al più presto una risposta ti ringrazio e ti invio cordiali saluti.

    Michele Todaro

  19. Reply Gennaro Varriale dic 20,2007 09:45

    Per molte lingue, google translator traduce solo in inglese e viceversa.
    Per tradurre da tedesco a italiano, si deve fare due passaggi, tedesco/inglese e inglese/italiano, questo vale anche per le altre lingue (cinese,giapponese,ecc..)

  20. Reply ago dic 20,2007 00:07

    perche’ non c’e’ anche ” tedesco/italiano e viceverso

  21. Pingback: Prelevare il contenuto di una pagina web passando i parametri via POST (PHP) « Gennaro Varriale »

Leave a Reply

  

  

  

Login with:
Powered by Sociable!

Per essere informato sui miei contenuti - Email: