function action_converser_post($lang, $ecrire=false) { if ($lang) { include_spip('inc/lang'); if (changer_langue($lang)) { spip_setcookie('spip_lang', $_COOKIE['spip_lang'] = $lang, time() + 365 * 24 * 3600); if ($ecrire) spip_setcookie('spip_lang_ecrire', $_COOKIE['spip_lang_ecrire'] = $lang, time() + 365 * 24 * 3600); } } }
function aide_changer_langue($var_lang_r, $lang_r) { if ($var_lang_r) { changer_langue($lang = $var_lang_r); } if ($lang_r) { changer_langue($lang = $lang_r); } else { $lang = $GLOBALS['spip_lang']; } return $lang; }
function aide_changer_langue($var_lang_r, $lang_r) { if ($var_lang_r) { changer_langue($lang = $var_lang_r); } if ($lang_r) { # pour le cas ou on a fait appel au menu de changement de langue # (aide absente dans la langue x) changer_langue($lang = $lang_r); } else { $lang = $GLOBALS['spip_lang']; } return $lang; }
function exec_spiplistes_aide () { global $spip_lang; spiplistes_debug_log('exec_spiplistes_aide()'); $var_lang = _request('var_lang'); if (!changer_langue($var_lang)) { $var_lang = $spip_lang; changer_langue($var_lang); } $info = spiplistes_plugin_get_infos(spiplistes_get_meta_dir(_SPIPLISTES_PREFIX)); $nom = typo($info['nom']); $version = typo($info['version']); $f_lang = _DIR_PLUGIN_SPIPLISTES . 'docs/'._SPIPLISTES_EXEC_PREFIX.'aide_'.$var_lang.'html'; $fichier_aide_spiplistes = is_readable($f_lang) ? $f_lang : _DIR_PLUGIN_SPIPLISTES . 'docs/'._SPIPLISTES_EXEC_PREFIX.'aide_fr.html' ; if($content = file_get_contents($fichier_aide_spiplistes)) { // corrige les liens images $content = str_replace('../img_docs/', _DIR_PLUGIN_SPIPLISTES.'img_docs/', $content); // place les vars $pattern = array( '/@spiplistes_name@/' ,'/@spiplistes_version@/' ,'/\$LastChangedDate:/' ,'/\$EndLastChangedDate/' ,'/@_aide@/' ); $replacement = array( $nom , $version , '' , '' , _T('spiplistes:_aide') ); $content = preg_replace($pattern, $replacement, $content); echo($content); } else { aide_spiplistes_erreur(); } }
function formulaires_configurer_langue_traiter_dist() { $res = array('editable' => true); if ($lang = _request('changer_langue_site')) { include_spip('inc/lang'); // verif que la langue demandee est licite if (changer_langue($lang)) { ecrire_meta('langue_site', $lang); // le test a defait ca: utiliser_langue_visiteur(); $res['message_ok'] = _T('config_info_enregistree'); include_spip('inc/rubriques'); calculer_langues_rubriques(); } // le test a defait ca: utiliser_langue_visiteur(); } if (!$res['message_ok']) { $res['message_erreur'] = _L('erreur'); } return $res; }
/** * Sélectionne la langue donnée en argument et mémorise la courante * * Restaure l'ancienne langue si appellée sans argument. * * @note * On pourrait économiser l'empilement en cas de non changemnt * et lui faire retourner `False` pour prevenir l'appelant * Le noyau de Spip sait le faire, mais pour assurer la compatibilité * cette fonction retourne toujours non `False` * * @uses changer_langue() * @param null|string $lang * - string : Langue à appliquer, * - null : Pour restituer la dernière langue mémorisée. * @return string * - string Langue utilisée. **/ function lang_select($lang = NULL) { static $pile_langues = array(); if (!function_exists('changer_langue')) { include_spip('inc/lang'); } if ($lang === NULL) { $lang = array_pop($pile_langues); } else { array_push($pile_langues, $GLOBALS['spip_lang']); } if (isset($GLOBALS['spip_lang']) and $lang == $GLOBALS['spip_lang']) { return $lang; } changer_langue($lang); return $lang; }
function traiter_formulaires_dynamiques($get=false){ static $post = array(); static $done = false; if ($get) return $post; if ($done) return false; $done = true; if (!($form = _request('formulaire_action') AND $args = _request('formulaire_action_args'))) return false; // le hit peut continuer normalement include_spip('inc/filtres'); if (($args = decoder_contexte_ajax($args,$form))===false) { spip_log("signature ajax form incorrecte : $form"); return false; // continuons le hit comme si de rien etait } else { include_spip('inc/lang'); // sauvegarder la lang en cours $old_lang = $GLOBALS['spip_lang']; // changer la langue avec celle qui a cours dans le formulaire // on la depile de $args car c'est un argument implicite masque changer_langue(array_shift($args)); $verifier = charger_fonction("verifier","formulaires/$form/",true); $post["erreurs_$form"] = pipeline( 'formulaire_verifier', array( 'args'=>array('form'=>$form,'args'=>$args), 'data'=>$verifier?call_user_func_array($verifier,$args):array()) ); if ((count($post["erreurs_$form"])==0)){ $rev = ""; $retour = ""; if ($traiter = charger_fonction("traiter","formulaires/$form/",true)) $rev = call_user_func_array($traiter,$args); $rev = pipeline( 'formulaire_traiter', array( 'args'=>array('form'=>$form,'args'=>$args), 'data'=>$rev) ); // le retour de traiter peut avoir 3 formats // - simple message texte // - tableau a deux entrees ($editable,$message) // - tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx) // le dernier format est celui conseille car il permet le pipelinage, en particulier // en y passant l'id de l'objet cree/modifie // si message_erreur est present, on considere que le traitement a echoue // cas du message texte simple if (!is_array($rev)){ $post["message_ok_$form"] = $rev; } // cas du tableau deux valeurs simple (ancien format, deconseille) elseif (count($rev)==2 AND !array_key_exists('message_ok',$rev) AND !array_key_exists('message_erreur',$rev) AND !array_key_exists('redirect',$rev)) { $post["editable_$form"] = reset($rev); $post["message_ok_$form"] = end($rev); } // cas du tableau explicite (conseille) else { // verifier si traiter n'a pas echoue avec une erreur : if (isset($rev['message_erreur'])) { $post["erreurs_$form"]["message_erreur"] = $rev['message_erreur']; } else { // sinon faire ce qu'il faut : if (isset($rev['message_ok'])) $post["message_ok_$form"] = $rev['message_ok']; if (isset($rev['editable'])) $post["editable_$form"] = $rev['editable']; // si une redirection est demandee, appeler redirigae_formulaire qui choisira // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue) if (isset($rev['redirect']) AND $rev['redirect']){ include_spip('inc/headers'); list($masque,$message) = redirige_formulaire($rev['redirect'], '','ajaxform'); $post["message_ok_$form"] .= $message; $retour .= $masque; } } } } // si le formulaire a ete soumis en ajax, on le renvoie direct ! if (_request('var_ajax')){ if (find_in_path('formulaire_.php','balise/',true)) { include_spip('inc/actions'); include_spip('public/assembler'); array_unshift($args,$form); $retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn',$args),false); // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7 // sans cela le formulaire n'est pas actif apres le hit ajax $retour = "<br class='bugajaxie' style='display:none;'/>".$retour; ajax_retour($retour,false); return true; // on a fini le hit } } // restaurer la lang en cours changer_langue($old_lang); } return false; // le hit peut continuer normalement }
/** * Initialise la langue pour un visiteur du site * * La langue est choisie dans cet ordre : * - Dans le cookie 'spip_lang' ou 'spip_lang_ecrire' s'il existe (selon l'espace public ou privé). * - Sinon dans la session du visiteur. * - Sinon dans une des langues définie en préférence du navigateur * - Sinon la langue du site * * @return string * La langue utilisée **/ function utiliser_langue_visiteur() { $l = !test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire'; if (isset($_COOKIE[$l])) { if (changer_langue($l = $_COOKIE[$l])) { return $l; } } if (isset($GLOBALS['visiteur_session']['lang'])) { if (changer_langue($l = $GLOBALS['visiteur_session']['lang'])) { return $l; } } if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) { if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) { if (changer_langue($l = strtolower($r[1]))) { return $l; } } } } return utiliser_langue_site(); }
/** * Traite la réponse de la banque * * @param array $config * configuration du module * @param array $response * Données envoyées par la banque * @return array(int $id_transaction, bool $paiement_ok) **/ function cmcic_traite_reponse_transaction($config, $response) { $mode = $config['presta']; if (isset($config['mode_test']) and $config['mode_test']) { $mode .= "_test"; } $config_id = bank_config_id($config); #spip_log("call_response : traitement d'une réponse de la banque $mode !", $mode); // on verifie que notre transaction existe bien $contenu = $response['texte-libre']; $contenu = urldecode($contenu); $contenu = @unserialize($contenu); if ($contenu === false) { $res = bank_transaction_invalide(0, array('mode' => $mode, 'erreur' => "contenu non deserialisable", 'log' => var_export($response, true))); cmcic_notifier_banque_erreur(); return $res; } // id & hash $id_transaction = $contenu['id']; $transaction_hash = $contenu['hash']; $lang = $contenu['lang']; // remettre la langue de l'utilisateur qui a demandé la transaction // puisque ici c'est le serveur cmcic qui fait le hit include_spip('inc/lang'); changer_langue($lang); // cette ligne id/hash doit exister ! if (!($row = sql_fetsel("*", "spip_transactions", array("id_transaction=" . intval($id_transaction), 'transaction_hash=' . sql_quote($contenu['hash']))))) { $res = bank_transaction_invalide($id_transaction, array('mode' => $mode, 'erreur' => "{$id_transaction} / {$transaction_hash} inconnu", 'log' => var_export($response, true))); cmcic_notifier_banque_erreur(); return $res; } // ici on a tout bon ! #spip_log("call_response : données de la banque correctes. On les traite.", $mode); switch ($response['code-retour']) { case "Annulation": // Payment has been refused // put your code here (email sending / Database update) // Attention : an autorization may still be delivered for this payment $retour = cmcic_gerer_transaction_annulee($config, $id_transaction, $response, $row); break; case "payetest": // Payment has been accepeted on the test server // put your code here (email sending / Database update) $retour = cmcic_gerer_transaction_payee($config, $id_transaction, $response, $row, true); break; case "paiement": // Payment has been accepted on the productive server // put your code here (email sending / Database update) $retour = cmcic_gerer_transaction_payee($config, $id_transaction, $response, $row); break; /*** ONLY FOR MULTIPART PAYMENT ***/ /*** ONLY FOR MULTIPART PAYMENT ***/ case "paiement_pf2": case "paiement_pf3": case "paiement_pf4": // Payment has been accepted on the productive server for the part #N // return code is like paiement_pf[#N] // put your code here (email sending / Database update) // You have the amount of the payment part in $CMCIC_bruteVars['montantech'] break; case "Annulation_pf2": case "Annulation_pf3": case "Annulation_pf4": // Payment has been refused on the productive server for the part #N // return code is like Annulation_pf[#N] // put your code here (email sending / Database update) // You have the amount of the payment part in $CMCIC_bruteVars['montantech'] break; } cmcic_notifier_banque_ok(); return $retour; }
function traiter_formulaires_dynamiques($get = false) { static $post = array(); static $done = false; if ($get) { return $post; } if ($done) { return false; } $done = true; if (!($form = _request('formulaire_action') and $args = _request('formulaire_action_args'))) { return false; } // le hit peut continuer normalement include_spip('inc/filtres'); if (($args = decoder_contexte_ajax($args, $form)) === false) { spip_log("signature ajax form incorrecte : {$form}"); return false; // continuons le hit comme si de rien etait } else { include_spip('inc/lang'); // sauvegarder la lang en cours $old_lang = $GLOBALS['spip_lang']; // changer la langue avec celle qui a cours dans le formulaire // on la depile de $args car c'est un argument implicite masque changer_langue(array_shift($args)); // inclure mes_fonctions et autres filtres avant verifier/traiter include_spip('public/parametrer'); // ainsi que l'API SQL bien utile dans verifier/traiter include_spip('base/abstract_sql'); $verifier = charger_fonction("verifier", "formulaires/{$form}/", true); $post["erreurs_{$form}"] = pipeline('formulaire_verifier', array('args' => array('form' => $form, 'args' => $args), 'data' => $verifier ? call_user_func_array($verifier, $args) : array())); // accessibilite : si des erreurs mais pas de message general l'ajouter if (count($post["erreurs_{$form}"]) and !isset($post["erreurs_{$form}"]['message_erreur'])) { $post["erreurs_{$form}"]['message_erreur'] = singulier_ou_pluriel(count($post["erreurs_{$form}"]), 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie'); } // si on ne demandait qu'une verif json if (_request('formulaire_action_verifier_json')) { include_spip('inc/json'); include_spip('inc/actions'); ajax_retour(json_encode($post["erreurs_{$form}"]), 'text/plain'); return true; // on a fini le hit } $retour = ""; if (count($post["erreurs_{$form}"]) == 0) { $rev = ""; if ($traiter = charger_fonction("traiter", "formulaires/{$form}/", true)) { $rev = call_user_func_array($traiter, $args); } $rev = pipeline('formulaire_traiter', array('args' => array('form' => $form, 'args' => $args), 'data' => $rev)); // le retour de traiter est // un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx) // il permet le pipelinage, en particulier // en y passant l'id de l'objet cree/modifie // si message_erreur est present, on considere que le traitement a echoue $post["message_ok_{$form}"] = ''; // on peut avoir message_ok et message_erreur if (isset($rev['message_ok'])) { $post["message_ok_{$form}"] = $rev['message_ok']; } // verifier si traiter n'a pas echoue avec une erreur : if (isset($rev['message_erreur'])) { $post["erreurs_{$form}"]["message_erreur"] = $rev['message_erreur']; // si il y a une erreur on ne redirige pas } else { // sinon faire ce qu'il faut : if (isset($rev['editable'])) { $post["editable_{$form}"] = $rev['editable']; } // si une redirection est demandee, appeler redirigae_formulaire qui choisira // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue) if (isset($rev['redirect']) and $rev['redirect']) { include_spip('inc/headers'); list($masque, $message) = redirige_formulaire($rev['redirect'], '', 'ajaxform'); $post["message_ok_{$form}"] .= $message; $retour .= $masque; } } } // si le formulaire a ete soumis en ajax, on le renvoie direct ! if (_request('var_ajax')) { if (find_in_path('formulaire_.php', 'balise/', true)) { include_spip('inc/actions'); include_spip('public/assembler'); array_unshift($args, $form); $retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false); // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7 // sans cela le formulaire n'est pas actif apres le hit ajax // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour; ajax_retour($retour, false); return true; // on a fini le hit } } // restaurer la lang en cours changer_langue($old_lang); } return false; // le hit peut continuer normalement }
function my_strtotime($la_date, $lang = null) { // format complet if (preg_match(',^(\\d+-\\d+-\\d+[T ]\\d+:\\d+(:\\d+)?)(\\.\\d+)?' . '(Z|([-+]\\d{2}):\\d+)?$,', $la_date, $match)) { $la_date = str_replace("T", " ", $match[1]) . " GMT"; return strtotime($la_date) - intval($match[5]) * 3600; } // YYYY if (preg_match(',^\\d{4}$,', $la_date, $match)) { return strtotime($match[0] . "-01-01"); } // YYYY-MM if (preg_match(',^\\d{4}-\\d{2}$,', $la_date, $match)) { return strtotime($match[0] . "-01"); } // YYYY-MM-DD hh:mm:ss if (preg_match(',^\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2}\\b,', $la_date, $match)) { return strtotime($match[0]); } // utiliser strtotime en dernier ressort // en nettoyant le jour qui prefixe parfois la date, suivi d'une virgule // et les UT qui sont en fait des UTC $la_date_c = preg_replace("/^\\w+,\\s*/ms", "", $la_date); $la_date_c = preg_replace("/UT\\s*\$/ms", "UTC", $la_date_c); if ($s = strtotime($la_date) or $s = strtotime($la_date_c)) { return $s; } // essayons de voir si le nom du mois est dans la langue du flux et remplacons le // par la version anglaise avant de faire strtotime if ($lang) { // "fr-fr" list($lang) = explode("-", $lang); static $months = null; if (!isset($months[$lang])) { $prev_lang = $GLOBALS['spip_lang']; changer_langue($lang); foreach (range(1, 12) as $m) { $s = _T("date_mois_{$m}"); $months[$lang][$s] = date("M", strtotime("2013-{$m}-01")); $s = _T("date_mois_" . $m . "_abbr"); $months[$lang][$s] = date("M", strtotime("2013-{$m}-01")); $months[$lang][trim($s, ".")] = date("M", strtotime("2013-{$m}-01")); } changer_langue($prev_lang); } spip_log($la_date_c, "dbgs"); foreach ($months[$lang] as $loc => $en) { if (stripos($la_date_c, $loc) !== false) { $s = str_ireplace($loc, $en, $la_date_c); if ($s = strtotime($s)) { return $s; } } } } // erreur spip_log("Impossible de lire le format de date '{$la_date}'"); return false; }
$GLOBALS['couleur_foncee'] = $GLOBALS['couleurs_spip'][$choix_couleur]['couleur_foncee']; $GLOBALS['couleur_claire'] = $GLOBALS['couleurs_spip'][$choix_couleur]['couleur_claire']; // charger l'affichage minimal et initialiser a la langue par defaut include_spip('inc/minipres'); // si la langue est specifiee par cookie alors ... if (isset($GLOBALS['_COOKIE']['spip_lang_ecrire'])) { $spip_lang_ecrire = $GLOBALS['_COOKIE']['spip_lang_ecrire']; // si pas authentifie, changer juste pour cette execution if ($var_auth) changer_langue($GLOBALS['_COOKIE']['spip_lang_ecrire']); // si authentifie, changer definitivement si ce n'est fait else { if (($spip_lang_ecrire <> $GLOBALS['auteur_session']['lang']) AND changer_langue($spip_lang_ecrire)) { spip_query("UPDATE spip_auteurs SET lang = " . _q($spip_lang_ecrire) . " WHERE id_auteur = " . intval($GLOBALS['auteur_session']['id_auteur'])); $GLOBALS['auteur_session']['lang'] = $var_lang_ecrire; $session = charger_fonction('session', 'inc'); $session($GLOBALS['auteur_session']); } } } utiliser_langue_visiteur(); define('_TRANCHES', 10); // // Gestion d'une page normale de l'espace prive //
function appliquer_modifs_config($purger_skel=false) { if (($i = _request('adresse_site'))!==NULL){ if (!strlen($i)) {$GLOBALS['profondeur_url']=_DIR_RESTREINT?0:1;$i = url_de_base();} $_POST['adresse_site'] = preg_replace(",/?\s*$,", "", $i); } // provoquer l'envoi des nouveautes en supprimant le fichier lock if (_request('envoi_now')) { spip_unlink(_DIR_TMP . 'mail.lock'); } // Purger les squelettes si un changement de meta les affecte if ($i = _request('post_dates') AND ($i != $GLOBALS['meta']["post_dates"])) $purger_skel = true; if ($accepter_forum = _request('forums_publics') AND ($accepter_forum != $GLOBALS['meta']["forums_publics"])) { $purger_skel = true; $accepter_forum = substr($accepter_forum,0,3); } // Appliquer les changements de moderation forum // forums_publics_appliquer : futur, saufnon, tous if (in_array($appliquer = _request('forums_publics_appliquer'), array('tous', 'saufnon') )) { $sauf = ($appliquer == 'saufnon') ? "accepter_forum != 'non'" : ''; sql_updateq('spip_articles', array('accepter_forum'=>$accepter_forum), $sauf); } if ($accepter_forum == 'abo') ecrire_meta('accepter_visiteurs', 'oui'); if ($i = _request('langues_auth') AND is_array($i)) { set_request('langues_multilingue', join($i, ",")); } // Modification du reglage accepter_inscriptions => vider le cache // (pour repercuter la modif sur le panneau de login) if (($i = _request('accepter_inscriptions') AND $i != $GLOBALS['meta']['accepter_inscriptions']) OR ($i = _request('accepter_visiteurs') AND $i != $GLOBALS['meta']['accepter_visiteurs'])) { include_spip('inc/invalideur'); suivre_invalideur("1"); # tout effacer } foreach(liste_metas() as $i => $v) { if (($x =_request($i))!==NULL) ecrire_meta($i, $x); elseif (!isset($GLOBALS['meta'][$i])) ecrire_meta($i, $v); } if ($lang = _request('changer_langue_site')) { include_spip('inc/lang'); // verif que la langue demandee est licite if (changer_langue($lang)) { ecrire_meta('langue_site', $lang); } // le test a defait ca: utiliser_langue_visiteur(); } if ($purger_skel) { include_spip('inc/invalideur'); purger_repertoire(_DIR_SKELS); } }
function aide_index_frame($var_lang_r, $lang_r, $frame, $aide, $help_server) { global $spip_lang; if ($var_lang_r) changer_langue($lang = $var_lang_r); if ($lang_r) # pour le cas ou on a fait appel au menu de changement de langue # (aide absente dans la langue x) changer_langue($lang = $lang_r); else $lang = $spip_lang; // L'aide correspondant a la langue demandee est dans un cache // reposant sur la date du fichier indiquant la version de SPIP // (approximatif, mais c'est deja qqch) $path = $spip_lang . "-aide.html"; $md5 = md5(serialize($help_server)); $fichier = _DIR_AIDE . substr($md5,0,16) . "-" . $path; $lastm = is_readable($fichier) ? filemtime($fichier) : 0; $lastversion = @filemtime(_DIR_RESTREINT . 'inc_version.php'); if (!($lastm AND ($lastm >= $lastversion))) { $contenu = help_fichier_contenu($spip_lang, $path, $help_server); // mettre en cache (tant pis si echec) sous_repertoire(_DIR_AIDE,'','',true); if ($contenu) ecrire_fichier ($fichier, $contenu); $lastm = time(); } $titre = _T('info_aide_en_ligne'); if (!$frame) { echo _DOCTYPE_AIDE, html_lang_attributes(); echo help_frame_frame($titre, $aide, $lang); echo "\n</html>"; } else { header("Content-Type: text/html; charset=utf-8"); if (!isset($contenu)) { lire_fichier($fichier, $contenu); } if (!$contenu) { include_spip('inc/minipres'); echo minipres(_T('forum_titre_erreur'), "<div><a href='" . $GLOBALS['home_server'] . "'>" . $help_server[0] . "</a> $aide : ". _T('aide_non_disponible'). "</div><br /><div align='right'>". menu_langues('var_lang_ecrire'). "</div>"); // Envoie le not-modified-since si possible, sinon envoie tout } elseif (!help_lastmodified($lastm)) { echo _DOCTYPE_AIDE, html_lang_attributes(); if ($frame === 'menu') { $contenu = help_menu_rubrique($aide, $contenu); echo help_frame_menu($titre, $contenu, $lang); } else { if ($aide) { $contenu = help_section($aide, $contenu); if (!$contenu) spip_log("aide inconnue $aide dans " . substr($contenu, 0, 150)); } echo help_frame_body($titre, $aide, $contenu, $lang); } echo "\n</html>"; } } }
function lang_select ($lang=NULL) { static $pile_langues = array(); include_spip('inc/lang'); if ($lang === NULL) $lang = array_pop($pile_langues); else { array_push($pile_langues, $GLOBALS['spip_lang']); } if ($lang == $GLOBALS['spip_lang']) return $lang; changer_langue($lang); return $lang; }