답은 : Drupal 7에서는 하나의 언어로 여러 도메인을 사용할 수 없으며, 내가 아는 한 해당 기능을 추가하는 모듈이 없습니다.
그러나 어쨌든 이러한 목표를 달성하기 위해서는 해결 방법이 있습니다. 위에서 언급 한 것처럼 언어 도메인의 문제점은 언어 별 경로 별칭이 있고 Drupal 핵심 함수 url () 로 작성된 모든 내부 경로 가 절대 경로로 작성된다는 것 입니다. 해당 동작을 담당하는 기능 은 다음과 같습니다 .
locale_language_url_rewrite_url(&$path, &$options)
해당 기본 언어에 대한 언어 도메인을 설정하지 마십시오. 그렇게하지 않으면 Drupal은 xyz.example.com 도메인을 사용하는 경우 기본 언어에 대한 절대 경로를 만들지 않습니다 . 여기서 xyz.example.com이 어떤 언어의 도메인으로 설정되어 있지 않은 경우 Drupal은 모든 URL이 상대적이므로 URL을 클릭하면 하위 도메인이 유지됩니다. 그러나 위에서 설명한대로 언어에 민감한 하위 도메인을 원할 경우이 방법을 사용할 수 없습니다.
영어 : en.example.com 및 en.m.example.com
독일어 : de.example.com 및 de.m.example.com 등
두 번째 방법은 hook_language_init 함수를 사용하여 모든 유형의 현재 언어를 변경하는
것 입니다. 위의 예제를 작동시키기 위해 다음 코드를 사용합니다.
:
# 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;
}
}
}