summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/locale/locale.admin.inc20
-rw-r--r--modules/locale/locale.test5
2 files changed, 24 insertions, 1 deletions
diff --git a/modules/locale/locale.admin.inc b/modules/locale/locale.admin.inc
index e643f84c1..9189c7149 100644
--- a/modules/locale/locale.admin.inc
+++ b/modules/locale/locale.admin.inc
@@ -107,7 +107,9 @@ function theme_locale_languages_overview_form($variables) {
function locale_languages_overview_form_submit($form, &$form_state) {
$languages = language_list();
$default = language_default();
+ $url_prefixes = variable_get('locale_language_negotiation_url_part', LOCALE_LANGUAGE_NEGOTIATION_URL_PREFIX) == LOCALE_LANGUAGE_NEGOTIATION_URL_PREFIX;
$enabled_count = 0;
+
foreach ($languages as $langcode => $language) {
if ($form_state['values']['site_default'] == $langcode || $default->language == $langcode) {
// Automatically enable the default language and the language
@@ -115,6 +117,16 @@ function locale_languages_overview_form_submit($form, &$form_state) {
// value from that disabled checkbox).
$form_state['values']['enabled'][$langcode] = 1;
}
+
+ // If language URL prefixes are enabled we must clear language domains and
+ // assign a valid prefix to each non-default language.
+ if ($url_prefixes) {
+ $language->domain = '';
+ if (empty($language->prefix) && $form_state['values']['site_default'] != $langcode) {
+ $language->prefix = $langcode;
+ }
+ }
+
if ($form_state['values']['enabled'][$langcode]) {
$enabled_count++;
$language->enabled = 1;
@@ -122,19 +134,25 @@ function locale_languages_overview_form_submit($form, &$form_state) {
else {
$language->enabled = 0;
}
+
$language->weight = $form_state['values']['weight'][$langcode];
+
db_update('languages')
->fields(array(
'enabled' => $language->enabled,
'weight' => $language->weight,
+ 'prefix' => $language->prefix,
+ 'domain' => $language->domain,
))
->condition('language', $langcode)
->execute();
+
$languages[$langcode] = $language;
}
- drupal_set_message(t('Configuration saved.'));
+
variable_set('language_default', $languages[$form_state['values']['site_default']]);
variable_set('language_count', $enabled_count);
+ drupal_set_message(t('Configuration saved.'));
// Changing the language settings impacts the interface.
cache_clear_all('*', 'cache_page', TRUE);
diff --git a/modules/locale/locale.test b/modules/locale/locale.test
index 949505ff2..cf23d6b04 100644
--- a/modules/locale/locale.test
+++ b/modules/locale/locale.test
@@ -90,6 +90,11 @@ class LocaleConfigurationTest extends DrupalWebTestCase {
$this->assertNoFieldChecked('edit-site-default-en', t('Default language updated.'));
$this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+ // Check if a valid language prefix is added after changing the default
+ // language.
+ $this->drupalGet('admin/config/regional/language/edit/en');
+ $this->assertFieldByXPath('//input[@name="prefix"]', 'en', t('A valid path prefix has been added to the previous default language.'));
+
// Ensure we can't delete the default language.
$this->drupalGet('admin/config/regional/language/delete/' . $langcode);
$this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), t('Correct page redirection.'));