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;
}