Traduction instantannée avec BabelFish

Catégorie : PHP objet | Tag : , , , , , ,
Share

Parce qu’il faut bien mettre un petit peu en pratique de temps en temps, je me suis amusé à créer une class qui implémente un module de traduction à l’aide de [BabelFish|http://fr.babelfish.yahoo.com/] (le système de traduction de [Yahoo|http://fr.yahoo.com/]). En résumé, j’ai plusieurs attributs qui déterminent les différents paramètres de la classe (url de la page de retour, url de BabelFish, langue du message à traduire, langue de la traduction), le constructeur permet de définir ces deux derniers, puisque ce sont les seules succeptible de changer assez souvent ! (pour pouvoir faire du Espagnol -> Anglais ou Grec -> Chinois) L’url pour traduire une phrase avec BabelFish se décompose de la manière suivante ; * http://fr.babelfish.yahoo.com/translate_txt : base de l’url * lp : langues à utiliser (ex : fr_en) * trtext : chaine de caractères à traduire. Les caractères accentués sont bien traités, mais les guillements et les espaces posent un problème. Il faut remplacer les espaces par des + ou des %20, quant aux guillements, bah je n’arrive pas à savoir par quoi il fut les transformer, donc pour l’instant je bloque. Et voilà, il n’y a plus qu’à faire un petit @@file_get_contents@@ pour récupèrer la page chargée par cet url, et une petite regex pour ne récupèrer que la traduction : et le tour est joué ! /// langueIn = $langueIn; $this->langueOut = $langueOut; } // Mutator function setLangueIn($langueIn) { $this->langueIn = $langueIn; } function setLangueOut($langueOut) { $this->langueOut = $langueOut; } function setUrlGoogle($urlGoogle) { $this->urlGoogle = $urlGoogle; } function setUrlAction($urlAction) { $this->urlAction = $urlAction; } function afficherForm($aTraduire) { $form = ‘

Phrase à traduire
‘. »\n ».’
‘. »\n ».’
‘. »\n ».’

‘; echo $form; } function parse($string) { $string = str_replace(‘\ », ‘%27′, trim($string)); $string = str_replace(‘ ‘, ‘%20′, $string); return $string; } function traduire($aTraduire) { $url = $this->urlGoogle.$this->langueIn.’_’.$this->langueOut.’&trtext=’.$this->parse($aTraduire); $content = file_get_contents($url); $content = preg_replace(‘!^.*

(.*)

.*$!isU’, ‘$1′, $content); if (preg_match(‘!DOCTYPE!’, $content)) // Si on n’a pas réussi à traduire echo  »; echo ‘Traduction de « ‘.stripslashes($aTraduire).’ » : ‘.trim($content); } function main() { if (isset($_POST['translate']) && $_POST['translate']) $this->traduire($_POST['translate']); $this->afficherForm(@$_POST['translate']); } } $test = new TranslateGoogle(‘fr’, ‘en’); $test->main(); ?> /// Vous pouvez tester tout ça sur cette [page de test|/public/Test/ClassTranslateBabelFish.php]. Bon, là mon serveur ne semble pas trop apprécier @@file_get_contents@@, donc il va falloir que je modifie tout ça ^^ J’ai essayé d’utiliser Google qui fonctionnait bien mieux puisque l’on pouvait mettre n’importe quoi dans l’url, malheureusement ils font ça en Ajax du coup @@file_get_contents@@ renvoie la page chargé par le PHP (ou autre) mais ne s’occupe pas du Javascript, et donc on n’a pas la traduction… Dommage, l’url était joli : http://translate.google.fr/translate_t#fr|en|Phrase à traduire Quant à Voilà, l’url était aussi pas mal : http://trans.voila.fr/traduction_voila.php?isText=1&translationDirection=fe&stext=Phrase à traduire, mais il n’y avait trop de problème avec les caractères accentués. Voilà une petite class qui, une fois améliorée, devrait me servir pour un petit projet !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>