comment rediriger proprement www.mon-site.com vers www.mon-site.com/en ?

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Voilà, je crée un site bilingue sous Drupal, français-anglais. La langue par défaut est l'anglais. Je voudrais créer une redirection automatique qui permet à qqun qui tape www.mon-site.com dans son navigateur de tomber directement sur www.mon-site.com/en.

Le but est d'empêcher le navigateur de déterminer la langue par défaut et de forcer l'affichage du site en anglais sur www.mon-site.com. Quelle manière propre et simple de faire ça ? J'imagine que le fichier htaccess est un bon candidat.

Je précise que le site www.mon-site.com est installé dans sites/mon-site.com et non dans sites/default (prévision de multisite).

Version de Drupal : 

configuration du site/toutes les langues/configurer et sélectionner "Préfixe de chemin avec solution dégradée." Ensuite, tu reviens sur l'onglet des langues et tu configures le prefix de l'anglais "en"

Merci. Mais ça, c'est déjà fait :)

Mon problème est autre : je veux parler du tout premier accès au site. Quand tu te connectes au site pour la 1ère fois et que tu tapes le nom de domaine principal : mon-site.com (sans préfixe).

Et bien, là, tu tombes pas sur mon-site.com/en, même si la langue anglaise est définie par défaut, préfixée avec /en, etc. Dès que tu te mets à naviguer sur le site, là ça va, un lien vers le home du domaine te ramène bien sur mon-site.com/en ou mon-site.com/fr avec le bon préfixe.

Mais le pb se pose pour le tout premier accès au site. Habituellement on s'en fiche car, en France, la langue par défaut du site est souvent le... français. Mais, là, je suis sur un projet où le visiteur doit tomber sur la version anglaise du site, même quand il se connecte depuis Paris avec un browser qui croit qu'il préfère le français. Bref, je veux que qqun qui arrive sur le domaine principal lors de son tout premier accès tombe sur la version english. Chez moi, ça le fait pas. Alors comment faire ?

Plus clair, comme ça ?

Oui effectivement plus clair :)

Alors il existe peut-être "ben-voyons-y-a-un-module-qui-fait-ça-déjà", mais moi ce que je ferais c'est un module avec juste un hook_init dans lequel je collerais ce code :

<?php
function mon_module_init() {
 
// La liste des langues actives
   
$active_languages = language_list('enabled');
   
$active_languages=$active_languages[1];
   
  
// Recherche du préfixe dans l'URL
   
$args = explode('/', trim(request_uri(), '/'));
   
$prefix = array_shift($args);
 
  
// Si l'URL contient un préfixe valide, on lache l'afaire
   
if ($prefix) {
  foreach (
$active_languages as $active_language) {
     if (
$active_language->prefix==$prefix) {
            return;
        }
   }
 }
 
  
drupal_goto($_GET['q']);
}
?>

L'idée est simplement de vérifier que le chemin ne contient pas de préfixe valide, et si c'est le cas de faire un drupal_goto sur le chemin qui, si ton système de langue est proprement configuré, ira directement sur l'URL avec le préfixe correspondant à tes réglages.

Je n'ai encore jamais créé de module de mes propres mains :)

Suffit-il de copier ce code dans un fichier mon_module.module ?
Le tout en suivant les consignes données ici ?

Si j'ai bien compris, un module a minima, c'est seulement un fichier .info et un fichier .module ?

Mille merci !

En tout cas, c'est ce que je viens de faire ! J'ai créé un banal module composé de 2 fichiers : default_lang_redirect.info et default_lang_redirect.module.

Dans le fichier default_lang_redirect.module, j'ai collé ton code en omettant bien le tag fermant de php, et on dirait que ça marche !