La classe de traduction que je viens de rajouter au framework est une classe qui permet la traduction des textes sur un rechargement de page

En fait j'ai utilisé une classe deja existante qui permet la traduction avec BabelFish (VANDER ELST, David, Babelfish Translator v1.12). Cette classe permet la recuperation d'une page qui est ensuite parser pour recuperer le texte entre des balises bien défini

/*
* Application : Babelfish Translator
* Version : 1.12
* Auteur : VANDER ELST, David
* Description : Classe utilisant Babelfish de altavista pour traduire du texte.
* Toutes les langues proposées par babelfish sont utilisables!
*/

class BabelfishTranslator {

/* Fonction : Récupère le code html généré par une URL donnée
* Arguments :
* 1. $url -> url de la page
*/
protected function _getHtml($url) {
return file_get_contents($url);
}

/* Fonction : Génère l'url a appeler pour la traduction suivant les langues choisies
* Arguments :
* 1. $text_trad -> Texte à traduire
* 2. $lang_from -> Code de la langue de départ
* 3. $lang_to -> Code de la langue dans laquelle on doit traduire
*/
protected function _genBFUrl($text_trad, $lang_from, $lang_to) {
return 'http://'.(
'babelfish.altavista.com/tr?trtext='.
urlencode($text_trad).'&lp='.
strtolower($lang_from).'_'.
strtolower($lang_to)
);
}

/* Fonction : Parse le code html retourné et retourne la traduction trouvée
* Arguments :
* 1. $html -> Code html à parser
*/
protected function _parseHtml($html) {
$deb_trad=strpos($html, '< div style=padding:10px; >')+25;
$fin_trad=strpos($html, '< /div >');
return substr($html, $deb_trad, $fin_trad-$deb_trad);
}

/* Fonction : Traduit le texte dans la langue données vers la langue donnée
* Arguments :
* 1. $text_trad -> Texte à traduire
* 2. $lang_from -> Code de la langue de départ
* 3. $lang_to -> Code de la langue dans laquelle on doit traduire
*/
protected function Translate($text_trad, $lang_from='fr', $lang_to='en') {
$url=$this->_genBFUrl(stripslashes($text_trad), $lang_from, $lang_to);
$html=$this->_getHtml($url);


$trad=$this->_parseHtml($html);
if(ereg("Translation Error", $trad)) return false;
else return(stripslashes($trad));
}
}
?>

J'ai fait heriter une classe C_traduction de cette classe afin de ne pas devoir modifier celle-ci mais surtout si demain je doit changer le traducteur (babelfish) et en mettre un autre je n'aurai qu'a modifié la classe C_traduction

Donc ensuite il m'a suffit de creer un test dans la fonction de generation de l'input afin de creer un lien avec un keyword specifique pour le rechargement de la classe afin de lancer la traduction, j'ai donc rajouter ce lien dans le label comme ca je l'ai a chaque fois qu'une langue est ajouter.

Pour finir, lors du post j'ai intercepté les informations qui sont afficher dans le champs (seulement si elle sont vide afin de ne pas perdre les informations rentrée par l'administrateur.

Donc la modification etant faite dans la C_texte il faut expliquer le fonctionnement de la C_traduction, on cree une methode qui permet la traduction avec la classe BabelFishTranslator, et dans à cette methode j'ai fait passé les informations de recuperation d'un texte FR.

En effet je me base sur le fait que si le texte a traduire est vide alors je vais chercher les informations qui correspond au texte en Francais que je traduis ensuite. Je passe les information a la classe BabelFish qui va ensuite me rendre le texte traduit. Dans la classe babelfish une erreur peut provenir lorsque l'on envoie une chaine vide car la page recuperer renvoi le formulaire Babelfish donc la solution est verifier que la chaine envoyer n'est pas vide et donc plus de probleme lors de l'affichage de la traduction

Voila vous avez une idee de la generation d'une classe de traduction par le framework



class C_traduction extends BabelfishTranslator
{
var $lang_actuel = 1;
public function __construct(){}
public function Cfct_initialisation()
{

}
public function Cfct_change_langue($text_trad,$text_origin_type,$text_origin_id,$mini_id)
{
switch ($this->lang_actuel)
{
case 1:$lang_to='fr';break;
case 2:$lang_to='en';break;
case 3:$lang_to='it';break;
case 4:$lang_to='es';break;
case 5:$lang_to='de';break;
case 6:$lang_to='ru';break;
}
if (empty($text_trad) && $this->lang_actuel!=1)
{
$obj_texte = new C_texte();
//le mini_id est un indice de site dans votre cas n'est pas necessaire et le 1 finale est la langue francaise
$text_trad = nl2br($obj_texte->Cfct_get_information($text_origin_type,$text_origin_id,$mini_id,1));
if (!empty($text_trad))
return nl2br($this->Translate($text_trad, 'fr', $lang_to));
else
return "";
}
else
return $text_trad;

}
}

?>