diff options
author | Dries Buytaert <dries@buytaert.net> | 2011-10-01 15:44:35 -0400 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2011-10-01 15:44:35 -0400 |
commit | c8e7100a060ffc9f60604caa373f5c57883b4bfb (patch) | |
tree | 843e371031de8db8d829ce417dac093a62c5140f | |
parent | 6395a07329e9a67e7750b7b9023d1479e577980f (diff) | |
download | brdo-c8e7100a060ffc9f60604caa373f5c57883b4bfb.tar.gz brdo-c8e7100a060ffc9f60604caa373f5c57883b4bfb.tar.bz2 |
- Patch #1250800 by attiks, dereine: language domain should work regardless of ports or protocols.
-rw-r--r-- | includes/locale.inc | 14 | ||||
-rw-r--r-- | modules/locale/locale.admin.inc | 2 | ||||
-rw-r--r-- | modules/locale/locale.test | 4 |
3 files changed, 13 insertions, 7 deletions
diff --git a/includes/locale.inc b/includes/locale.inc index 6154cf3c3..02653a3c5 100644 --- a/includes/locale.inc +++ b/includes/locale.inc @@ -207,10 +207,16 @@ function locale_language_from_url($languages) { case LOCALE_LANGUAGE_NEGOTIATION_URL_DOMAIN: foreach ($languages as $language) { - $host = parse_url($language->domain, PHP_URL_HOST); - if ($host && ($_SERVER['HTTP_HOST'] == $host)) { - $language_url = $language->language; - break; + // Skip check if the language doesn't have a domain. + if ($language->domain) { + // Only compare the domains not the protocols or ports. + // Remove protocol and add http:// so parse_url works + $host = 'http://' . str_replace(array('http://', 'https://'), '', $language->domain); + $host = parse_url($host, PHP_URL_HOST); + if ($_SERVER['HTTP_HOST'] == $host) { + $language_url = $language->language; + break; + } } } break; diff --git a/modules/locale/locale.admin.inc b/modules/locale/locale.admin.inc index 01cee134d..174349750 100644 --- a/modules/locale/locale.admin.inc +++ b/modules/locale/locale.admin.inc @@ -307,7 +307,7 @@ function _locale_languages_common_controls(&$form, $language = NULL) { '#title' => t('Language domain'), '#maxlength' => 128, '#default_value' => @$language->domain, - '#description' => t('URL <strong>including protocol</strong> to use for this language, if your <em>Detection and selection</em> settings use URL domains. For the default language, this value may be left blank. <strong>Modifying this value may break existing URLs. Use with caution in a production environment.</strong> Example: Specifying "http://example.de" or "http://de.example.com" as language domains for German results in URLs like "http://example.de/contact" and "http://de.example.com/contact", respectively.'), + '#description' => t('The domain name to use for this language if URL domains are used for <em>Detection and selection</em>. Leave blank for the default language. <strong>Changing this value may break existing URLs.</strong> Example: Specifying "de.example.com" as language domain for German will result in an URL like "http://de.example.com/contact".'), ); $form['direction'] = array('#type' => 'radios', '#title' => t('Direction'), diff --git a/modules/locale/locale.test b/modules/locale/locale.test index ec9d1d82f..6d8ae94b2 100644 --- a/modules/locale/locale.test +++ b/modules/locale/locale.test @@ -1929,8 +1929,8 @@ class LocaleUILanguageNegotiationTest extends DrupalWebTestCase { $this->assertResponse(404, "Unknown language path prefix should return 404"); // Setup for domain negotiation, first configure the language to have domain - // URL. - $edit = array('prefix' => '', 'domain' => "http://$language_domain"); + // URL. We use https and a port to make sure that only the domain name is used. + $edit = array('prefix' => '', 'domain' => "https://$language_domain:99"); $this->drupalPost("admin/config/regional/language/edit/$language", $edit, t('Save language')); // Set the site to use domain language negotiation. |