J'ai un site multilingue avec Drupal 7 utilisant des sous-domaines comme en.example.com pour détecter la langue. Tout fonctionne comme prévu, mais j'ai une version mobile du site Web que je veux être accessible par des domaines comme en.m.example.com etc. Comment dois-je procéder? Je peux définir admin/config/regional/language
un seul domaine par langue, mais je devrais en définir deux pour que cela fonctionne, comme:
for English:
en.example.com & en.m.example.com
for German:
de.example.com & de.m.example.com
etc.
(Je voudrais avoir la même structure que Wikipedia.) Le problème est que, en utilisant des sous-domaines pour la sélection de la langue, Drupal crée tous les liens internes comme des chemins absolus. Par exemple, un lien de menu sera créé comme:
<li class="menu-773"><a href="http://en.example.com/test" >test</a></li>
and not as
<li class="menu-773"><a href="/test" >test</a></li>
Ainsi, je pouvais créer un alias de domaine avec Apache, pour envoyer des demandes de en.m.example.com à en.example.com, mais tous les liens internes ramèneraient l'utilisateur de la version mobile à la normale. Comment puis-je résoudre ce problème?
Réponses:
Une fois que vous avez configuré Drupal pour servir différentes langues dans différents domaines, vous devez demander à votre serveur Web d'envoyer des demandes de plusieurs domaines au même site Drupal.
Dans Apache, vous devrez modifier le
.conf (httpd.conf)
fichier et ajouter des alias à tous les différents domaines. Par exemple:En plus de cela, vous devrez également pointer le serveur de noms de domaine (DNS) vers votre serveur pour tous les noms de domaine dans différentes langues.
la source
La réponse est: l'utilisation de plusieurs domaines pour une langue n'est pas possible avec Drupal 7 et il n'y a - à ma connaissance - aucun module qui ajoute cette fonctionnalité.
Mais pour atteindre cet objectif de toute façon, il existe une solution de contournement: Comme mentionné ci-dessus, le problème avec les domaines linguistiques est que tous les chemins internes qui ont un alias de chemin spécifique au langage et qui sont créés avec la fonction de base Drupal url () sont créés comme des chemins absolus. Responsable de ce comportement est la fonction :
Ne définissez pas de domaine linguistique pour cette langue par défaut. Si vous ne le faites pas, Drupal ne créera pas de chemins absolus pour la langue par défaut si - par exemple - utilisez le domaine xyz.example.com , où xyz.example.com n'est défini comme domaine pour aucune langue, Drupal créera toutes les URL relatives et ainsi cliquer sur n'importe quel lien interne gardera le sous-domaine. Mais vous ne pouvez pas utiliser cette méthode, si vous voulez avoir des sous-domaines sensibles à la langue comme décrit ci-dessus:
pour l'anglais: en.example.com & en.m.example.com
pour l'allemand: de.example.com & de.m.example.com etc.
La deuxième méthode serait donc de modifier le langage courant de tous les types avec la fonction: hook_language_init . J'utilise le code suivant pour faire fonctionner l'exemple ci-dessus:
:
la source
custom_api
et le crochethook_language_init()
. C'est ensemblecustom_api_language_init()
. Cela peut être déroutant, j'ai donc édité l'exemple pour clarifier ce point. Vous avez raison, utiliser ´hook_language_switch_links_alter () ´ peut être la meilleure façon. Mais comme il semble que presque personne ne s'intéresse à ce problème, je pense qu'il ne vaut peut-être pas la peine de réécrire cet exemple.