diff --git a/ecrire/i18n/spip_en.php3 b/ecrire/i18n/spip_en.php3
new file mode 100644
index 0000000000000000000000000000000000000000..5dd2875c39490d5a205b9f66c6f8049f82397e52
--- /dev/null
+++ b/ecrire/i18n/spip_en.php3
@@ -0,0 +1,20 @@
+<?php
+
+//
+// Ce fichier ne sera execute qu'une fois
+if (defined("_ECRIRE_I18N_EN")) return;
+define("_ECRIRE_I18N_EN", "1");
+
+global $i18n;
+
+//
+// ecrire/inc_presentation.php3
+//
+$i18n['en']['Auteurs'] = 'Authors';
+$i18n['en']['Informations personnelles'] = 'Personal data';
+$i18n['en']['1 nouveau message'] = 'YOU HAVE A NEW MESSAGE';
+$i18n['en']['@n@ nouveaux messages'] = 'YOU HAVE @n@ NEW MESSAGES';
+
+// etc.
+
+?>
\ No newline at end of file
diff --git a/ecrire/i18n/spip_fr.php3 b/ecrire/i18n/spip_fr.php3
new file mode 100644
index 0000000000000000000000000000000000000000..620bb37eb387018cdf5c35f90421a1dc4d13c94d
--- /dev/null
+++ b/ecrire/i18n/spip_fr.php3
@@ -0,0 +1,20 @@
+<?php
+
+//
+// Ce fichier ne sera execute qu'une fois
+if (defined("_ECRIRE_I18N_FR")) return;
+define("_ECRIRE_I18N_FR", "1");
+
+global $i18n;
+
+//
+// ecrire/inc_presentation.php3
+//
+$i18n['fr']['Auteurs'] = 'Auteurs';
+$i18n['fr']['Informations personnelles'] = 'Informations personnelles';
+$i18n['fr']['1 nouveau message'] = 'VOUS AVEZ UN NOUVEAU MESSAGE';
+$i18n['fr']['@n@ nouveaux messages'] = 'VOUS AVEZ @n@ NOUVEAUX MESSAGES';
+
+// etc.
+
+?>
\ No newline at end of file
diff --git a/ecrire/inc.php3 b/ecrire/inc.php3
index ce62fb9977b7255c7ca668de68e26fabef4124c3..995656716fe356f1302c53af513cf1305b7d54fd 100644
--- a/ecrire/inc.php3
+++ b/ecrire/inc.php3
@@ -36,6 +36,10 @@ if ($set_options == 'avancees' OR $set_options == 'basiques') {
 	$prefs['options'] = $set_options;
 	$prefs_mod = true;
 }
