diff --git a/core/modules/language/language.module b/core/modules/language/language.module index a94876e..cd4ebb7 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -244,6 +244,9 @@ function language_save($language) { // Kill the static cache in language_list(). drupal_static_reset('language_list'); + // Update URL Prefixes for all languages. + language_negotiation_url_prefixes_update(); + return $language; } @@ -456,11 +459,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] = ''; @@ -468,29 +466,6 @@ function language_language_insert($language) { } /** - * Implements hook_language_update(). - */ -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); - } -} - -/** * Implements hook_language_delete(). */ function language_language_delete($language) { diff --git a/core/modules/language/language.negotiation.inc b/core/modules/language/language.negotiation.inc index 48a8083..a22f089 100644 --- a/core/modules/language/language.negotiation.inc +++ b/core/modules/language/language.negotiation.inc @@ -435,6 +435,24 @@ 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 it's not assigned yet + // or the prefix is set to the empty string. + if (!isset($prefixes[$language->langcode]) || empty($prefixes[$language->langcode])) { + // For the default language, set the prefix to the empty string, + // otherwise use the langcode. + $prefixes[$language->langcode] = !empty($language->default) ? '' : $language->langcode; + } + // Otherwise we keep the prefix a user has configured. + } + language_negotiation_url_prefixes_save($prefixes); +} + +/** * Saves language prefix settings. */ function language_negotiation_url_prefixes_save(array $prefixes) {