Skip to content
Extraits de code Groupes Projets
Valider 357e6774 rédigé par esj's avatar esj
Parcourir les fichiers

La fonction de traduction devient surchargeable sous le nom de inc_traduire,...

La fonction de traduction devient surchargeable sous le nom de inc_traduire, le fichier inc/traduire étant originellement une partie de inc/lang. Les traductions sont mémorisées dans une statique, l'expérience montrant qu'elles souvent redemandées. Par ailleurs, inc/lang évite d'appeler changer_lang en rafale, une fois suffit.
parent e634af02
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -481,6 +481,7 @@ ecrire/inc/sites_voir.php -text
ecrire/inc/suivi_versions.php -text
ecrire/inc/syndic.php -text
ecrire/inc/tourner.php -text
ecrire/inc/traduire.php -text
ecrire/inc/utils.php -text
ecrire/inc/vieilles_defs.php -text
ecrire/inc/virtualiser.php -text
......
......@@ -20,7 +20,6 @@ include_spip('inc/headers');
// http://doc.spip.org/@action_inscription_dist
function action_inscription_dist() {
utiliser_langue_site();
utiliser_langue_visiteur();
http_no_cache();
......
......@@ -13,7 +13,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/presentation');
include_spip('inc/lang');
include_spip('inc/traduire');
// http://doc.spip.org/@exec_lang_raccourcis_dist
function exec_lang_raccourcis_dist() {
......
......@@ -14,68 +14,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/actions');
//
// Charger un fichier langue
//
// http://doc.spip.org/@chercher_module_lang
function chercher_module_lang($module, $lang = '') {
if ($lang)
$lang = '_'.$lang;
// 1) dans un repertoire nomme lang/ se trouvant sur le chemin
if ($f = include_spip('lang/'.$module.$lang, false))
return $f;
// 2) directement dans le chemin (old style)
return include_spip($module.$lang, false);
}
// http://doc.spip.org/@charger_langue
function charger_langue($lang, $module = 'spip') {
if ($lang AND $fichier_lang = chercher_module_lang($module, $lang)) {
$GLOBALS['idx_lang']='i18n_'.$module.'_'.$lang;
include_once($fichier_lang);
} else {
// si le fichier de langue du module n'existe pas, on se rabat sur
// la langue par defaut du site -- et au pire sur le francais, qui
// *par definition* doit exister, et on copie le tableau dans la
// var liee a la langue
$l = $GLOBALS['meta']['langue_site'];
if (!$fichier_lang = chercher_module_lang($module, $l))
$fichier_lang = chercher_module_lang($module, 'fr');
if ($fichier_lang) {
$GLOBALS['idx_lang']='i18n_'.$module.'_' .$l;
include($fichier_lang);
$GLOBALS['i18n_'.$module.'_'.$lang]
= &$GLOBALS['i18n_'.$module.'_'.$l];
#spip_log("module de langue : ${module}_$l.php");
}
}
}
//
// Surcharger le fichier de langue courant avec un autre (tordu, hein...)
//
// http://doc.spip.org/@surcharger_langue
function surcharger_langue($fichier) {
$idx_lang_normal = $GLOBALS['idx_lang'];
$idx_lang_surcharge = $GLOBALS['idx_lang'].'_temporaire';
$GLOBALS['idx_lang'] = $idx_lang_surcharge;
include($fichier);
if (is_array($GLOBALS[$idx_lang_surcharge])) {
$GLOBALS[$idx_lang_normal] = array_merge(
$GLOBALS[$idx_lang_normal],
$GLOBALS[$idx_lang_surcharge]
);
}
unset ($GLOBALS[$idx_lang_surcharge]);
$GLOBALS['idx_lang'] = $idx_lang_normal;
}
//
// Changer la langue courante
//
......@@ -108,77 +46,6 @@ function changer_langue($lang) {
}
//
// Regler la langue courante selon les infos envoyees par le brouteur
//
// http://doc.spip.org/@regler_langue_navigateur
function regler_langue_navigateur() {
$accept_langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
if (is_array($accept_langs)) {
while(list(, $s) = each($accept_langs)) {
if (eregi('^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$', trim($s), $r)) {
$lang = strtolower($r[1]);
if (changer_langue($lang)) return $lang;
}
}
}
return false;
}
//
// Traduire une chaine internationalisee
//
// http://doc.spip.org/@traduire_chaine
function traduire_chaine($code) {
global $spip_lang;
// modules par defaut
$modules = array('spip', 'ecrire');
// modules demandes explicitement
$code_ori = $code; # le garder pour le fallback plus tard
if (strpos($code, ':')) {
if (ereg("^([a-z/]+):(.*)$", $code, $regs)) {
$modules = explode("/",$regs[1]);
$code = $regs[2];
}
}
$text = '';
// parcourir tous les modules jusqu'a ce qu'on trouve
foreach ($modules as $module) {
$var = "i18n_".$module."_".$spip_lang;
if (empty($GLOBALS[$var])) {
charger_langue($spip_lang, $module);
// surcharge perso -- on cherche (lang/)local_xx.php ...
if ($f = chercher_module_lang('local', $spip_lang))
surcharger_langue($f);
// ... puis (lang/)local.php
if ($f = chercher_module_lang('local'))
surcharger_langue($f);
}
if (isset($GLOBALS[$var][$code])) {
$text = $GLOBALS[$var][$code];
break;
}
}
// fallback langues pas finies ou en retard (eh oui, c'est moche...)
if ($spip_lang<>'fr') {
$text = ereg_replace("^<(NEW|MODIF)>","",$text);
if (!$text) {
$spip_lang_temp = $spip_lang;
$spip_lang = 'fr';
$text = traduire_chaine($code_ori);
$spip_lang = $spip_lang_temp;
}
}
return $text;
}
// http://doc.spip.org/@traduire_nom_langue
function traduire_nom_langue($lang) {
include_spip('inc/lang_liste');
......@@ -414,18 +281,22 @@ function utiliser_langue_site() {
// http://doc.spip.org/@utiliser_langue_visiteur
function utiliser_langue_visiteur() {
global $_COOKIE;
if (!regler_langue_navigateur())
utiliser_langue_site();
$l = (_DIR_RESTREINT ? 'spip_lang' : 'spip_lang_ecrire');
if (isset($_COOKIE[$l]))
if (changer_langue($l = $_COOKIE[$l])) return $l;
if (!empty($GLOBALS['auteur_session']['lang']))
changer_langue($GLOBALS['auteur_session']['lang']);
if (isset($GLOBALS['auteur_session']['lang']))
if (changer_langue($l = $GLOBALS['auteur_session']['lang']))
return $l;
$cookie_lang = (_DIR_RESTREINT ? 'spip_lang' : 'spip_lang_ecrire');
if (!empty($_COOKIE[$cookie_lang]))
foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) {
if (eregi('^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$', trim($s), $r)) {
if (changer_langue($l=strtolower($r[1]))) return $l;
}
}
changer_langue($_COOKIE[$cookie_lang]);
return changer_langue($GLOBALS['langue_site']);
}
// Une fonction qui donne le repertoire ou trouver des fichiers de langue
......
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2006 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
//
// Charger un fichier langue
//
// http://doc.spip.org/@chercher_module_lang
function chercher_module_lang($module, $lang = '') {
if ($lang)
$lang = '_'.$lang;
// 1) dans un repertoire nomme lang/ se trouvant sur le chemin
if ($f = include_spip('lang/'.$module.$lang, false))
return $f;
// 2) directement dans le chemin (old style)
return include_spip($module.$lang, false);
}
// http://doc.spip.org/@charger_langue
function charger_langue($lang, $module = 'spip') {
if ($lang AND $fichier_lang = chercher_module_lang($module, $lang)) {
$GLOBALS['idx_lang']='i18n_'.$module.'_'.$lang;
include_once($fichier_lang);
} else {
// si le fichier de langue du module n'existe pas, on se rabat sur
// la langue par defaut du site -- et au pire sur le francais, qui
// *par definition* doit exister, et on copie le tableau dans la
// var liee a la langue
$l = $GLOBALS['meta']['langue_site'];
if (!$fichier_lang = chercher_module_lang($module, $l))
$fichier_lang = chercher_module_lang($module, 'fr');
if ($fichier_lang) {
$GLOBALS['idx_lang']='i18n_'.$module.'_' .$l;
include($fichier_lang);
$GLOBALS['i18n_'.$module.'_'.$lang]
= &$GLOBALS['i18n_'.$module.'_'.$l];
#spip_log("module de langue : ${module}_$l.php");
}
}
}
//
// Surcharger le fichier de langue courant avec un autre (tordu, hein...)
//
// http://doc.spip.org/@surcharger_langue
function surcharger_langue($fichier) {
$idx_lang_normal = $GLOBALS['idx_lang'];
$idx_lang_surcharge = $GLOBALS['idx_lang'].'_temporaire';
$GLOBALS['idx_lang'] = $idx_lang_surcharge;
include($fichier);
if (is_array($GLOBALS[$idx_lang_surcharge])) {
$GLOBALS[$idx_lang_normal] = array_merge(
$GLOBALS[$idx_lang_normal],
$GLOBALS[$idx_lang_surcharge]
);
}
unset ($GLOBALS[$idx_lang_surcharge]);
$GLOBALS['idx_lang'] = $idx_lang_normal;
}
//
// Traduire une chaine internationalisee
//
// http://doc.spip.org/@traduire_chaine
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 (preg_match(",^([a-z/]+):(.*)$,", $ori, $regs)) {
$modules = explode("/",$regs[1]);
$code = $regs[2];
} else {$modules = array('spip', 'ecrire'); $code = $ori;}
$text = '';
// parcourir tous les modules jusqu'a ce qu'on trouve
foreach ($modules as $module) {
$var = "i18n_".$module."_".$lang;
if (empty($GLOBALS[$var])) {
charger_langue($lang, $module);
// surcharge perso -- on cherche (lang/)local_xx.php ...
if ($f = chercher_module_lang('local', $lang))
surcharger_langue($f);
// ... puis (lang/)local.php
if ($f = chercher_module_lang('local'))
surcharger_langue($f);
}
if (isset($GLOBALS[$var][$code])) {
$text = $GLOBALS[$var][$code];
break;
}
}
// filet pour traduction pas finies
if (($lang<>'fr') AND ereg("^<(NEW|MODIF)>", $text))
$text = traduire_chaine($ori, 'fr');
$deja_vu[$lang][$code] = $text;
return $text;
}
?>
......@@ -25,22 +25,22 @@ include(_DIR_RESTREINT . 'inc/vieilles_defs.php');
// charge un fichier perso ou, a defaut, standard
// et retourne si elle existe le nom de la fonction homonyme (exec_$nom),
// ou de suffixe _dist
// Peut etre appelee plusieurs fois, donc optimiser
// http://doc.spip.org/@charger_fonction
function charger_fonction($nom, $dossier='exec', $continue=false) {
// Securite de base
if (!preg_match(',^\w+$,', $nom))
die(htmlspecialchars($nom)." pas autorise");
if (substr($dossier,-1) != '/') $dossier .= '/';
// Si la fonction existe deja (definie par mes_options, par exemple)
if (function_exists($f = str_replace('/','_',$dossier) . $nom))
return $f;
if (function_exists($g = $f . '_dist'))
return $g;
// Sinon charger le fichier de declaration
// Sinon charger le fichier de declaration si plausible
if (!preg_match(',^\w+$,', $f))
die(htmlspecialchars($nom)." pas autorise");
// passer en minuscules (cf les balises de formulaires)
$inc = include_spip($d = ($dossier . strtolower($nom)));
......@@ -380,10 +380,9 @@ function self($root = false) {
//
// http://doc.spip.org/@_T
function _T($texte, $args=array()) {
# petite optimisation pour ne passer qu'une fois dans include_spip
static $c; $c OR $c = include_spip('inc/lang');
$text = traduire_chaine($texte);
$f = charger_fonction('traduire', 'inc');
$text = $f($texte,$GLOBALS['spip_lang']);
if (!empty($GLOBALS['xhtml'])) {
include_spip('inc/charsets');
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter