Ich habe eine mehrsprachige Site mit Drupal 7, die Subdomains wie en.example.com verwendet, um die Sprache zu erkennen. Alles funktioniert wie erwartet, aber ich habe eine mobile Version der Website, auf die ich über Domains wie en.m.example.com usw. zugreifen möchte. Wie mache ich das? Ich kann admin/config/regional/language
nur eine Domain pro Sprache festlegen, müsste aber zwei festlegen, damit das funktioniert, wie zum Beispiel:
for English:
en.example.com & en.m.example.com
for German:
de.example.com & de.m.example.com
etc.
(Ich hätte gerne die gleiche Struktur wie Wikipedia.) Das Problem ist, dass Drupal alle internen Links als absolute Pfade erstellt, indem Subdomains für die Sprachauswahl verwendet werden. Beispielsweise wird ein Menülink wie folgt erstellt:
<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>
So könnte ich mit Apache einen Domain-Alias erstellen, um Anfragen von en.m.example.com an en.example.com zu senden, aber alle internen Links würden den Benutzer von der mobilen Version zur normalen zurückbringen. Wie kann ich dieses Problem lösen?
Antworten:
Nachdem Sie Drupal so eingerichtet haben, dass verschiedene Sprachen in verschiedenen Domänen bereitgestellt werden, müssen Sie Ihren Webserver anweisen, Anforderungen von mehreren Domänen an dieselbe Drupal-Site zu senden.
In Apache müssen Sie die
.conf (httpd.conf)
Datei bearbeiten und allen verschiedenen Domänen Aliase hinzufügen. Beispielsweise:Darüber hinaus müssen Sie den Domain Name Server (DNS) für alle Domainnamen in verschiedenen Sprachen auf Ihren Server verweisen.
quelle
Die Antwort lautet: Die Verwendung mehrerer Domänen für eine Sprache ist mit Drupal 7 nicht möglich, und meines Wissens gibt es kein Modul, das diese Funktionalität hinzufügt.
Um dieses Ziel dennoch zu erreichen, gibt es eine Problemumgehung: Wie oben erwähnt, besteht das Problem bei Sprachdomänen darin, dass alle internen Pfade, die einen sprachspezifischen Pfadalias haben und mit der Drupal-Kernfunktion url () erstellt werden, als absolute Pfade erstellt werden. Verantwortlich für dieses Verhalten ist die Funktion :
Legen Sie keine Sprachdomäne für diese Standardsprache fest. Wenn Sie dies nicht tun, erstellt Drupal keine absoluten Pfade für die Standardsprache, wenn Sie beispielsweise die Domain xyz.example.com verwenden , wobei xyz.example.com für keine Sprache als Domain festgelegt ist Alle relativen URLs und das Klicken auf einen internen Link behalten die Subdomain. Sie können diese Methode jedoch nicht verwenden, wenn Sie sprachempfindliche Unterdomänen wie oben beschrieben haben möchten:
für Englisch: en.example.com & en.m.example.com
für Deutsch: de.example.com & de.m.example.com etc.
Die zweite Methode wäre also, die aktuelle Sprache aller Typen mit der Funktion zu ändern: hook_language_init . Ich benutze den folgenden Code, um das obige Beispiel zum Laufen zu bringen:
:
quelle
custom_api
und der Hookhook_language_init()
. Zusammen ist escustom_api_language_init()
. Vielleicht ist das verwirrend, deshalb habe ich das Beispiel bearbeitet, um diesen Punkt zu verdeutlichen. Sie haben Recht, wenn Sie ´hook_language_switch_links_alter () ´ verwenden, ist dies möglicherweise der bessere Weg. Da sich aber anscheinend fast niemand für dieses Problem interessiert, ist es meines Erachtens möglicherweise nicht sinnvoll, dieses Beispiel umzuschreiben.