Avoir un site web multilingue avec concrete5 en utilisant nginx

 

Avoir un site web c'est bien, en plusieurs langues, c'est mieux. Pour ce faire nous allons utiliser des rewrite rules de nginx. Cela est bien évidemment transposable à n'importe quel serveur web un peu évolué.

L'idée de base est d'avoir une page d'accueil par langue située à la racine. Dans mon cas, j'ai la page fr, la page es et la page en. La page d'index est une page qui sert à proposer les choix de langue en cas d'erreur de détection de la langue. Un exemple ici. Lorsque qu'un navigateur demande un page, il envoie des informations sur les langues qu'il préfère, c'est le header accept_language. Nous allons donc utiliser ce header pour déterminer la langue et renvoyer vers la page appropriée.

if ( $http_accept_language ~ ^(..) ) {
set $lang $1;
}
if ( $lang ~* fr ) {
rewrite ^(/|/index.php)$ /fr/;
}
if ( $lang ~* en ) {
rewrite ^(/|/index.php)$ /en/;
}
if ( $lang ~* es ) {
rewrite ^(/|/index.php)$ /es/;
}

 

Il est à noter que l'on matche sur / ou /index.php histoire d'éviter des soucis.

Et voilà, il ne reste plus qu'à ajuster les blocks qui affiche le plan du site pour ne lister que les sous pages de la bonne langue.