summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/locale.inc14
-rw-r--r--modules/locale/locale.admin.inc2
-rw-r--r--modules/locale/locale.test4
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.