Demande d'infos sur une fonction

Bonjour,

Quelqu'un peut-il me dire quelle est la fonction à utiliser pour traduire un bloc multilingue <multi> ... </multi> dans le cadre du développement d'un plugin ?

Je suis également intéressé par une explication des paramètres.

Cordialement,

Michael

Michaël Thanry a écrit :

Bonjour,

Quelqu'un peut-il me dire quelle est la fonction à utiliser pour traduire un bloc multilingue <multi> ... </multi> dans le cadre du développement d'un plugin ?

Je suis également intéressé par une explication des paramètres.

Cordialement,

Michael
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP

si je comprends bien la question : une fonction php pour extraire la langue choisie dans un bloc multi ?

pour le développement de la barre typo multilingue, j'ai eu besoin d'une telle fonction et j'ai obtenu ce que je souhaitais en modifiant légèrement les fonctions extraire_multi extraire_trad et extraire_multi de spip (en ajoutant un paramètre $langue_souhaitee).
voici ces fonctions. Peut-être y avait-il une autre solution, mais je n'avais pas trouvé.

il suffit d'appeler la fonction extension_multilingue_extraire_multi_lang ($letexte, $langue_souhaitee)

Arnault

function extension_multilingue_multi_trad_lang ($trads, $langue_souhaitee) {
     
    if (isset($trads[$langue_souhaitee])) {
        return $trads[$langue_souhaitee];

    } // cas des langues xx_yy
    else if (ereg('^([a-z]+)_', $spip_lang, $regs) AND isset($trads[$regs[1]])) {
        return $trads[$regs[1]];
    } // sinon, renvoyer la premiere du tableau
    // remarque : on pourrait aussi appeler un service de traduction externe
    // ou permettre de choisir une langue "plus proche",
    // par exemple le francais pour l'espagnol, l'anglais pour l'allemand, etc.
    else /*return array_shift($trads);*/ return "";
}

function extension_multilingue_extraire_trad_lang ($bloc, $langue_souhaitee) {
    $lang = '';
// ce reg fait planter l'analyse multi s'il y a de l'{italique} dans le champ
// while (preg_match("/^(.*?)[{\([a-z_]+)[}\]]/siS", $bloc, $regs)) {
    while (preg_match("/^(.*?)[\([a-z_]+)[\]]/siS", $bloc, $regs)) {
        $texte = trim($regs[1]);
        if ($texte OR $lang)
            $trads[$lang] = $texte;
        $bloc = substr($bloc, strlen($regs[0]));
        $lang = $regs[2];
    }
    $trads[$lang] = $bloc;

    // faire la traduction avec ces donnees
    return extension_multilingue_multi_trad_lang($trads, $langue_souhaitee);
}

// repere les blocs multi dans un texte et extrait le bon

function extension_multilingue_extraire_multi_lang ($letexte, $langue_souhaitee) {
    if (strpos($letexte, '<multi>') === false) return $letexte; // perf
    if (preg_match_all("@<multi>(.*?)</multi>@sS", $letexte, $regs, PREG_SET_ORDER))
        foreach ($regs as $reg)
            $letexte = str_replace($reg[0], extension_multilingue_extraire_trad_lang($reg[1], $langue_souhaitee), $letexte);
    return $letexte;
}

Ok merci ça marche. L'astuce est de faire précéder la fonction extraire multi par la fonction lang_select($lang) qui te créera le contexte pour la suite.

Bonne soirée

Le 12 sept. 07 à 17:28, Arnault Pachot a écrit :

Michaël Thanry a écrit :

Bonjour,

Quelqu'un peut-il me dire quelle est la fonction à utiliser pour traduire un bloc multilingue <multi> ... </multi> dans le cadre du développement d'un plugin ?

Je suis également intéressé par une explication des paramètres.

Cordialement,

Michael
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP

si je comprends bien la question : une fonction php pour extraire la langue choisie dans un bloc multi ?

pour le développement de la barre typo multilingue, j'ai eu besoin d'une telle fonction et j'ai obtenu ce que je souhaitais en modifiant légèrement les fonctions extraire_multi extraire_trad et extraire_multi de spip (en ajoutant un paramètre $langue_souhaitee).
voici ces fonctions. Peut-être y avait-il une autre solution, mais je n'avais pas trouvé.

il suffit d'appeler la fonction extension_multilingue_extraire_multi_lang ($letexte, $langue_souhaitee)

Arnault

function extension_multilingue_multi_trad_lang ($trads, $langue_souhaitee) {

   if (isset($trads[$langue_souhaitee])) {
       return $trads[$langue_souhaitee];

   } // cas des langues xx_yy
   else if (ereg('^([a-z]+)_', $spip_lang, $regs) AND isset($trads[$regs[1]])) {
       return $trads[$regs[1]];
   } // sinon, renvoyer la premiere du tableau
   // remarque : on pourrait aussi appeler un service de traduction externe
   // ou permettre de choisir une langue "plus proche",
   // par exemple le francais pour l'espagnol, l'anglais pour l'allemand, etc.
   else /*return array_shift($trads);*/ return "";
}

function extension_multilingue_extraire_trad_lang ($bloc, $langue_souhaitee) {
   $lang = '';
// ce reg fait planter l'analyse multi s'il y a de l'{italique} dans le champ
// while (preg_match("/^(.*?)[{\([a-z_]+)[}\]]/siS", $bloc, $regs)) {
   while (preg_match("/^(.*?)[\([a-z_]+)[\]]/siS", $bloc, $regs)) {
       $texte = trim($regs[1]);
       if ($texte OR $lang)
           $trads[$lang] = $texte;
       $bloc = substr($bloc, strlen($regs[0]));
       $lang = $regs[2];
   }
   $trads[$lang] = $bloc;

   // faire la traduction avec ces donnees
   return extension_multilingue_multi_trad_lang($trads, $langue_souhaitee);
}

// repere les blocs multi dans un texte et extrait le bon

function extension_multilingue_extraire_multi_lang ($letexte, $langue_souhaitee) {
   if (strpos($letexte, '<multi>') === false) return $letexte; // perf
   if (preg_match_all("@<multi>(.*?)</multi>@sS", $letexte, $regs, PREG_SET_ORDER))
       foreach ($regs as $reg)
           $letexte = str_replace($reg[0], extension_multilingue_extraire_trad_lang($reg[1], $langue_souhaitee), $letexte);
   return $letexte;
}