diff --git a/modules/locale/locale.admin.inc b/modules/locale/locale.admin.inc index e643f84c117bb76edd9657c69658a49204913980..9189c71499c5250d7166456499b4b06f6ec14f21 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 949505ff27cbea164b14e23daac4f1df8e0965cb..cf23d6b048d4d5984dc783da24e9932f302faa09 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.'));