function afficher_raccourcis($module = "public") { global $spip_lang; charger_langue($spip_lang, $module); $tableau = $GLOBALS['i18n_' . $module . '_' . $spip_lang]; ksort($tableau); $aff_nom_module= ""; if ($module != "public" AND $module != "local") $aff_nom_module = "$module:"; echo "<div class='arial2'>"._T('module_texte_explicatif')."</div>"; echo "<div> </div>"; foreach (preg_files(repertoire_lang().$module.'_[a-z_]+\.php[3]?$') as $f) if (preg_match(",^".$module."\_([a-z_]+)\.php[3]?$,", $f, $regs)) $langue_module[$regs[1]] = traduire_nom_langue($regs[1]); if (isset($langue_module) && ($langue_module)) { ksort($langue_module); echo "<div class='arial2'>"._T('module_texte_traduction', array('module' => $module)); echo " ".join(", ", $langue_module)."."; echo "</div><div> </div>"; } echo debut_cadre_relief('',true,'','','raccourcis'); echo "\n<table class='spip' style='border:0;'>"; echo "\n<tr class='titrem'><th class='verdana1'>"._T('module_raccourci')."</th>\n<th class='verdana2'>"._T('module_texte_affiche')."</th></tr>\n"; $i = 0; foreach ($tableau as $raccourci => $val) { $bgcolor = alterner(++$i, 'row_even','row_odd'); echo "\n<tr class='$bgcolor'><td class='verdana2'><b><:$aff_nom_module$raccourci:></b></td>\n<td class='arial2'>".$val."</td></tr>"; } echo "</table>",fin_cadre_relief(true); }
/** * Traduire une chaine internationalisée * * Lorsque la langue demandée n'a pas de traduction pour la clé de langue * transmise, la fonction cherche alors la traduction dans la langue * principale du site (défini par la meta `langue_site`), puis, à défaut * dans la langue française. * * Les traductions sont cherchées dans les modules de langue indiqués. * Par exemple le module `mots` dans la clé `mots:titre_mot`, pour une * traduction `es` (espagnol) provoquera une recherche dans tous les fichiers * `lang\mots_es.php`. * * Des surcharges locales peuvent être présentes également * dans les fichiers `lang/local_es.php` ou `lang/local.php` * * @note * Les couples clé/traductions déjà connus sont sauvés en interne * dans les globales `i18n_${module}_${lang}` tel que `i18n_mots_es` * et sont également sauvés dans la variable statique `deja_vu` * de cette fonction. * * @uses charger_langue() * @uses chercher_module_lang() * @uses surcharger_langue() * * @param string $ori * Clé de traduction, tel que `bouton_enregistrer` ou `mots:titre_mot` * @param string $lang * Code de langue, la traduction doit se faire si possible dans cette langue * @return string * Traduction demandée. Chaîne vide si aucune traduction trouvée. **/ function inc_traduire_dist($ori, $lang) { static $deja_vu = array(); static $local = array(); if (isset($deja_vu[$lang][$ori]) and _request('var_mode') != 'traduction') { return $deja_vu[$lang][$ori]; } // modules demandes explicitement <xxx|yyy|zzz:code> cf MODULES_IDIOMES if (strpos($ori, ':')) { list($modules, $code) = explode(':', $ori, 2); $modules = explode('|', $modules); $ori_complet = $ori; } else { $modules = array('spip', 'ecrire'); $code = $ori; $ori_complet = implode('|', $modules) . ':' . $ori; } $text = ''; $module_retenu = ''; // 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); // surcharges persos -- on cherche // (lang/)local_xx.php et/ou (lang/)local.php ... if (!isset($local['local_' . $lang])) { // redéfinir la langue en cours pour les surcharges (chercher_langue a pu le changer) $GLOBALS['idx_lang'] = $var; // ... (lang/)local_xx.php $local['local_' . $lang] = chercher_module_lang('local', $lang); } if ($local['local_' . $lang]) { surcharger_langue($local['local_' . $lang]); } // ... puis (lang/)local.php if (!isset($local['local'])) { $local['local'] = chercher_module_lang('local'); } if ($local['local']) { surcharger_langue($local['local']); } } if (isset($GLOBALS[$var][$code])) { $module_retenu = $module; $text = $GLOBALS[$var][$code]; break; } } // 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 $langue_retenue = $lang; if (!strlen($text) and $lang !== _LANGUE_PAR_DEFAUT) { if ($lang !== $GLOBALS['meta']['langue_site']) { $text = inc_traduire_dist($ori, $GLOBALS['meta']['langue_site']); $langue_retenue = !strlen($text) ? $GLOBALS['meta']['langue_site'] : ''; } else { $text = inc_traduire_dist($ori, _LANGUE_PAR_DEFAUT); $langue_retenue = !strlen($text) ? _LANGUE_PAR_DEFAUT : ''; } } // Supprimer la mention <NEW> ou <MODIF> if (substr($text, 0, 1) === '<') { $text = str_replace(array('<NEW>', '<MODIF>'), array(), $text); } // Si on n'est pas en utf-8, la chaine peut l'etre... // le cas echeant on la convertit en entites html &#xxx; if ((!isset($GLOBALS['meta']['charset']) or $GLOBALS['meta']['charset'] !== 'utf-8') and preg_match(',[\\x7f-\\xff],S', $text)) { include_spip('inc/charsets'); $text = charset2unicode($text, 'utf-8'); } if (_request('var_mode') == 'traduction') { if ($text) { $classe = 'debug-traduction' . ($module_retenu == 'ecrire' ? '-prive' : ''); $text = '<span lang=' . $langue_retenue . ' class=' . $classe . ' title=' . $ori_complet . '(' . $langue_retenue . ')>' . $text . '</span>'; $text = str_replace(array("{$module_retenu}:", "{$module_retenu}|"), array("*{$module_retenu}*:", "*{$module_retenu}*|"), $text); } } else { $deja_vu[$lang][$ori] = $text; } return $text; }
function inc_traduire_dist($ori, $lang) { static $deja_vu = array(); if (isset($deja_vu[$lang][$ori])) return $deja_vu[$lang][$ori]; // modules demandes explicitement <xxx/yyy/zzz:code> if (strpos($ori,':')) { list($modules,$code) = explode(':',$ori,2); $modules = explode('/', $modules); } 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; } } // 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'); } // Supprimer la mention <NEW> ou <MODIF> if (substr($text,0,1) === '<') $text = str_replace(array('<NEW>', '<MODIF>'), array(), $text); // Si on n'est pas en utf-8, la chaine peut l'etre... // le cas echeant on la convertit en entites html &#xxx; if ($GLOBALS['meta']['charset'] !== 'utf-8' AND preg_match(',[\x7f-\xff],S', $text)) { include_spip('inc/charsets'); $text = charset2unicode($text,'utf-8'); } $deja_vu[$lang][$ori] = $text; return $text; }