De taalkeuze van de bezoeker forceren

De parameter forcer_lang

Het formulier #MENU_LANG slaat de geselecteerde taal op in een cookie. Deze cookie kan vervolgens worden gebruikt om de site opnieuw weer te geven in de taal die de gebruiker heeft gekozen. Een van de manieren om dit te doen is het definiëren van de globale variabele forcer_lang in het optiebestand.

$GLOBALS['forcer_lang'] = true;

Het specificeren van deze parameter geeft aan SPIP aan dat het systematisch een opgevraagde pagina moet omleiden door de lang URL-parameter toe te voegen met de waarde in de taal-cookie als die er is, en zo niet, dan met de code van de hoofdtaal van de site.

Deze globale forcer_lang code heeft echter ook een andere effect: tegelijkertijd wordt gespecificeerd dat de taalreeksen van de interface moeten worden weergegeven in de taal van de bezoeker, en niet in de taal die aan de artikelen en rubrieken is toegewezen.

Een andere toepassing van de cookie

Een andere mogelijkheid is om de voorkeur van de gebruiker te gebruiken. Niet door de omleiding te forceren via de lang URL-parameter, maar door gebruik te maken van SPIP’s set_request functie om een berekende lang parameter toe te voegen die SPIP later opnieuw zal gebruiken als het de _request functie aanroept.

Voorbeeld

Het onderstaande voorbeeld, gebruikt in een optiebestand, berekent de te gebruiken taal. Deze berekening gebeurt in twee stappen:

  • Controleer of de URL in het formaat http://naam.domain/taal/rest_van_de_url is, waarbij "taal" een van de talen is die voor de site zijn gedefinieerd (bijvoorbeeld "fr", "en" of "nl") en gebruik in zo’n geval de aldus ontdekte taal,
  • gebruik anders de functie utiliser_langue_visiteur() de taal van de cookie en anders de taal van de browser.

En als ten slotte de berekende taal verschilt van de cookie, dan wordt de cookie opnieuw aangemaakt.

// Systematisch de originele taal van de context toevoegen.
if (!$langue = _request('lang')) {
	include_spip('inc/lang');
	$langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
	// wanneer de taal is gedefinieerd in de URL (en/, fr/ of nl/), gebruik ze dan
	if (preg_match(',^' . $GLOBALS['meta']['adresse_site'] . '/(' . join('|',$langues) . ')/,', 'http://' . $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], $r)) {
		$langue = $r[1];
		changer_langue($langue);
	} else {	
		$langue = utiliser_langue_visiteur();
		if (!in_array($langue, $langues)) {
			$langue = $GLOBALS['meta']['langue_site'];
		}
	}
	// sla het op in $_GET
	set_request('lang', $langue);
}

// sla de taal op als een cookie...
if ($langue != $_COOKIE['spip_lang']) {
	include_spip('inc/cookie');
	spip_setcookie('spip_lang', $langue);
}

Auteur hanjo Gepubliceerd op: Aangepast: 12/03/23

Vertalingen: English, français, Nederlands