Comment utiliser le même site avec 2 noms de domaines et chacun sa langue

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;   
}

Bonjour,

Vos articles sont traduit en multi partout ? Pas en activant les langues en plus ?

Cordialement

C’est un plugin que j’ai codé il y a bien longtemps, mais il me semble qu’il pourrait te donner des indications sur comment résoudre ta problématique sans forker SPIP.

Voir : autolang_options.php · master · spip-contrib-extensions / autolang · GitLab

Bonjour,
oui mes articles sont traduits, certains sont en multi, certains ont 2 articles, un par langue.
Voir sur modelevivant.art en changeant de langue.

Bonjour,
je ne vois pas la solution du problème avec ce plugin?
Je veux juste que la langue par défaut dépende du domaine, car
define('_LANGUE_PAR_DEFAUT', 'xx'); est inopérant sans ma modification!

Alors le plugins multidomaines peut géré cela de mémoire

Bonjour Pierre,
J’avais déjà utilisé dans le cas d’un site avec des sous-sites (sous-domaine).
Mais ce n’est pas mon cas de figure ici.
Le site est unique ici et peut être utilisé dans les deux langues par les deux domaines.
Il est indiqué dans la doc: Actuellement, Multidomaines ne gère pas de domaine par langue.
Je ne comprends pas à quoi sert define('_LANGUE_PAR_DEFAUT', 'xx'); si spip n’en tient pas compte?

Est-ce que tu as essayé de surcharger la fonction que tu modifies comme expliqué ici Surcharger un fichier - Programmer avec SPIP 4 ?
SI je comprends bien ta modification devrait être dans squelettes/inc/lang.php

En effet, j’ai copié le fichier inc/lang.php dans mon dossier squelettes, bonne idée.
Mais ça ne change pas le problème, il faudra quand même qu’a chaque mise à jour, je vérifie que ce fichier n’a pas été modifié.
Je pense toujours que spip devrait prendre en compte ce _LANGUE_PAR_DEFAUT défini dans mes_options.php

Bah, le risque est moindre.

Je crois qu’il faudrait faire un ticket dans spip / ecrire · GitLab

Bonsoir,

Il gère des domaines par secteur, si tu as un secteur d’article FR et un secteur d’article EN c’est bon.

Bonsoir,
Ce n’est pas le cas pour tous les articles, certains articles sont uniques et gérés avec des balises multi.