From a0909df0636532116144aa16880605306999c787 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Thu, 17 Aug 2006 14:02:16 +0000
Subject: [PATCH] Modification importante des INCLURE : le parametre {lang} est
 desormais systematiquement passe (on peut avoir l'ancien comportement en
 indiquant {lang=#CONFIG{langue_site}} ); Ce nouveau fonctionnement permet de
 faire des modeles beaucoup plus legers, et j'ai corrige au passage le bug
 #470 -- j'en ai surement ajoute d'autres

---
 dist/article.html            |  8 +++---
 dist/auteur.html             |  8 +++---
 dist/breve.html              |  8 +++---
 dist/forum.html              |  8 +++---
 dist/mot.html                |  8 +++---
 dist/plan.html               |  8 +++---
 dist/recherche.html          |  8 +++---
 dist/rubrique.html           |  8 +++---
 dist/site.html               |  8 +++---
 dist/sommaire.html           |  8 +++---
 ecrire/inc/lang.php          | 24 +++--------------
 ecrire/inc/texte.php         | 25 +++++++++++------
 ecrire/inc/utils.php         | 20 ++++++++++++++
 ecrire/inc_version.php       |  4 +--
 ecrire/public/assembler.php  | 52 +++++++++++++++++-------------------
 ecrire/public/compiler.php   | 19 ++++++++++---
 ecrire/public/references.php |  2 +-
 17 files changed, 124 insertions(+), 102 deletions(-)

diff --git a/dist/article.html b/dist/article.html
index 6220cc08f3..0a9a904c69 100644
--- a/dist/article.html
+++ b/dist/article.html
@@ -4,14 +4,14 @@
 <head>
 	<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
 	[<meta name="description" content="(#INTRODUCTION|couper{150}|textebrut)" />]
-	<INCLURE{fond=inc-head}{lang}>
+	<INCLURE{fond=inc-head}>
 </head>
 
 <body class="page_article">
 <div id="page">
 
 	[(#REM) Entete de la page + titre du site ]
-	<INCLURE{fond=inc-entete}{lang}>
+	<INCLURE{fond=inc-entete}>
 
 	[(#REM) Fil d'Ariane ]
 	<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><BOUCLE_ariane(HIERARCHIE){id_article}> &gt; <a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a></BOUCLE_ariane>[ &gt; (#TITRE|couper{80})]</div>
@@ -101,7 +101,7 @@
 			<h1 class="invisible"><:navigation:></h1>
 
 			[(#REM) Menu de navigation par rubriques ]
-			<INCLURE{fond=inc-rubriques}{lang}{id_rubrique}>
+			<INCLURE{fond=inc-rubriques}{id_rubrique}>
 
 			[(#REM) Articles dans la meme rubrique ]
 			<B_articles_rubrique>
@@ -131,7 +131,7 @@
 	</div><!-- fin conteneur -->
 
 	[(#REM) Pied de page ]
-	<INCLURE{fond=inc-pied}{lang}>
+	<INCLURE{fond=inc-pied}>
 
 </div><!-- fin page -->
 </body>
diff --git a/dist/auteur.html b/dist/auteur.html
index 936bb27660..43fa4f768e 100644
--- a/dist/auteur.html
+++ b/dist/auteur.html
@@ -5,7 +5,7 @@
 <head>
 	<title>[(#NOM|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
 	[<meta name="description" content="(#BIO|couper{150}|textebrut)" />]
-	<INCLURE{fond=inc-head}{lang}>
+	<INCLURE{fond=inc-head}>
 
 </head>
 
@@ -13,7 +13,7 @@
 <div id="page">
 
 	[(#REM) Entete de la page + titre du site ]
-	<INCLURE{fond=inc-entete}{lang}>
+	<INCLURE{fond=inc-entete}>
 
 	[(#REM) Fil d'Ariane ]
 	<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a> &gt; <:info_auteurs:>[ &gt; (#NOM|couper{80})]</div>
@@ -68,7 +68,7 @@
 		<h1 class="invisible"><:navigation:></h1>
 
 		[(#REM) Menu de navigation par rubriques ]
-		<INCLURE{fond=inc-rubriques}{lang}>
+		<INCLURE{fond=inc-rubriques}>
 
 		[(#REM) Autres auteurs ]
 		<B_auteurs>
@@ -89,7 +89,7 @@
 	</div><!-- fin conteneur -->
 
 	[(#REM) Pied de page ]
-	<INCLURE{fond=inc-pied}{lang}>
+	<INCLURE{fond=inc-pied}>
 
 </div><!-- fin page -->
 </body>
diff --git a/dist/breve.html b/dist/breve.html
index 847d97e754..d02f475a60 100644
--- a/dist/breve.html
+++ b/dist/breve.html
@@ -5,7 +5,7 @@
 <head>
 	<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
 	[<meta name="description" content="(#INTRODUCTION|couper{150}|textebrut)" />]
-	<INCLURE{fond=inc-head}{lang}>
+	<INCLURE{fond=inc-head}>
 
 	[(#REM) Lien vers le flux RSS des breves ]
 	<link rel="alternate" type="application/rss+xml" title="<:dernieres_breves:>" href="#URL_PAGE{backend-breves}" />
@@ -16,7 +16,7 @@
 <div id="page">
 
 	[(#REM) Entete de la page + titre du site ]
-	<INCLURE{fond=inc-entete}{lang}>
+	<INCLURE{fond=inc-entete}>
 
 	[(#REM) Fil d'Ariane ]
 	<div id="hierarchie"><a href="#URL_SITE_SPIP/" ><:accueil_site:></a><BOUCLE_ariane(RUBRIQUES){id_rubrique}> &gt; <a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a></BOUCLE_ariane>[ &gt; (#TITRE|couper{80})]</div>
@@ -50,7 +50,7 @@
 			<h1 class="invisible"><:navigation:></h1>
 
 			[(#REM) Menu de navigation par rubriques ]
-			<INCLURE{fond=inc-rubriques}{lang}{id_rubrique}>
+			<INCLURE{fond=inc-rubriques}{id_rubrique}>
 
 			[(#REM) Breves dans la meme rubrique ]
 			<B_breves>
@@ -81,7 +81,7 @@
 	</div><!-- fin conteneur -->
 
 	[(#REM) Pied de page ]
-	<INCLURE{fond=inc-pied}{lang}>
+	<INCLURE{fond=inc-pied}>
 
 </div><!-- fin page -->
 </body>
diff --git a/dist/forum.html b/dist/forum.html
index 1c31ccb1c1..996a39048d 100644
--- a/dist/forum.html
+++ b/dist/forum.html
@@ -4,7 +4,7 @@
 <html dir="#LANG_DIR" lang="#LANG">
 <head>
 	<title><:poster_message:> - [(#NOM_SITE_SPIP|textebrut)]</title>
-	<INCLURE{fond=inc-head}{lang}>
+	<INCLURE{fond=inc-head}>
 
 	<meta name="robots" content="none" />
 </head>
@@ -13,7 +13,7 @@
 <div id="page">
 
 	[(#REM) Entete de la page + titre du site ]
-	<INCLURE{fond=inc-entete}{lang}>
+	<INCLURE{fond=inc-entete}>
 
 	[(#REM) Fil d'Ariane ]
 	<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a>
@@ -121,14 +121,14 @@
 			<h1 class="invisible"><:navigation:></h1>
 
 			[(#REM) Menu de navigation par rubriques ]
-			<INCLURE{fond=inc-rubriques}{lang}>
+			<INCLURE{fond=inc-rubriques}>
 
 		</div><!-- fin navigation -->
 
 	</div><!-- fin conteneur -->
 
 	[(#REM) Pied de page ]
-	<INCLURE{fond=inc-pied}{lang}>
+	<INCLURE{fond=inc-pied}>
 
 </div><!-- fin page -->
 </body>
diff --git a/dist/mot.html b/dist/mot.html
index b456088a6a..310c6fa87b 100644
--- a/dist/mot.html
+++ b/dist/mot.html
@@ -5,7 +5,7 @@
 <head>
 	<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
 	[<meta name="description" content="(#DESCRIPTIF|couper{150}|textebrut)" />]
-	<INCLURE{fond=inc-head}{lang}>
+	<INCLURE{fond=inc-head}>
 
 	[(#REM) Lien vers le flux RSS du mot cle ]
 	<link rel="alternate" type="application/rss+xml" title="[(#TITRE|textebrut|texte_backend)]" href="[(#URL_PAGE{backend}|parametre_url{id_mot,#ID_MOT})]" />
@@ -15,7 +15,7 @@
 <div id="page">
 
 	[(#REM) Entete de la page + titre du site ]
-	<INCLURE{fond=inc-entete}{lang}>
+	<INCLURE{fond=inc-entete}>
 
 	[(#REM) Fil d'Ariane ]
 	<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a> &gt; <:mots_clefs:><BOUCLE_ariane(GROUPES_MOTS){id_groupe}> &gt; [(#TITRE|couper{80})]</BOUCLE_ariane>[ &gt; (#TITRE|couper{80})]</div>
@@ -116,7 +116,7 @@
 			<h1 class="invisible"><:navigation:></h1>
 
 			[(#REM) Menu de navigation par rubriques ]
-			<INCLURE{fond=inc-rubriques}{lang}>
+			<INCLURE{fond=inc-rubriques}>
 
 			[(#REM) Menu de navigation mots-cles : les autres mots cles du meme groupe ]
 			<B_mots_freres>
@@ -151,7 +151,7 @@
 	</div><!-- fin conteneur -->
 
 	[(#REM) Pied de page ]
-	<INCLURE{fond=inc-pied}{lang}>
+	<INCLURE{fond=inc-pied}>
 
 </div><!-- fin page -->
 </body>
diff --git a/dist/plan.html b/dist/plan.html
index aad2fe52fa..60135b73f7 100644
--- a/dist/plan.html
+++ b/dist/plan.html
@@ -4,7 +4,7 @@
 <head>
 	<title><:plan_site:> - [(#NOM_SITE_SPIP|textebrut)]</title>
 	[<meta name="description" content="(#DESCRIPTIF_SITE_SPIP|couper{150}|textebrut)" />]
-	<INCLURE{fond=inc-head}{lang}>
+	<INCLURE{fond=inc-head}>
 
 	<meta name="robots" content="none" />
 </head>
@@ -13,7 +13,7 @@
 <div id="page">
 
 	[(#REM) Entete de la page + titre du site ]
-	<INCLURE{fond=inc-entete}{lang}>
+	<INCLURE{fond=inc-entete}>
 
 	[(#REM) Fil d'Ariane ]
 	<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a> &gt; <:plan_site:></div>
@@ -103,14 +103,14 @@
 			<h1 class="invisible"><:navigation:></h1>
 
 			[(#REM) Menu de navigation par rubriques ]
-			<INCLURE{fond=inc-rubriques}{lang}>
+			<INCLURE{fond=inc-rubriques}>
 
 		</div><!-- fin navigation -->
 
 	</div><!-- fin conteneur -->
 
 	[(#REM) Pied de page ]
-	<INCLURE{fond=inc-pied}{lang}>
+	<INCLURE{fond=inc-pied}>
 
 </div><!-- fin page -->
 </body>
diff --git a/dist/recherche.html b/dist/recherche.html
index 5f3150fe42..ed601035eb 100644
--- a/dist/recherche.html
+++ b/dist/recherche.html
@@ -4,7 +4,7 @@
 <html dir="#LANG_DIR" lang="#LANG">
 <head>
 	<title><:resultats_recherche:> - [(#NOM_SITE_SPIP|textebrut)]</title>
-	<INCLURE{fond=inc-head}{lang}>
+	<INCLURE{fond=inc-head}>
 	<meta name="robots" content="none" />
 </head>
 
@@ -12,7 +12,7 @@
 <div id="page">
 
 	[(#REM) Entete de la page + titre du site ]
-	<INCLURE{fond=inc-entete}{lang}>
+	<INCLURE{fond=inc-entete}>
 
 	[(#REM) Fil d'Ariane ]
 	<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a> &gt; <:info_rechercher:>[ &gt; (#RECHERCHE)]</div>
@@ -131,14 +131,14 @@
 			<h1 class="invisible"><:navigation:></h1>
 
 			[(#REM) Menu de navigation par rubriques ]
-			<INCLURE{fond=inc-rubriques}{lang}>
+			<INCLURE{fond=inc-rubriques}>
 
 		</div><!-- fin navigation -->
 
 	</div><!-- fin conteneur -->
 	
 	[(#REM) Pied de page ]
-	<INCLURE{fond=inc-pied}{lang}>
+	<INCLURE{fond=inc-pied}>
 
 </div><!-- fin page -->
 </body>
diff --git a/dist/rubrique.html b/dist/rubrique.html
index 914a8492a2..c9f726a464 100644
--- a/dist/rubrique.html
+++ b/dist/rubrique.html
@@ -5,7 +5,7 @@
 <head>
 	<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
 	[<meta name="description" content="(#INTRODUCTION|couper{150}|textebrut)" />]
-	<INCLURE{fond=inc-head}{lang}>
+	<INCLURE{fond=inc-head}>
 
 	[(#REM) Lien vers le flux RSS de la rubrique ]
 	<link rel="alternate" type="application/rss+xml" title="<:syndiquer_rubrique:>" href="[(#URL_PAGE{backend}|parametre_url{id_rubrique,#ID_RUBRIQUE})]" />
@@ -15,7 +15,7 @@
 <div id="page">
 
 	[(#REM) Entete de la page + titre du site ]
-	<INCLURE{fond=inc-entete}{lang}>
+	<INCLURE{fond=inc-entete}>
 
 	[(#REM) Fil d'Ariane ]
 	<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><BOUCLE_ariane(HIERARCHIE){id_rubrique}> &gt; <a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a></BOUCLE_ariane>[ &gt; (#TITRE|couper{80})]</div>
@@ -153,7 +153,7 @@
 			<h1 class="invisible"><:navigation:></h1>
 
 			[(#REM) Menu de navigation par rubriques ]
-			<INCLURE{fond=inc-rubriques}{lang}{id_rubrique}>
+			<INCLURE{fond=inc-rubriques}{id_rubrique}>
 
 			[(#REM) Menu de navigation mots-cles ]
 			<B_mots>
@@ -172,7 +172,7 @@
 	</div><!-- fin conteneur -->
 
 	[(#REM) Pied de page ]
-	<INCLURE{fond=inc-pied}{lang}>
+	<INCLURE{fond=inc-pied}>
 
 </div><!-- fin page -->
 </body>
diff --git a/dist/site.html b/dist/site.html
index 39d193f2fb..fb8556eac1 100644
--- a/dist/site.html
+++ b/dist/site.html
@@ -6,7 +6,7 @@
 <head>
 	<title>[(#NOM_SITE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
 	[<meta name="description" content="(#DESCRIPTIF|couper{150}|textebrut)" />]
-	<INCLURE{fond=inc-head}{lang}>
+	<INCLURE{fond=inc-head}>
 	<meta name="robots" content="none" />
 </head>
 
@@ -14,7 +14,7 @@
 <div id="page">
 
 	[(#REM) Entete de la page + titre du site ]
-	<INCLURE{fond=inc-entete}{lang}>
+	<INCLURE{fond=inc-entete}>
 
 	[(#REM) Fil d'Ariane ]
 	<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><BOUCLE_ariane(HIERARCHIE){id_syndic}> &gt; <a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a></BOUCLE_ariane>[ &gt; (#NOM_SITE|couper{80})]</div>
@@ -62,7 +62,7 @@
 			<h1 class="invisible"><:navigation:></h1>
 
 			[(#REM) Menu de navigation par rubriques ]
-			<INCLURE{fond=inc-rubriques}{lang}{id_rubrique}>
+			<INCLURE{fond=inc-rubriques}{id_rubrique}>
 
 			[(#REM) Autres sites web ]
 			<B_sites>
@@ -95,7 +95,7 @@
 	</div><!-- fin conteneur -->
 
 	[(#REM) Pied de page ]
-	<INCLURE{fond=inc-pied}{lang}>
+	<INCLURE{fond=inc-pied}>
 
 </div><!-- fin page -->
 </body>
diff --git a/dist/sommaire.html b/dist/sommaire.html
index ded7ec1eef..3883bc56fc 100644
--- a/dist/sommaire.html
+++ b/dist/sommaire.html
@@ -4,14 +4,14 @@
 <head>
 	<title>[(#NOM_SITE_SPIP|textebrut)]</title>
 	[<meta name="description" content="(#DESCRIPTIF_SITE_SPIP|couper{150}|textebrut)" />]
-	<INCLURE{fond=inc-head}{lang}>
+	<INCLURE{fond=inc-head}>
 </head>
 
 <body class="page_sommaire">
 <div id="page">
 
 	[(#REM) Entete de la page + titre du site ]
-	<INCLURE{fond=inc-entete}{lang}>
+	<INCLURE{fond=inc-entete}>
 
 	[(#REM) Fil d'Ariane ]
 	<div id="hierarchie"><:accueil_site:></div>
@@ -116,7 +116,7 @@
 			<h1 class="invisible"><:navigation:></h1>
 
 			[(#REM) Menu de navigation par rubriques ]
-			<INCLURE{fond=inc-rubriques}{lang}>
+			<INCLURE{fond=inc-rubriques}>
 
 			[(#REM) Inscription au site ]
 			#FORMULAIRE_INSCRIPTION
@@ -126,7 +126,7 @@
 	</div><!-- fin conteneur -->
 
 	[(#REM) Pied de page ]
-	<INCLURE{fond=inc-pied}{lang}>
+	<INCLURE{fond=inc-pied}>
 
 </div><!-- fin page -->
 #SPIP_CRON
diff --git a/ecrire/inc/lang.php b/ecrire/inc/lang.php
index 8857416d7b..3d43b0f0b6 100644
--- a/ecrire/inc/lang.php
+++ b/ecrire/inc/lang.php
@@ -217,7 +217,7 @@ function lang_typo($lang) {
 // service pour que l'espace prive reflete la typo et la direction des objets affiches
 // http://doc.spip.org/@changer_typo
 function changer_typo($lang = '', $source = '') {
-	global $lang_typo, $lang_dir, $dir_lang;
+	global $lang_objet, $lang_dir, $dir_lang;
 
 	if (ereg("^(article|rubrique|breve|auteur)([0-9]+)", $source, $regs)) {
 		$r = spip_fetch_array(spip_query("SELECT lang FROM spip_".$regs[1]."s WHERE id_".$regs[1]."=".$regs[2]));
@@ -227,27 +227,11 @@ function changer_typo($lang = '', $source = '') {
 	if (!$lang)
 		$lang = $GLOBALS['meta']['langue_site'];
 
-	$lang_typo = lang_typo($lang);
+	$lang_objet = $lang;
 	$lang_dir = lang_dir($lang);
 	$dir_lang = " dir='$lang_dir'";
 }
 
-// selectionner une langue
-// http://doc.spip.org/@lang_select
-function lang_select ($lang='') {
-	global $pile_langues, $spip_lang;
-	array_push($pile_langues, $spip_lang);
-	changer_langue($lang);
-}
-
-// revenir a la langue precedente
-// http://doc.spip.org/@lang_dselect
-function lang_dselect ($rien='') {
-	global $pile_langues;
-	changer_langue(array_pop($pile_langues));
-}
-
-
 //
 // Afficher un menu de selection de langue
 // - 'var_lang_ecrire' = langue interface privee,
@@ -459,11 +443,11 @@ function repertoire_lang($module='spip', $lang='fr') {
 // http://doc.spip.org/@init_langues
 function init_langues() {
 	global $all_langs, $langue_site;
-	global $pile_langues, $lang_typo, $lang_dir;
+	global $pile_langues, $lang_objet, $lang_dir;
 
 	$all_langs = $GLOBALS['meta']['langues_proposees'];
 	$pile_langues = array();
-	$lang_typo = '';
+	$lang_objet = '';
 	$lang_dir = '';
 
 	$toutes_langs = Array();
diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php
index 638cfcf61f..99a2b7b3a6 100644
--- a/ecrire/inc/texte.php
+++ b/ecrire/inc/texte.php
@@ -484,6 +484,9 @@ function typo_en($letexte) {
 // http://doc.spip.org/@typo
 function typo($letexte, $echapper=true) {
 
+	// Plus vite !
+	if (!strlen($letexte)) return '';
+
 	// Echapper les codes <html> etc
 	if ($echapper)
 		$letexte = echappe_html($letexte, 'TYPO');
@@ -515,17 +518,20 @@ function typo($letexte, $echapper=true) {
 	$letexte = str_replace("'", "&#8217;", $letexte);
 
 	// typo francaise ou anglaise ?
-	// $lang_typo est fixee dans l'interface privee pour editer
+	// $lang_objet est fixee dans l'interface privee pour editer
 	// un texte anglais en interface francaise (ou l'inverse) ;
 	// sinon determiner la typo en fonction de la langue
-	if (!$lang = $GLOBALS['lang_typo']) {
-		#include_spip('inc/lang');
-		$lang = lang_typo($GLOBALS['spip_lang']);
+	if (!$lang = $GLOBALS['lang_objet'])
+		$lang = $GLOBALS['spip_lang'];
+	lang_select($lang);
+	switch (lang_typo($lang)) {
+		case 'fr':
+			$letexte = typo_fr($letexte);
+			break;
+		default:
+			$letexte = typo_en($letexte);
+			break;
 	}
-	if ($lang == 'fr')
-		$letexte = typo_fr($letexte);
-	else
-		$letexte = typo_en($letexte);
 
 	// Retablir les caracteres proteges
 	$letexte = strtr($letexte, $illegal, $protege);
@@ -547,6 +553,9 @@ function typo($letexte, $echapper=true) {
 	if (function_exists('apres_typo'))
 		$letexte = apres_typo($letexte);
 
+	// remettre la langue precedente
+	lang_dselect();
+
 	// reintegrer les echappements
 	if ($echapper)
 		$letexte = echappe_retour($letexte, 'TYPO');
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 28d4523d39..abc9b1d3b9 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -1121,4 +1121,24 @@ function verifier_visiteur() {
 	return false;
 }
 
+// selectionner une langue
+// http://doc.spip.org/@lang_select
+function lang_select ($lang='') {
+	array_push($GLOBALS['pile_langues'], $GLOBALS['spip_lang']);
+	if ($lang != $GLOBALS['spip_lang']) {
+		include_spip('inc/lang');
+		changer_langue($lang);
+	}
+}
+
+// revenir a la langue precedente
+// http://doc.spip.org/@lang_dselect
+function lang_dselect ($rien='') {
+	$lang = array_pop($GLOBALS['pile_langues']);
+	if ($lang != $GLOBALS['spip_lang']) {
+		include_spip('inc/lang');
+		changer_langue($lang);
+	}
+}
+
 ?>
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index 75d3b7174d..290516236a 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -234,9 +234,9 @@ $spip_version = 1.917;
 // et en numerique a incrementer sur les evolutions qui cassent la compatibilite descendante
 // 1.xxyy : xx00 versions stables publiees, xxyy versions de dev
 // (ce qui marche pour yy ne marchera pas forcement sur une version plus ancienne)
-// type nouvelles fonctionnalités, deplacement de fonctions ...
+// type nouvelles fonctionnalites, deplacement de fonctions ...
 $spip_version_affichee = '1.9';
-$spip_version_code=1.9001;
+$spip_version_code=1.9002;
 
 // ** Securite **
 $auteur_session = $connect_statut = $connect_toutes_rubriques = $connect_id_rubrique = $hash_recherche = $hash_recherche_strict = '';
diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php
index a8dfbdc3db..2880729c65 100644
--- a/ecrire/public/assembler.php
+++ b/ecrire/public/assembler.php
@@ -209,19 +209,19 @@ function inclure_page($fond, $contexte_inclus, $cache_incluant='') {
 		);
 	}
 
-	$fcache = charger_fonction('cacher', 'public');
-	// Garnir ces quatre parametres avec les infos sur le cache
-	$fcache($contexte_inclus, $use_cache, $chemin_cache, $page, $lastinclude);
+	// Si on a inclus sans fixer le critere de lang, on prend la langue courante
+	if (!isset($contexte_inclus['lang']))
+		$contexte_inclus['lang'] = ($langue_courante ? $langue_courante :  $GLOBALS['spip_lang']);
 
-	// Si on a inclus sans fixer le critere de lang, de deux choses l'une :
-	// - on est dans la langue du site, et pas besoin d'inclure inc_lang
-	// - on n'y est pas, et alors il faut revenir dans la langue par defaut
-	$lang = isset($contexte_inclus['lang']) ? $contexte_inclus['lang']:'';
-	if ($lang || ($GLOBALS['spip_lang'] != ($lang = $GLOBALS['meta']['langue_site']))) {
+	if ($contexte_inclus['lang'] != $GLOBALS['meta']['langue_site']) {
 		include_spip('inc/lang');
 		lang_select($lang);
 		$lang_select = true; // pour lang_dselect en sortie
-	} else $lang_select = false;
+	}
+
+	$fcache = charger_fonction('cacher', 'public');
+	// Garnir ces quatre parametres avec les infos sur le cache
+	$fcache($contexte_inclus, $use_cache, $chemin_cache, $page, $lastinclude);
 
 	// Une fois le chemin-cache decide, on ajoute la date (et date_redac)
 	// dans le contexte inclus, pour que les criteres {age} etc fonctionnent
@@ -240,7 +240,8 @@ function inclure_page($fond, $contexte_inclus, $cache_incluant='') {
 		if ($chemin_cache) 
 			$fcache($contexte_inclus, $use_cache, $chemin_cache, $page, $lastmodified);
 	}
-	$page['lang_select'] = $lang_select;
+	if($lang_select)
+		lang_dselect();
 
 	return $page;
 }
@@ -258,10 +259,6 @@ function inclure_balise_dynamique($texte, $echo=true, $ligne=0) {
 
 		list($fond, $delainc, $contexte_inclus) = $texte;
 
-		if ((!isset($contexte_inclus['lang'])) AND
-		($GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site']))
-			$contexte_inclus['lang'] = $GLOBALS['spip_lang'];
-
 		// delais a l'ancienne, c'est pratiquement mort
 		$d = isset($GLOBALS['delais']) ? $GLOBALS['delais'] : 0;
 		$GLOBALS['delais'] = $delainc;
@@ -283,10 +280,6 @@ function inclure_balise_dynamique($texte, $echo=true, $ligne=0) {
 				$texte = ob_get_contents();
 				ob_end_clean();
 		}
-
-		if ($page['lang_select'])
-			lang_dselect();
-
 	}
 
 	if ($GLOBALS['var_mode'] == 'debug')
@@ -356,7 +349,8 @@ function message_erreur_404 ($erreur= "") {
 		$erreur = 'public:aucun_site';
 	}
 	$contexte_inclus = array(
-		'erreur' => _T($erreur)
+		'erreur' => _T($erreur),
+		'lang' => $GLOBALS['spip_lang']
 	);
 	$page = inclure_page('404', $contexte_inclus);
 	$page['status'] = 404;
@@ -367,6 +361,7 @@ function message_erreur_404 ($erreur= "") {
 // pour une inclusion dans un flux
 // http://doc.spip.org/@recuperer_fond
 function recuperer_fond($fond, $contexte=array()) {
+
 	// on est peut etre dans l'espace prive au moment de l'appel
 	define ('_INC_PUBLIC', 1);
 	if (($fond=='')&&isset($contexte['fond']))
@@ -381,26 +376,27 @@ function recuperer_fond($fond, $contexte=array()) {
 		ob_end_clean();
 	}
 
-	if ($page['lang_select'] === true)
-		lang_dselect();
-
 	return $page['texte'];
 }
 
 // temporairement ici : a mettre dans le futur inc/modeles
 // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array()
-function creer_contexte_de_modele($args = array()) {
+function creer_contexte_de_modele($args) {
 	$contexte = array();
 	$params = array();
 	foreach ($args as $arg) {
-		if (in_array($arg, array('left', 'right', 'center')))
-			$arg = 'align='.$arg;
-
-		list($var, $val) = split('=', $arg);
+		if (in_array($arg, array('left', 'right', 'center'))) {
+			$var = 'align';
+			$val = $arg;
+		} else {
+			list($var, $val) = split('=', $arg);
+		}
 		$contexte[$var] = $val;
 		$params[] = "$var=$val";
 	}
-	$contexte['params'] = join('|', $params);
+	if ($params = join('|', $params))
+		$contexte['params'] = $params;
+
 	return $contexte;
 }
 
diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index 9c2f62a53d..41d87d0f81 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -68,12 +68,25 @@ function calculer_inclure($struct, $descr, &$boucles, $id_boucle) {
 	}
 
 	$l = array();
+	$lang = '';
 	foreach($struct->param as $val) {
 		$var = array_shift($val);
-		$l[] = "\'$var\' => ' .  argumenter_squelette(" . 
-		  ($val ? calculer_liste($val[0], $descr, $boucles, $id_boucle) :(($var =='lang') ? '$GLOBALS["spip_lang"]' : index_pile($id_boucle, $var, $boucles)))
-		  . ") . '";
+		if ($var == 'lang')
+			$lang = $val;
+		else
+			$l[$var] = "\'$var\' => ' .  argumenter_squelette(" .
+			($val
+				? calculer_liste($val[0], $descr, $boucles, $id_boucle)
+				: index_pile($id_boucle, $var, $boucles)
+			) . ") . '";
 	}
+	// Cas particulier de la langue : si {lang=xx} est definie, on
+	// la passe, sinon on passe la langue courante au moment du calcul
+	$l['lang'] = "\'lang\' => ' . argumenter_squelette(" .
+		($lang
+			? calculer_liste($lang[0], $descr, $boucles, $id_boucle)
+			: '$GLOBALS["spip_lang"]'
+		) . ") . '";
 
 	return "\n'<".
 		"?php\n\t\$contexte_inclus = array(" .
diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index 8f9ad51aee..c6a00a7c9c 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -280,7 +280,7 @@ function calculer_balise_modele_dist($p){
 	}
 
 	$p->code = "recuperer_fond('modeles/".$nom."',
-		creer_contexte_de_modele(array(".join(',', $code_contexte).")))";
+		creer_contexte_de_modele(array(".join(',', $code_contexte)."), \$GLOBALS['spip_lang']))";
 	$p->interdire_scripts = false; // securite assuree par le squelette
 
 	return $p;
-- 
GitLab