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