From 33c71f083fe3ecea9df6e9ec3b8f3528acba8cab Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Tue, 8 Apr 2008 19:14:12 +0000
Subject: [PATCH] il y avait beaucoup de fautes dans le code de la fonction de
 traduction.

Notamment, on faisait deux preg_match pour chaque appel de traduction (svn commit -m
---
 ecrire/inc/traduire.php | 34 +++++++++++++++++++++-------------
 ecrire/inc/utils.php    | 12 ++++++++----
 2 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/ecrire/inc/traduire.php b/ecrire/inc/traduire.php
index c7a850b483..63c294635d 100644
--- a/ecrire/inc/traduire.php
+++ b/ecrire/inc/traduire.php
@@ -82,16 +82,17 @@ function inc_traduire_dist($ori, $lang) {
 
 	static $deja_vu = array();
   
-	if (isset($deja_vu[$lang][$ori])) {
-	      return $deja_vu[$lang][$ori];
-	}
-
-	// modules demandes explicitement
+	if (isset($deja_vu[$lang][$ori]))
+		return $deja_vu[$lang][$ori];
 
-	if (preg_match(",^([a-z0-9_/]+):(.*)$,", $ori, $regs)) {
-			$modules = explode("/",$regs[1]);
-			$code = $regs[2];
-	} else 	{$modules = array('spip', 'ecrire'); $code = $ori;}
+	// modules demandes explicitement <xxx/yyy/zzz:code>
+	if (strpos($ori,':')) {
+		list($modules,$code) = explode(':',$ori);
+		$modules = explode('/', $modules);
+	} else {
+		$modules = array('spip', 'ecrire');
+		$code = $ori;
+	}
 
 	$text = '';
 	// parcourir tous les modules jusqu'a ce qu'on trouve
@@ -113,10 +114,17 @@ function inc_traduire_dist($ori, $lang) {
 		}
 	}
 
-	// filet pour traduction pas finies 
-	if (($lang<>'fr') AND preg_match(",^<(NEW|MODIF)>,", $text))
-		  $text = inc_traduire_dist($ori, 'fr');
-	$deja_vu[$lang][$code] = $text;
+	// Retour aux sources si la chaine est absente dans la langue cible ;
+	// on essaie d'abord la langue du site, puis a defaut la langue fr
+	if (!strlen($text)
+	AND $lang !== 'fr') {
+		if ($lang !== $GLOBALS['meta']['langue_site'])
+			$text = inc_traduire_dist($ori, $GLOBALS['meta']['langue_site']);
+		else 
+			$text = inc_traduire_dist($ori, 'fr');
+	}
+
+	$deja_vu[$lang][$ori] = $text;
 
 	return $text;
 }
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 099ae3112c..8e0e276385 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -376,14 +376,16 @@ function _T($texte, $args=array()) {
 		$traduire = charger_fonction('traduire', 'inc');
 	$text = $traduire($texte,$GLOBALS['spip_lang']);
 
-	if (!$text)
+	if (!strlen($text))
 		// pour les chaines non traduites
-		$text =	str_replace('_', ' ',
+		$text = str_replace('_', ' ',
 			 (($n = strpos($texte,':')) === false ? $texte :
 				substr($texte, $n+1)));
 
-	while (list($name, $value) = @each($args))
+	if (is_array($args))
+	foreach ($args as $name => $value)
 		$text = str_replace ("@$name@", $value, $text);
+
 	return $text;
 
 }
@@ -391,8 +393,10 @@ function _T($texte, $args=array()) {
 // chaines en cours de traduction
 // http://doc.spip.org/@_L
 function _L($text, $args=array()) {
-	while (list($name, $value) = @each($args))
+	if (is_array($args))
+	foreach ($args as $name => $value)
 		$text = str_replace ("@$name@", $value, $text);
+
 	if ($GLOBALS['test_i18n'])
 		return "<span style='color:red;'>$text</span>";
 	else
-- 
GitLab