diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 3fb39e0..e4a5b2e 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -202,6 +202,8 @@ function language_save($language) { // Kill the static cache in language_list(). drupal_static_reset('language_list'); + language_negotiation_url_prefixes_update(); + return $language; } @@ -403,11 +405,6 @@ function language_language_insert($language) { language_negotiation_include(); - // Add new language to the list of language prefixes. - $prefixes = language_negotiation_url_prefixes(); - $prefixes[$language->langcode] = (empty($language->default) ? $language->langcode : ''); - language_negotiation_url_prefixes_save($prefixes); - // Add language to the list of language domains. $domains = language_negotiation_url_domains(); $domains[$language->langcode] = ''; @@ -421,20 +418,6 @@ function language_language_update($language) { if (!empty($language->locked)) { return; } - - language_negotiation_include(); - - // If the language is the default, then ensure that no other languages have - // blank prefix codes. - if (!empty($language->default)) { - $prefixes = language_negotiation_url_prefixes(); - foreach ($prefixes as $langcode => $prefix) { - if ($prefix == '' && $langcode != $language->langcode) { - $prefixes[$langcode] = $langcode; - } - } - language_negotiation_url_prefixes_save($prefixes); - } } /** diff --git a/core/modules/language/language.negotiation.inc b/core/modules/language/language.negotiation.inc index 48a8083..3173c19 100644 --- a/core/modules/language/language.negotiation.inc +++ b/core/modules/language/language.negotiation.inc @@ -435,6 +435,28 @@ function language_negotiation_url_prefixes() { } /** + * Update the list of prefixes from the installed languages. + */ +function language_negotiation_url_prefixes_update() { + $prefixes = language_negotiation_url_prefixes(); + foreach (language_list() as $language) { + // the prefix for this language should be updated if its not assigned yet or it is set to '' + // ('' is a previous default language) + if (!isset($prefixes[$language->langcode]) || empty($prefixes[$language->langcode])) { + // if this is the default language, set the prefix to '', otherwise to the standard langcode + $prefixes[$language->langcode] = !empty($language->default)? '' : $language->langcode; + } + // else we keep the prefix a user has configured. + + // make shure prefix is empty if this is the default. i.e. when changing default language + if (!empty($language->default)) { + $prefixes[$language->langcode] = ''; + } + } + language_negotiation_url_prefixes_save($prefixes); +} + +/** * Saves language prefix settings. */ function language_negotiation_url_prefixes_save(array $prefixes) {