एक भाषा के लिए कई डोमेन कैसे सेट करें


15

मेरे पास भाषा का पता लगाने के लिए en.example.com जैसे उप-डोमेन का उपयोग करके ड्रुपल 7 के साथ एक बहुभाषी साइट है। सब कुछ उम्मीद की तरह काम करता है, लेकिन मेरे पास वेबसाइट witch का एक मोबाइल संस्करण है जिसे मैं en.m.example.com आदि डोमेन द्वारा एक्सेस करना चाहता हूँ। मैं यह कैसे करूँ? मैं admin/config/regional/languageकेवल एक डोमेन प्रति भाषा में सेट कर सकता हूं , लेकिन उस काम को करने के लिए दो सेट करने होंगे, जैसे:

for English:
en.example.com & en.m.example.com

for German:
de.example.com & de.m.example.com
etc.

(विकिपीडिया की जैसी संरचना है, मैं चाहूंगा।) समस्या यह है, कि भाषा चयन के लिए उप-डोमेन का उपयोग करते हुए, ड्रुपल सभी आंतरिक लिंक को पूर्ण पथ बनाता है। उदाहरण के लिए, एक मेनू लिंक इस प्रकार बनाया जाएगा:

<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>

इसलिए, मैं Apache के साथ एक डोमेन उपनाम बना सकता हूं, en.m.example.com से en.example.com पर अनुरोध भेजने के लिए, लेकिन सभी आंतरिक लिंक उपयोगकर्ता को मोबाइल संस्करण से वापस सामान्य में लाएंगे। इस समस्या का समाधान किस प्रकार से किया जा सकता है?


1
यह वास्तव में आपके सवाल का सही जवाब नहीं देता है, लेकिन बेहतर होगा कि आपके पास अलग मोबाइल साइट न हों। बेहतर होगा कि मोबाइल के लिए उत्तरदायी लेआउट का परिवर्तन किया जाए। यह एक बेहतर अनुभव देता है, इसे बनाए रखना आसान है, और आप ब्राउज़र का पता लगाने और साइटों को बदलने के नकारात्मक को छोड़ देते हैं। - हालांकि इसे डिजाइन / थीम में थोड़े निवेश की आवश्यकता होगी।
रॉबी

धन्यवाद, मुझे पता है कि यह आम तौर पर सबसे अच्छा है। लेकिन मेरी वेबसाइट का उपयोग मामला मोबाइल और सामान्य उपयोगकर्ताओं के लिए अलग है। तो कार्य और सामग्री, जो वितरित किए जाएंगे, अलग-अलग होंगे। इसलिए मेरे पास वह विकल्प नहीं है।
15:59 पर user5950

मुझे यह समझ में नहीं आता है! यह एक बुनियादी बात है। मोबाइल विषय के लिए उप डोमेन के साथ संयोजन में भाषा डोमेन के साथ Drupal का उपयोग करना संभव है। वहाँ किसी को भी वहाँ Drupal के साथ ऐसा नहीं है?
1559 पर user5950

जवाबों:


5

एक बार जब आप Drupal को अलग-अलग भाषाओं में अलग-अलग डोमेन में सेट करने के लिए सेट करते हैं, तो आपको अपने वेब सर्वर को एक ही Drupal साइट पर कई डोमेन से अनुरोध भेजने की आवश्यकता होती है।

अपाचे में, आपको .conf (httpd.conf)फ़ाइल को संपादित करने और सभी विभिन्न डोमेन में उपनाम जोड़ने की आवश्यकता होगी । उदाहरण के लिए:

ServerName en.example.com
ServerAlias en.m.example.com

इसके अलावा, आपको अपने सर्वर के लिए अलग-अलग भाषाओं में सभी डोमेन नामों के लिए डोमेन नाम सर्वर (DNS) को भी इंगित करना होगा।


वह मेरे लिए काम नहीं करता है। समस्या यह है कि ऊपर वर्णित भाषा चयन के लिए अलग-अलग डोमेन का उपयोग करने से सभी आंतरिक लिंक पूर्ण पथ के रूप में बनते हैं। इसलिए मैं en.example.com & en.m.example.com पेज पर पहुंच सकता हूं, लेकिन en.m.example.com के अंतर्गत सभी आंतरिक लिंक में दूसरा सब डोम नहीं है, उदाहरण के लिए एक उप पेज लिंक का लिंक दिखता है en.example.com/node/1234 की तरह, लेकिन en.m.example.com/node/1234 की तरह दिखना चाहिए।
user5950

2

इसका उत्तर है: Drupal 7 के साथ एक भाषा के लिए कई डोमेन का उपयोग करना संभव नहीं है और जहाँ तक मुझे पता है - उस कार्यक्षमता को जोड़ने वाला कोई भी मॉड्यूल नहीं है।

