Effectivement, mais dans ce cas il s’agit d’un template, donc d’un élément et pas d’une ressource. Autrement dit c’est géré de la même manière qu’un snippet. Pour être tout à fait clair, Babel sert pour toute la partie "Ressources", et Lexicon pour toute la partie "Eléments".
J’en profite pour soulever ici un problème que je recontre en ce moment avec ces histoires de gestion de plusieurs langues. Je souhaite avoir un
plugin de changement de langue (dans la même optique que le lien proposé, sauf que je ne veux pas de la configuration avec un sous-domaine pour chaque langue, je préfère utiliser un "?lang=") qui possède les fonctionnalités suivantes :
- détection automatique de la langue du navigateur, et basculement vers le contexte correspondant lors du premier chargement de page
- possibilité de forcer à la main le contexte si l’utilisateur en fait la demande
- le site reste toujours dans le contexte courant (contexte persistant malgré les changements de pages), sauf si l’une des deux conditions ci-dessus impose le changement de contexte
Pour l’instant ça me donne ça :
<?php
/*
@param $_GET['lang']
*/
// ce snippet ne concerne pas le contexte "manager"
if ( $modx->context->get('key') != "mgr" ) {
// détecte la langue du navigateur
$langTmp = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang = strtolower(substr(chop($langTmp[0]),0,2));
// prend en compte la demande de l'utilisateur
$lang = ( !empty($_GET['lang']) )? $_GET['lang'] : $lang;
if ($modx->getOption('cultureKey') != $lang) {
// détruit l'environnement en cours
if ( $modx->checkSession( $modx->context->get('key') ) )
$modx->user->removeSessionContext( $modx->context->get('key') );
// charge le nouveau contexte
switch ($_GET['lang']) {
case '':
case 'fr':
$modx->initialize('web');
break;
case 'en':
default:
$modx->initialize('english');
break;
}
}
}
Mais il y a plusieurs problèmes :
- ayant mon navigateur configuré en Français, si je force la langue à "en" puis que je retire l’attribut ?lang=en de ma barre d’adresse, le site va automatiquement basculer vers le Français
- $modx->initialize() ne change pas (apparemment) le contexte de la page courante, et $modx->switchContext() ne convient pas car il ne concernerait que la page courante
Question : comment je pourrais m’y prendre autrement pour avoir un résultat satisfaisant (sachant que je commençais à connaître à peu près Evo, mais dans Revo pour l’instant je nage un peu) ?
Merci de toutes vos aides cumulées
(Pour répondre à l’une des questions de départ : ça n’est pas si facile que çela à implémenter, puisque certains composants gèrent correctement les contextes, mais d’autres sont manquants ou ne gèrent pas les contextes comme attendu... Il faut sûrement encore un peu de temps.)