la fonction PHP qui traduit les multis :
8<---------------------------------------------
/**
* @param String $untexte
* @return String un texte propre dans la langue courante
*/
function ma_typo($untexte) {
$tas = array();
if (preg_match("/<multi>(.*)<\/multi>/U",$untexte,$tas)) {
preg_match_all("/\[(\w\w)\](.*)\[|$/U", $tas[1], $_m);
$pos = array_search($GLOBALS['lang'] , $_m[1]);
return $_m[2][$pos];
} else {
return $tas[1];
}
}
8<---------------------------------------------
Pour info, preg supporte la fonction ungreedy (pas gourmand en français) qui simplifie beaucoup les expressions regulière, et le code de Spip semble l'ignorer.
Par exemple, pour récuperer ce qu'il y a dans la balise multi, Spip utiliserait :
<multi>([^<]*)</multi>|
Alors qu'il est plus d'utiliser :
<multi>(.*)</multi>|U
Pour les explications, php.net fournit un excellent RTFM
M.