+if ($set_lang AND ereg(",$set_lang,", ",$all_langs,")) {
+	$prefs['lang'] = $set_lang;
+	$prefs_mod = true;
+}
 if ($securite == 'normal' || $securite == 'strict') {
 	$prefs['securite'] = $securite;
 	$secu = 'oui';
@@ -64,6 +68,13 @@ if ($debloquer_article) {
 $options      = $prefs['options'];
 $spip_display = $prefs['display'];
 
+// fixer la langue
+if ($prefs['lang'])
+	$i18nlang = $prefs['lang'];
+/*
+else if ... Nicolas, quel est l'entete http a verifier contre $all_langs ?
+
+*/
 
 switch ($prefs['couleur']) {
 	case 1:
diff --git a/ecrire/inc_gettext.php3 b/ecrire/inc_gettext.php3
new file mode 100644
index 0000000000000000000000000000000000000000..706203dfc0b0b0fd7827a96e81184344ca265b15
--- /dev/null
+++ b/ecrire/inc_gettext.php3
@@ -0,0 +1,52 @@
+<?php
+
+// Ce fichier ne sera execute qu'une fois
+if (defined("_ECRIRE_INC_GETTEXT")) return;
+define("_ECRIRE_INC_GETTEXT", "1");
+
+
+//
+// i18n : merge ("My name is @name@", array('name'=>'Bob'))
+//        into "My name is Bob"
+//
+function text_merge($text, $args) {
+	if (is_array($args)) {
+		while (list($name,$value) = each($args))
+			$text = ereg_replace ("@$name@", "$value", $text);
+	}
+	return $text;
+}
+
+//
+// i18n : merge ("My name is @name@", array('name'=>'Bob'))
+//        into "My name is Bob"
+//
+function spip_gettext($text, $args, $lang) {
+	global $i18n;
+	global $dir_ecrire;
+
+	// load the language file
+	if (!$i18n[$lang]) {
+		if (file_exists($dir_ecrire."i18n/spip_$lang.php3"))
+			include_ecrire ("i18n/spip_$lang.php3");
+		else {
+			$lang = 'fr';
+			include_ecrire ("i18n/spip_fr.php3");
+		}
+	}
+
+	// get the french text if the translation file is not complete
+	if (!$i18n[$lang][$text]) {
+		$lang = 'fr';
+		include_ecrire ("i18n/spip_fr.php3");
+	}
+
+	// use the translated text if found
+	if ($i18n[$lang][$text])
+		$text = $i18n[$lang][$text];
+
+	// merge it with the variables
+	return text_merge($text, $args);
+}
+
+?>
\ No newline at end of file
diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3
index 7869f8f966761f9ef0cba7d404ed6ea334a2b158..e3d979e875f7bd427fc4b6086fb16d5da9df46c6 100644
--- a/ecrire/inc_presentation.php3
+++ b/ecrire/inc_presentation.php3
@@ -433,7 +433,7 @@ function afficher_articles($titre_table, $requete, $afficher_visites = false, $a
 // Afficher tableau de breves
 //
 
-function afficher_breves($titre_table, $requete) {
+function afficher_breves($titre_table, $requete, $affrub=false) {
 	global $connect_id_auteur;
 
 	$tranches = afficher_tranches_requete($requete, 2);
@@ -466,6 +466,7 @@ function afficher_breves($titre_table, $requete) {
 			$date_heure = $row['date_heure'];
 			$titre = $row['titre'];
 			$statut = $row['statut'];
+			$id_rubrique = $row['id_rubrique'];
 			if ($statut == 'prop') $puce = "puce-blanche";
 			else if ($statut == 'publie') $puce = "puce-verte";
 			else if ($statut == 'refuse') $puce = "puce-rouge";
@@ -478,8 +479,13 @@ function afficher_breves($titre_table, $requete) {
 			$vals[] = $s;
 
 			$s = "<div align=\"right\">";
-			if ($statut == "prop") $s .= "[<font color=\"red\">&agrave; valider</font>]";
-			else $s .= affdate($date_heure);
+			if ($affrub) {
+				$rub = spip_fetch_array(spip_query("SELECT titre FROM spip_rubriques WHERE id_rubrique=$id_rubrique"));
+				$s .= typo($rub['titre']);
+			} else if ($statut != "prop")
+				$s .= affdate($date_heure);
+			else
+				$s .= "[&agrave; valider]";
 			$s .= "</div>";
 			$vals[] = $s;
 			$table[] = $vals;
@@ -1249,6 +1255,7 @@ function debut_page($titre = "", $rubrique = "asuivre", $sous_rubrique = "asuivr
 	else $largeur = 750;
 	
 	// nettoyer le lien global
+	$clean_link->delVar('set_lang');
 	$clean_link->delVar('set_options');
 	$clean_link->delVar('set_couleur');
 	$clean_link->delVar('set_disp');
@@ -1286,9 +1293,9 @@ function debut_page($titre = "", $rubrique = "asuivre", $sous_rubrique = "asuivr
 		icone_bandeau_principal ("&Agrave; suivre", "index.php3", "asuivre-48.gif", "asuivre", $rubrique);
 		icone_bandeau_principal ("&Eacute;dition du site", "naviguer.php3", "documents-48.gif", "documents", $rubrique);
 		if ($options == "avancees") {
-			icone_bandeau_principal ("Auteurs", "auteurs.php3", "redacteurs-48.gif", "redacteurs", $rubrique);
+			icone_bandeau_principal (_T('Auteurs'), "auteurs.php3", "redacteurs-48.gif", "redacteurs", $rubrique);
 		} else {
-			icone_bandeau_principal ("Informations personnelles", "auteurs_edit.php3?id_auteur=$connect_id_auteur", "fiche-perso-48.gif", "redacteurs", $rubrique);
+			icone_bandeau_principal (_T('Informations personnelles'), "auteurs_edit.php3?id_auteur=$connect_id_auteur", "fiche-perso-48.gif", "redacteurs", $rubrique);
 		}
 		if ($options == "avancees") {
 			if ($connect_statut == "0minirezo") 
@@ -1429,10 +1436,10 @@ function debut_page($titre = "", $rubrique = "asuivre", $sous_rubrique = "asuivr
 			if ($total_messages == 1) {
 				while($row = @spip_fetch_array($result_messages)) {
 					$ze_message=$row['id_message'];
-					echo "<a href='message.php3?id_message=$ze_message'><font color='$couleur_claire'><b>VOUS AVEZ UN NOUVEAU MESSAGE</b></font></a>";
+					echo "<a href='message.php3?id_message=$ze_message'><font color='$couleur_claire'><b>"._T('1 nouveau message')."</b></font></a>";
 				}
 			}
-			if ($total_messages > 1) echo "<a href='messagerie.php3'><font color='$couleur_claire'>VOUS AVEZ $total_messages NOUVEAUX MESSAGES</font></a>";
+			if ($total_messages > 1) echo "<a href='messagerie.php3'><font color='$couleur_claire'>"._T('@n@ nouveaux messages', array('n' => $total_messages))."</font></a>";
 			$result_messages = spip_query("SELECT messages.* FROM spip_messages AS messages, spip_auteurs_messages AS lien WHERE lien.id_auteur='$connect_id_auteur' AND messages.statut='publie' AND lien.id_message=messages.id_message AND messages.rv='oui' AND messages.date_heure>DATE_SUB(NOW(),INTERVAL 1 DAY) GROUP BY messages.id_message");
 			$total_messages = @spip_num_rows($result_messages);
 			
@@ -1474,7 +1481,9 @@ function debut_page($titre = "", $rubrique = "asuivre", $sous_rubrique = "asuivr
 
 	echo "</font>";
 	echo "</td>";
-	echo "<td align='center' align='right'>";
+
+	// grand ecran
+	echo "<td align='center'>";
 	$lien = $clean_link;
 			
 	if ($spip_ecran == "large") {
@@ -1487,6 +1496,19 @@ function debut_page($titre = "", $rubrique = "asuivre", $sous_rubrique = "asuivr
 	}
 	echo "</td>";
 
+	// choix de la langue
+	if (strpos($GLOBALS['all_langs'], ',')) {
+		echo "<td align='center'><font face='arial,helvetica,sans-serif' size=2>";
+		$langues = explode(',', $GLOBALS['all_langs']);
+		while (list(,$langue) = each ($langues)) {
+			$lien = $clean_link;
+			$lien->addVar('set_lang', $langue);
+			echo " <a href='". $lien->getUrl() ."'><font color='#ffffff'>$langue</font></a>";
+		}
+		echo "</font></td>";
+	}
+
+	// choix de la couleur
 	echo "<td align='right'>";
 	echo "<img src='img_pack/barre-couleurs.gif' alt='couleurs' width='70' height='21' border='0' usemap='#map_couleur'>";
 	echo "</td>";
diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index fccf26bf2256b7016d97f3f6d7e99d2f1d5e762a..75d4df1be9032d0c3bdbb670f69ea3f0cff9b9e8 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -47,7 +47,7 @@ else {
 //
 // Variables globales : a virer pour une gestion intelligente de la langue
 //
-tester_variable('lang', 'fr');
+tester_variable('lang', $GLOBALS['i18nlang']);
 
 //
 // Trouver une locale qui marche
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index c65694c8c9db084b9dd3b33715c1e08ca454bdf3..6c8034d32a251481e70be7aa18d569d9921410d6 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -26,6 +26,12 @@ $mysql_profile = false;
 // faut-il autoriser SPIP a compresser les pages a la volee quand le navigateur l'accepte ?
 $auto_compress = true;
 
+// langue par defaut du site
+$i18nlang = 'fr';
+
+// langues proposees dans l'espace prive (il faut aussi le fichier i18n/spip_lang.php3)
+$all_langs = 'fr,en';
+
 //
 // 	*** Fin du parametrage ***
 //
@@ -639,6 +645,15 @@ if (count($GLOBALS['HTTP_POST_VARS'])) {
 }
 
 
+//
+// Fonctions d'i18n
+//
+function _T($text, $args='') {
+	include_ecrire('inc_gettext.php3');
+	return spip_gettext($text, $args, $GLOBALS['i18nlang']);
+}
+
+
 // Verifier la conformite d'une ou plusieurs adresses email
 
 function email_valide($adresse) {
diff --git a/ecrire/index.php3 b/ecrire/index.php3
index 1e5d38acd02706f10f8a3d11f90d3066379bdea9..bf1ca66453aa36258cfdea3bb30b3ad9541b4b0d 100644
--- a/ecrire/index.php3
+++ b/ecrire/index.php3
@@ -357,7 +357,7 @@ if ($relief) {
 	// Les breves a valider
 	//
 	$query = "SELECT * FROM spip_breves WHERE statut='prepa' OR statut='prop' ORDER BY date_heure DESC";
-	afficher_breves("Br&egrave;ves &agrave; valider", $query);
+	afficher_breves("Br&egrave;ves &agrave; valider", $query, true);
 
 	//
 	// Les sites references a valider