diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 5caaeac5954d34d29d81add47ec14fa7c5caa7ad..6fea50bcb758e5f0e3baa899d415a70b75b6cce4 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -422,7 +422,7 @@ function test_plugin_actif($plugin){
 // Traduction des textes de SPIP
 //
 // http://doc.spip.org/@_T
-function _T($texte, $args=array()) {
+function _T($texte, $args=array(), $style='') {
 
 	static $traduire=false ;
 
@@ -438,17 +438,19 @@ function _T($texte, $args=array()) {
 			 (($n = strpos($texte,':')) === false ? $texte :
 				substr($texte, $n+1)));
 
-	return _L($text, $args, true);
+	return _L($text, $args, $style);
 
 }
 
 // Remplacer les variables @....@ par leur valeur dans une chaine de langue.
 // Aussi appelee quand une chaine n'est pas encore dans les fichiers de langue
 // http://doc.spip.org/@_L
-function _L($text, $args=array(), $nostyle=false) {
+function _L($text, $args=array(), $style=NULL) {
 
 	if (is_array($args)) {
 		foreach ($args as $name => $value) {
+			if ($style)
+				$value = "<span style='$style'>$value</span>";
 			$text = str_replace ("@$name@", $value, $text, $n);
 			if ($n) unset($args[$name]);
 		}
@@ -457,7 +459,7 @@ function _L($text, $args=array(), $nostyle=false) {
 		spip_log("$text:  variables inutilisées " . join(', ', $args));
 	}
 
-	if ($GLOBALS['test_i18n'] And (!$nostyle OR $args))
+	if ($GLOBALS['test_i18n'] And ($nostyle===NULL OR $args))
 		return "<span style='color:red;'>$text</span>";
 	else
 		return $text;
diff --git a/ecrire/lang/spip_fr.php b/ecrire/lang/spip_fr.php
index cb59feb6794b996455c8ee59ce5b9ec18739ee21..73ba324ad7730f0f2372f1096dbb45e77972e005 100644
--- a/ecrire/lang/spip_fr.php
+++ b/ecrire/lang/spip_fr.php
@@ -744,7 +744,7 @@ et vous reconnecter au site.
 
 // Z
 'zbug_balise_b_aval' => '&nbsp;: balise B en aval',
-'zbug_balise_inexistante' => 'erreur @from@: la balise #@balise@ n\'existe pas',
+'zbug_balise_inexistante' => 'erreur @from@: la balise @balise@ n\'existe pas',
 'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@',
 'zbug_boucle' => 'boucle',
 'zbug_boucle_recursive_undef' => 'Boucle r&eacute;cursive non d&eacute;finie&nbsp;: @nom@',
@@ -756,12 +756,12 @@ et vous reconnecter au site.
 'zbug_distant_interdit' => 'Externe interdit', # Contexte : une base de donn&eacute;es "externe", pas g&eacute;r&eacute;e par SPIP, mais que SPIP 1.8 sait utiliser dans ses boucles -- seul probl&egrave;mes certaines manipulations sont interdites sur ces bases-l&agrave;.
 'zbug_doublon_table_sans_cle_primaire' => 'Doublons sur une table sans clef primaire atomique',
 'zbug_doublon_table_sans_index' => 'Doublons sur une table sans index',
-'zbug_erreur_boucle_double' => 'Double d&eacute;finition de la boucle <b>@id@<b>',
-'zbug_erreur_boucle_fermant' => 'Boucle <b>@id@</b> non ferm&eacute;e',
-'zbug_erreur_boucle_syntaxe' => 'Syntaxe de la boucle <b>@id@</b> incorrecte',
+'zbug_erreur_boucle_double' => 'Double d&eacute;finition de la boucle @id@',
+'zbug_erreur_boucle_fermant' => 'Boucle @id@ non ferm&eacute;e',
+'zbug_erreur_boucle_syntaxe' => 'Syntaxe de la boucle @id@ incorrecte',
 'zbug_erreur_compilation' => 'Erreur de compilation',
 'zbug_erreur_execution_page' => 'Erreur d\'ex&eacute;cution',
-'zbug_erreur_filtre' => 'Filtre &laquo; <b>@filtre@</b> &raquo; non d&eacute;fini',
+'zbug_erreur_filtre' => 'Filtre @filtre@ non d&eacute;fini',
 'zbug_erreur_meme_parent' => 'Le crit&egrave;re {meme_parent} ne s\'applique qu\'aux boucles (FORUMS) ou (RUBRIQUES)',
 'zbug_erreur_squelette' => 'Erreur(s) dans le squelette',
 'zbug_hors_compilation' => 'Hors Compilation',
diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index 747faabb60762051bebb111c60e459009a6cfd11..45dd90aa8e8d9b5a0e2463e78a47eb330491b108 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -197,7 +197,7 @@ function balise_RECHERCHE_dist($p) {
 function balise_COMPTEUR_BOUCLE_dist($p) {
 	$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
 	if ($b === '') {
-		$msg = _T('zbug_champ_hors_boucle',
+		$msg = array('zbug_champ_hors_boucle',
 				array('champ' => '#COMPTEUR_BOUCLE')
 			  );
 		erreur_squelette($msg, $p);
@@ -213,7 +213,7 @@ function balise_COMPTEUR_BOUCLE_dist($p) {
 function balise_TOTAL_BOUCLE_dist($p) {
 	$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
 	if ($b === '' || !isset($p->boucles[$b])) {
-		$msg = _T('zbug_champ_hors_boucle',
+		$msg = array('zbug_champ_hors_boucle',
 				array('champ' => "#$b" . 'TOTAL_BOUCLE')
 			  );
 		erreur_squelette($msg, $p);
@@ -277,7 +277,7 @@ function calculer_balise_expose($p, $on, $off)
 	$connect = sql_quote($p->boucles[$b]->sql_serveur);
 
 	if (!$key) {
-		$msg = _T('zbug_champ_hors_boucle', array('champ' => '#EXPOSER'));
+		$msg = array('zbug_champ_hors_boucle', array('champ' => '#EXPOSER'));
 		erreur_squelette($msg, $p);
 	}
 
@@ -491,7 +491,7 @@ function balise_PAGINATION_dist($p, $liste='true') {
 
 	// s'il n'y a pas de nom de boucle, on ne peut pas paginer
 	if ($b === '') {
-		$msg = _T('zbug_champ_hors_boucle',
+		$msg = array('zbug_champ_hors_boucle',
 				array('champ' => '#PAGINATION')
 			  );
 		erreur_squelette($msg, $p);
@@ -502,7 +502,7 @@ function balise_PAGINATION_dist($p, $liste='true') {
 	// dans un boucle recursive ou qu'on a oublie le critere {pagination}
 	if (!$p->boucles[$b]->total_parties) {
 		if (!$p->boucles[$b]->table_optionnelle) {
-			$msg = _T('zbug_pagination_sans_critere',
+			$msg = array('zbug_pagination_sans_critere',
 					array('champ' => '#PAGINATION')
 				  );
 			erreur_squelette($msg, $p);
@@ -553,7 +553,7 @@ function balise_ANCRE_PAGINATION_dist($p) {
 function balise_GRAND_TOTAL_dist($p) {
 	$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
 	if ($b === '' || !isset($p->boucles[$b])) {
-		$msg =	_T('zbug_champ_hors_boucle',
+		$msg = array('zbug_champ_hors_boucle',
 				array('champ' => "#$b" . 'TOTAL_BOUCLE')
 			   );
 		erreur_squelette($msg, $p);
@@ -585,7 +585,7 @@ function balise_SELF_dist($p) {
 function balise_CHEMIN_dist($p) {
 	$arg = interprete_argument_balise(1,$p);
 	if (!$arg) {
-		$msg =  _T('zbug_balise_sans_argument',	array('balise' => ' CHEMIN'));
+		$msg = array('zbug_balise_sans_argument',	array('balise' => ' CHEMIN'));
 		erreur_squelette($msg, $p);
 	} else 
 	  $p->code = 'find_in_path(' . $arg .')';
@@ -597,7 +597,7 @@ function balise_CHEMIN_dist($p) {
 function balise_CHEMIN_IMAGE_dist($p) {
 	$arg = interprete_argument_balise(1,$p);
 	if (!$arg) {
-		$msg = _T('zbug_balise_sans_argument', array('balise' => ' CHEMIN_IMAGE'));
+		$msg = array('zbug_balise_sans_argument', array('balise' => ' CHEMIN_IMAGE'));
 		erreur_squelette($msg, $p);
 	} else $p->code = 'chemin_image(' . $arg .')';
 
@@ -727,7 +727,7 @@ function balise_EVAL_dist($p) {
 		else
 			$p->code = "eval('return '.$php.';')";
 	} else {
-		$msg = _T('zbug_balise_sans_argument', array('balise' => ' EVAL'));
+		$msg = array('zbug_balise_sans_argument', array('balise' => ' EVAL'));
 		erreur_squelette($msg, $p);
 	}
 
@@ -927,7 +927,7 @@ function balise_INCLURE_dist($p) {
 		$p->code = "recuperer_fond('', $_l, $_options)";
 
 	} elseif (!isset($_contexte[1])) {
-			$msg = _T('zbug_balise_sans_argument', array('balise' => ' INCLURE'));
+			$msg = array('zbug_balise_sans_argument', array('balise' => ' INCLURE'));
 			erreur_squelette($msg, $p);
 	} else 		$p->code = '(($c = find_in_path(' . $_contexte[1] . ')) ? spip_file_get_contents($c) : "")';
 
@@ -942,7 +942,7 @@ function balise_MODELE_dist($p) {
 	$_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false);
 
 	if (!isset($_contexte[1])) {
-		$msg = _T('zbug_balise_sans_argument', array('balise' => ' MODELE'));
+		$msg = array('zbug_balise_sans_argument', array('balise' => ' MODELE'));
 		erreur_squelette($msg, $p);
 	} else {
 		$nom = $_contexte[1];
@@ -1126,7 +1126,7 @@ function balise_FOREACH_dist($p) {
 	}
 	//On a pas trouve la balise correspondant au tableau a traiter
 	else {
-		$msg = _T('zbug_balise_inexistante',array('from'=>'#FOREACH','balise'=>$_tableau));
+		$msg = array('zbug_balise_inexistante',array('from'=>'#FOREACH','balise'=>$_tableau));
 		erreur_squelette($msg, $p);
 	}
 	return $p;
diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index ad66acd979dd0ae6b53a9d40d6ba3247746f8c26..4f580e6f5ac2f279367c91149edcd3b9b19a50e4 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -888,7 +888,7 @@ function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $co
 				// ne pas renvoyer d'erreur si la table est optionnelle
 				// declare par ? avant ) dans <BOUCLE_A(table ?)>
 				if (!$boucles[$id]->table_optionnelle) {
-					$msg = _T('zbug_table_inconnue',
+					$msg = array('zbug_table_inconnue',
 							array('table' => $x));
 					erreur_squelette($msg, $boucles[$id]);
 				}
@@ -903,7 +903,7 @@ function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $co
 			$boucles[$id]->descr = &$descr;
 			$rec = &$boucles[$boucle->param[0]];
 			if (!$rec) {
-				$msg = _T('zbug_boucle_recursive_undef',
+				$msg = array('zbug_boucle_recursive_undef',
 					array('nom' => $boucle->param[0]));
 				return erreur_squelette($msg, $boucle);
 			} else {
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 373f6589afef4231b702c78d221e9d0eb2942410..d9f540df07a7ee79c0c621f89251f087e06b988e 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -28,7 +28,7 @@ function critere_racine_dist($idb, &$boucles, $crit) {
 		'id_parent';
 
 	if ($not)
-		return array(_T('zbug_critere_inconnu', array('critere' => $not . $crit->op)));
+		return (array('zbug_critere_inconnu', array('critere' => $not . $crit->op)));
 
 	$boucle->where[]= array("'='", "'$boucle->id_table." . "$id_parent'", 0);
 }
@@ -42,7 +42,7 @@ function critere_exclus_dist($idb, &$boucles, $crit) {
 	$id = $boucle->primary;
 
 	if ($not OR !$id)
-		return array(_T('zbug_critere_inconnu', array('critere' => $not . $crit->op)));
+		return (array('zbug_critere_inconnu', array('critere' => $not . $crit->op)));
 	$arg = kwote(calculer_argument_precedent($idb, $id, $boucles));
 	$boucle->where[]= array("'!='", "'$boucle->id_table." . "$id'", $arg);
 }
@@ -56,7 +56,7 @@ function critere_doublons_dist($idb, &$boucles, $crit) {
 	$primary = $boucle->primary;
 
 	if (!$primary OR strpos($primary,',')) {
-		return array(_T('zbug_doublon_sur_table_sans_cle_primaire'));
+		return (array('zbug_doublon_sur_table_sans_cle_primaire'));
 	}
 
 	$not = ($crit->not ? '' : 'NOT');
@@ -258,7 +258,7 @@ function critere_meme_parent_dist($idb, &$boucles, $crit) {
 	}
 	// le cas FORUMS est gere dans le plugin forum, dans la fonction critere_FORUMS_meme_parent_dist()
  	else { 
-		return array(_T('zbug_critere_inconnu', array('critere' =>  $crit->op . ' ' . $boucle->type_requete)));
+		return (array('zbug_critere_inconnu', array('critere' =>  $crit->op . ' ' . $boucle->type_requete)));
 	}
 }
 
@@ -325,7 +325,7 @@ function critere_fusion_dist($idb,&$boucles, $crit) {
 		if (!in_array($t, $boucles[$idb]->select))
 		    $boucles[$idb]->select[] = $t;
 	} else 
-		return array(_T('zbug_critere_inconnu', array('critere' => $crit->op . ' ?')));
+		return (array('zbug_critere_inconnu', array('critere' => $crit->op . ' ?')));
 }
 
 // c'est la commande SQL "COLLATE"
@@ -340,7 +340,7 @@ function critere_collecte_dist($idb,&$boucles, $crit) {
     if ($n && (strpos($boucle->order[$n-1],'COLLATE')===false))
     	$boucle->order[$n-1] .= " . " . $boucle->modificateur['collate'];
 	} else
-		return array(_T('zbug_critere_inconnu', array('critere' => $crit->op . " $n")));
+		return (array('zbug_critere_inconnu', array('critere' => $crit->op . " $n")));
 }
 
 // http://doc.spip.org/@calculer_critere_arg_dynamique
@@ -405,7 +405,7 @@ function critere_parinverse($idb, &$boucles, $crit, $sens='') {
 		  $order = "'$as'";
 	      } else {
 		if (!preg_match(",^" . CHAMP_SQL_PLUS_FONC . '$,is', $par, $match)) {
-			return array(_T('zbug_critere_inconnu', array('critere' => $crit->op . " $par")));
+			return (array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")));
 		} else {
 		if (count($match)>2) { $par = substr($match[2],1,-1); $fct = $match[1]; }
 	// par hasard
@@ -419,7 +419,7 @@ function critere_parinverse($idb, &$boucles, $crit, $sens='') {
 			list($table, $champ) =  $exceptions_des_jointures[$par];
 			$order = critere_par_joint($table, $champ, $boucle, $idb);
 			if (!$order)
-				return array(_T('zbug_critere_inconnu', array('critere' => $crit->op . " $par")));
+				return (array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")));
 		}
 		else if ($par == 'date'
 		AND isset($GLOBALS['table_date'][$boucle->type_requete])) {
@@ -435,7 +435,7 @@ function critere_parinverse($idb, &$boucles, $crit, $sens='') {
 				$t = array_search(@$t[0], $boucle->from);
 			}
 			if (!$t) {
-				return array(_T('zbug_critere_inconnu', array('critere' => $crit->op . " $par")));
+				return (array('zbug_critere_inconnu', array('critere' => $crit->op . " $par")));
 			} else 	$order = "'" . $t . '.' . $r[2] . "'";
 		} else {
 			$desc = $boucle->show;
@@ -511,7 +511,7 @@ function critere_agenda_dist($idb, &$boucles, $crit)
 	$params = $crit->param;
 
 	if (count($params) < 1)
-		return array(_T('zbug_critere_inconnu', array('critere' => $crit->op . " ?")));
+		return (array('zbug_critere_inconnu', array('critere' => $crit->op . " ?")));
 
 	$parent = $boucles[$idb]->id_parent;
 
@@ -670,7 +670,7 @@ function critere_IN_dist ($idb, &$boucles, $crit)
 {
 	$r = calculer_critere_infixe($idb, $boucles, $crit);
 	if (!$r) {
-		return array(_T('zbug_critere_inconnu', array('critere' => $crit->op . " ?")));
+		return (array('zbug_critere_inconnu', array('critere' => $crit->op . " ?")));
 	}
 	list($arg, $op, $val, $col, $where_complement) = $r;
 
@@ -744,7 +744,7 @@ function calculer_critere_DEFAUT_dist($idb, &$boucles, $crit)
 	$r = calculer_critere_infixe($idb, $boucles, $crit);
 
 	if (!$r) {
-		return array(_T('zbug_critere_inconnu', array('critere' => $crit->op )));
+		return (array('zbug_critere_inconnu', array('critere' => $crit->op )));
 	} else calculer_critere_DEFAUT_args($idb, $boucles, $crit, $r);
 }
 
diff --git a/ecrire/public/debusquer.php b/ecrire/public/debusquer.php
index 034cef9b65e672d9549e44889fd999659ef201af..f4ee1e10c2adc3a8ac0c935ad9034213421c3417 100644
--- a/ecrire/public/debusquer.php
+++ b/ecrire/public/debusquer.php
@@ -50,6 +50,8 @@ function public_debusquer_dist($message='', $lieu='', $quoi='') {
 		$quoi = $quoi
 		? debusquer_requete($message, $lieu, $quoi)
 		: array($message, $lieu);
+		if (is_array($quoi[0]))
+		  $quoi[0] = _T($quoi[0][0], $quoi[0][1], 'font-weight: bold');
 		$tableau_des_erreurs[] = $quoi;
 		spip_log("Debug: " . $quoi[0] . " (" . $GLOBALS['fond'] .")" );
 		$GLOBALS['bouton_admin_debug'] = true;
diff --git a/ecrire/public/phraser_html.php b/ecrire/public/phraser_html.php
index 9340dff019ed7a5fbb7eab535b91b33484ef733c..831c1481d7925ab286b4de27c5c88e13e0161676 100644
--- a/ecrire/public/phraser_html.php
+++ b/ecrire/public/phraser_html.php
@@ -226,7 +226,7 @@ function phraser_arg(&$texte, $sep, $result, &$pointeur_champ) {
       if (($suite && ($suite[0] != '{')) || ($fonc  && $fonc[0] == '/')) { 
 	// si pas d'argument, alors il faut une fonction ou un double |
 	if (!$match[1]) {
-		$msg = _T('zbug_erreur_filtre', array('filtre' => $texte));
+		$msg = array('zbug_erreur_filtre', array('filtre' => $texte));
 		erreur_squelette($msg, $pointeur_champ);
 		$texte = '';
 	} else 	$texte = $suite;
@@ -246,7 +246,7 @@ function phraser_arg(&$texte, $sep, $result, &$pointeur_champ) {
 		  preg_match("/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms", $args, $regs);
 		  if (!strlen($regs[2]))
 		    {
-			$msg = _T('zbug_erreur_filtre', array('filtre' => $args));
+			$msg = array('zbug_erreur_filtre', array('filtre' => $args));
 			erreur_squelette($msg, $pointeur_champ);
 			$champ->apres = $champ->avant = $args = "";
 			break;
@@ -465,7 +465,7 @@ function phraser_criteres($params, &$result) {
 		    // cas 1 seul arg ne commencant pas par du texte brut: 
 		    // erreur ou critere infixe "/"
 		    if (($v[1][1]->type != 'texte') || (trim($v[1][1]->texte) !='/')) {
-			$msg = _T('zbug_critere_inconnu', 
+			$msg = array('zbug_critere_inconnu', 
 					array('critere' => $var->nom_champ));
 			erreur_squelette($msg, $result);
 		    } else {
@@ -540,7 +540,7 @@ function phraser_criteres($params, &$result) {
 			    $crit->cond = $m[5];
 			  }
 			  else {
-			    $msg = _T('zbug_critere_inconnu', 
+			    $msg = array('zbug_critere_inconnu', 
 					array('critere' => $param));
 			    erreur_squelette($msg, $result);
 			  }
@@ -613,7 +613,7 @@ function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne=
 				       $k - strlen(BALISE_PRE_BOUCLE));
 
 		  if (!preg_match(",".BALISE_BOUCLE . $id_boucle . "[[:space:]]*\(,", $milieu, $r)) {
-			$msg = _T('zbug_erreur_boucle_syntaxe', array('id' => $id_boucle));
+			$msg = array('zbug_erreur_boucle_syntaxe', array('id' => $id_boucle));
 			erreur_squelette($msg, $result);
 		  }
 		  $pos_boucle = $n;
@@ -655,7 +655,7 @@ function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne=
 			$s = BALISE_FIN_BOUCLE . $id_boucle . ">";
 			$p = strpos($milieu, $s);
 			if ($p === false) {
-				$msg = _T('zbug_erreur_boucle_fermant',
+				$msg = array('zbug_erreur_boucle_fermant',
 					array('id' => $id_boucle));
 				erreur_squelette($msg, $result);
 			}
@@ -720,7 +720,7 @@ function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne=
 		// apres analyse des sous-parties (pas avant).
 		
 		if (isset($boucles[$id_boucle])) {
-			$msg = _T('zbug_erreur_boucle_double',
+			$msg = array('zbug_erreur_boucle_double',
 				 	array('id'=>$id_boucle));
 			erreur_squelette($msg, $result);
 		} else
diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index 8a84cb2c7aab4b6782d25283d9eaa539ecb83eb0..49b4dc4fa77311f4a5e701a241697b07dc06ee60 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -464,7 +464,7 @@ function compose_filtres(&$p, $code) {
 					// le filtre n'existe pas,
 					// on le notifie
 					else {
-						erreur_squelette(_T('zbug_erreur_filtre', array('filtre'=>  texte_script($fonc))), $p);
+						erreur_squelette(array('zbug_erreur_filtre', array('filtre'=>  texte_script($fonc))), $p);
 					}
 
 			}
diff --git a/ecrire/public/styliser.php b/ecrire/public/styliser.php
index 1dbef1105c04b999219a2e2fc07345545b20d45b..2a31345c38cb3f97416233f29a53aa18b084f63f 100644
--- a/ecrire/public/styliser.php
+++ b/ecrire/public/styliser.php
@@ -49,7 +49,7 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='', $ext='htm
 
 	// pas de squelette : erreur !
 	if (!$squelette) {
-		erreur_squelette(_T('info_erreur_squelette2',
+		erreur_squelette(array('info_erreur_squelette2',
 			array('fichier'=>"'$fond.$ext'")),
 			$GLOBALS['dossier_squelettes']);
 		// provoquer 404