लेकिन इस उद्देश्य को प्राप्त करने के लिए, वहाँ वर्कअराउंड है: जैसा कि ऊपर उल्लेख किया गया है, भाषा डोमेन के साथ समस्या यह है कि सभी आंतरिक पथों में एक भाषा विशिष्ट पथ उपनाम है और जो Drupal core function url () के साथ निरपेक्ष पथ के रूप में बनाए जाते हैं। उस व्यवहार के लिए जिम्मेदार कार्य है :

locale_language_url_rewrite_url(&$path, &$options)
  1. उस डिफ़ॉल्ट भाषा के लिए भाषा डोमेन सेट न करें। यदि आप ऐसा नहीं करते हैं, तो Drupal डिफ़ॉल्ट भाषा के लिए पूर्ण पथ नहीं बनाएगा यदि - उदाहरण के लिए - डोमेन xyz.example.com का उपयोग करें , जहाँ xyz.example.com किसी भाषा के लिए डोमेन के रूप में सेट नहीं है, Drupal बनाएगा अल urls रिश्तेदार और इसलिए किसी भी आंतरिक लिंक पर क्लिक करने से उपडोमेन रहेगा। लेकिन आप उस विधि का उपयोग नहीं कर सकते, यदि आप ऊपर बताए अनुसार भाषा संवेदनशील उप डोमेन चाहते हैं:

    अंग्रेजी के लिए: en.example.com & en.m.example.com

    जर्मन के लिए: de.example.com & de.m.example.com आदि।

  2. तो दूसरी विधि यह होगी, कि फ़ंक्शन के साथ सभी प्रकार की वर्तमान भाषा को बदलना: हुक_लंगेज_इनिट । ऊपर दिए गए उदाहरण को काम करने के लिए मैं निम्नलिखित कोड का उपयोग करता हूं:

:

# hook_language_init()
function my_module_language_init() {
  // Current path
  $url = $_SERVER['SERVER_NAME'];

  // Global language object and get languages
  global $language;
  $languages = language_list();

  // Get all subdomains
  $reg = '/^((?:([^\.]+)\.)?(?:([^\.]+)\.))?([^\.]+\.[^\.]+)$/i';
  preg_match($reg, $url, $up);

  # We won't allow all subdomains, only 'm.' and 'm2.'
  # Change this for an other use case.
  if ($up[3] == "m2" || $up[3] == "m") {

    if (!isset($languages[$up[2]])) {
      $langcode = $language->language;
    } else { 
      $langcode = $up[2];
    }
    $new_language         = $languages[$langcode];
    $new_language->domain = $new_language->language . "." . $up[3] .".". $up[4];

    // Set url options
    $options['language'] = $new_language;
    $types = language_types();

    // Set all language types and language domains
    foreach ($types as $type) {
      $GLOBALS[$type] = $new_language;
      $GLOBALS[$type]->domain = $new_language->domain;
    }
  }
}

मेरा मानना ​​है कि यह मॉड्यूल कुछ ऐसा ही करता है: drupal.org/project/language_multidomain BUT ... मुझे आश्चर्य है कि इस हुक का उपयोग करना क्यों संभव नहीं है: api.drupal.org/api/drupal/modules -system.language.api.php/! ... (जो भाषा मॉड्यूल प्रदाता को एकाधिक डोमेन को संभालने के लिए परिभाषित करता है)
leon.nk

@ leon.nk मुझे वह मॉड्यूल नहीं मिला, उस संकेत के लिए धन्यवाद। हो सकता है कि आप सही हों और हुक_लंगेज_नेगोशिएशन_इनफो उपयोग करने के लिए सही हुक है। मैं इसे आजमाऊंगा।
user5950

जाहिरा तौर पर language_multidomain मॉड्यूल किसी भी अधिक मौजूद नहीं है।
मथायस उरलिच

उपरोक्त हुक नहीं होना चाहिए हुक_लंगेज_इनिट () ? कोई हुक_एपी_लंगेज_इनिट () नहीं है । आपको भाषा स्विचर लिंक को हुक_लंगेज_स्विच_लिंक्स_ल्टर () के साथ भी अपडेट करना चाहिए ।
कोलन

@colan कस्टम मॉड्यूल कहा जाता है custom_apiऔर हुक hook_language_init()। साथ में है custom_api_language_init()। यह भ्रामक हो सकता है, इसलिए मैंने उस बिंदु को स्पष्ट करने के लिए उदाहरण को संपादित किया। आप सही हैं, _hook_language_switch_links_alter () का उपयोग करने के लिए बेहतर तरीका हो सकता है। लेकिन जैसा कि ऐसा लगता है कि लगभग कोई भी इस समस्या में दिलचस्पी नहीं रखता है, मुझे लगता है कि यह इस उदाहरण को फिर से लिखने के लायक नहीं हो सकता है।
user5950
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.