Bonjour,
Je propose une modification dans le code de spip à causer d’un problème de langue!
Le problème est simple:
J’ai un site unique multi-langues (français et anglais) qui marche bien, et de fait j’ai deux noms de domaines, un pour le français et un pour l’anglais. Je souhaite donc que le site avec le nom de domaine en français démarre en français, et celui en anglais démarre en anglais, cela est parfaitement logique!
Le problème c’est que spip propose bien de définir des titres et textes en plusieurs langues via la balise multi, mais ne définis dans la BD qu’une seule langue par défaut. J’ai donc effacé la langue du site dans le champ langue_site de la table meta, et définis une langue par défaut qui dépend du domaine dans mes_options.php, avec define(‹ _LANGUE_PAR_DEFAUT ›, ‹ xx ›); et en mettant $GLOBALS[‹ forcer_lang ›] = true;
Mais spip n’en a que cure, et me force la langue ar dans le meta.
J’ai donc forcé la récupération de la langue dans la fonction utiliser_langue_site du fichier lang.php
if (defined('_LANGUE_PAR_DEFAUT')) {
$GLOBALS['meta']['langue_site'] = _LANGUE_PAR_DEFAUT;
changer_langue(_LANGUE_PAR_DEFAUT, $liste_langues);
return _LANGUE_PAR_DEFAUT;
}
A mon avis, il ne faudrait pas forcer la langue dans le meta si 1) elle n’est pas définie 2) une langue est définie par défaut dans mes_options.php, et dans ce cas la récupérer.
Du coup, je suis obligé de reporter la modification à chaque mise à jour de spip!
Voici mon code, je pense qu’il sera utile à ceux qui ont le même problème que moi (nom de domaine: modelevivant.art):
$GLOBALS['forcer_lang'] = true;
if (array_key_exists("SERVER_NAME", $_SERVER) && strpos($_SERVER['SERVER_NAME'], 'modelevivant') !== false)
define('_LANGUE_PAR_DEFAUT', 'fr');
else
define('_LANGUE_PAR_DEFAUT', 'en');
// redefine balise URL_SITE_SPIP, returning current domain name
function get_cur_domain() {
// Get protocol
if (isset($_SERVER["HTTPS"]) && strtolower($_SERVER["HTTPS"]) == "on" )
{ $protocol = "https"; }
else { $protocol = "http"; }
// Get host
if(array_key_exists("SERVER_NAME", $_SERVER) && $_SERVER["SERVER_NAME"] != "") { $host = $_SERVER["SERVER_NAME"]; }
elseif(array_key_exists("HTTP_HOST", $_SERVER) && $_SERVER["HTTP_HOST"] != "") { $host = $_SERVER["HTTP_HOST"]; }
return htmlspecialchars($protocol."://".$host, ENT_QUOTES);
}
function balise_URL_SITE_SPIP($p) {
$p->code = 'get_cur_domain()';
return $p;
}