Saya memiliki situs multibahasa dengan Drupal 7 menggunakan subdomain seperti en.example.com untuk mendeteksi bahasa. Semuanya berfungsi seperti yang diharapkan, tetapi saya memiliki versi mobile dari situs web penyihir yang saya inginkan dapat diakses oleh domain seperti en.m.example.com dll. Bagaimana saya melakukan ini? Saya dapat menetapkan admin/config/regional/language
hanya satu domain per bahasa, tetapi harus menetapkan dua domain agar berfungsi, seperti:
for English:
en.example.com & en.m.example.com
for German:
de.example.com & de.m.example.com
etc.
(Saya ingin memiliki struktur yang sama dengan Wikipedia.) Masalahnya adalah, menggunakan subdomain untuk pemilihan bahasa, Drupal membuat semua tautan internal sebagai jalur absolut. Misalnya, tautan menu akan dibuat sebagai:
<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>
Jadi, saya dapat membuat alias domain dengan Apache, untuk mengirim permintaan dari en.m.example.com ke en.example.com, tetapi semua tautan internal akan mengembalikan pengguna dari versi seluler ke versi normal. Bagaimana saya bisa menyelesaikan masalah ini?
Jawaban:
Setelah menyiapkan Drupal untuk menyajikan berbagai bahasa di domain yang berbeda, Anda perlu menginstruksikan server web Anda untuk mengirim permintaan dari banyak domain ke situs Drupal yang sama.
Di Apache, Anda harus mengedit
.conf (httpd.conf)
file dan menambahkan alias ke semua domain yang berbeda. Sebagai contoh:Selain itu, Anda juga harus mengarahkan server nama domain (DNS) ke server Anda untuk semua nama domain dalam berbagai bahasa.
sumber
Jawabannya adalah: menggunakan beberapa domain untuk satu bahasa tidak dimungkinkan dengan Drupal 7 dan - sejauh yang saya tahu - tidak ada modul yang menambahkan fungsionalitas itu.
Namun untuk mencapai tujuan ini, ada solusi: Seperti disebutkan di atas, masalah dengan domain bahasa adalah, bahwa semua jalur internal yang memiliki alias jalur khusus bahasa dan dibuat dengan url fungsi inti Drupal () dibuat sebagai jalur absolut. Bertanggung jawab untuk perilaku itu adalah fungsinya :
Jangan tetapkan domain bahasa untuk bahasa default itu. Jika Anda tidak melakukannya, Drupal tidak akan membuat jalur absolut untuk bahasa default jika - misalnya - menggunakan domain xyz.example.com , di mana xyz.example.com tidak ditetapkan sebagai domain untuk bahasa apa pun, Drupal akan membuat al url relatif dan mengklik tautan internal apa pun akan membuat subdomain. Tetapi Anda tidak dapat menggunakan metode itu, jika Anda ingin memiliki subdomain sensitif bahasa seperti dijelaskan di atas:
untuk bahasa Inggris: en.example.com & en.m.example.com
untuk bahasa Jerman: de.example.com & de.m.example.com dll.
Jadi metode kedua adalah, untuk mengubah bahasa saat ini dari semua jenis dengan fungsi: hook_language_init . Saya menggunakan kode berikut, untuk membuat contoh di atas berfungsi:
:
sumber
custom_api
dan hookhook_language_init()
. Bersama itucustom_api_language_init()
. Mungkin ini membingungkan, jadi saya mengedit contoh untuk memperjelas hal itu. Anda benar, menggunakan ´hook_language_switch_links_alter () ´ mungkin merupakan cara yang lebih baik. Tetapi sepertinya hampir tidak ada orang yang tertarik dengan masalah ini, saya pikir mungkin tidak layak untuk menulis ulang contoh ini.