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