diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index 4729316..90b8d8b 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -353,38 +353,6 @@ function language_modules_uninstalled($modules) {
 }
 
 /**
- * Implements hook_ENTITY_TYPE_insert() for 'configurable_language'.
- */
-function language_configurable_language_insert(ConfigurableLanguageInterface $language) {
-  if ($language->isLocked()) {
-    return;
-  }
-
-  // Add language to the list of language domains.
-  $config = \Drupal::configFactory()->getEditable('language.negotiation');
-  $domains = $config->get('url.domains');
-  $domains[$language->id()] = '';
-  $config->set('url.domains', $domains)->save();
-}
-
-/**
- * Implements hook_ENTITY_TYPE_delete() for 'configurable_language'.
- */
-function language_configurable_language_delete(ConfigurableLanguageInterface $language) {
-  // Remove language from language prefix list.
-  $config = \Drupal::configFactory()->getEditable('language.negotiation');
-  $prefixes = $config->get('url.prefixes');
-  unset($prefixes[$language->id()]);
-  $config->set('url.prefixes', $prefixes)->save();
-
-  // Remove language from language domain list.
-  $config = \Drupal::configFactory()->getEditable('language.negotiation');
-  $domains = $config->get('url.domains');
-  unset($domains[$language->id()]);
-  $config->set('url.domains', $domains)->save();
-}
-
-/**
  * Implements hook_preprocess_HOOK() for block templates.
  */
 function language_preprocess_block(&$variables) {
diff --git a/core/modules/language/src/Entity/ConfigurableLanguage.php b/core/modules/language/src/Entity/ConfigurableLanguage.php
index 89cc167..61513e6 100644
--- a/core/modules/language/src/Entity/ConfigurableLanguage.php
+++ b/core/modules/language/src/Entity/ConfigurableLanguage.php
@@ -144,6 +144,17 @@ public function postSave(EntityStorageInterface $storage, $update = TRUE) {
       // Install any available language configuration overrides for the language.
       \Drupal::service('language.config_factory_override')->installLanguageOverrides($this->id());
     }
+
+    if ($this->isLocked() || $update) {
+      return;
+    }
+
+    // Add language to the list of language domains.
+    $domains = \Drupal::config('language.negotiation')->get('url.domains');
+    $domains[$this->id()] = '';
+    \Drupal::configFactory()->getEditable('language.negotiation')
+      ->set('url.domains', $domains)
+      ->save();
   }
 
   /**
@@ -178,6 +189,18 @@ public static function postDelete(EntityStorageInterface $storage, array $entiti
     if (!\Drupal::languageManager()->isMultilingual()) {
       ConfigurableLanguageManager::rebuildServices();
     }
+
+    // Remove language from language prefix list.
+    $prefixes = \Drupal::config('language.negotiation')->get('url.prefixes');
+    unset($prefixes[$language_manager->getCurrentLanguage()->getId()]);
+
+    // Remove language from language domain list.
+    $domains = \Drupal::config('language.negotiation')->get('url.domains');
+    unset($domains[$language_manager->getCurrentLanguage()->getId()]);
+    \Drupal::configFactory()->getEditable('language.negotiation')
+      ->set('url.prefixes', $prefixes)
+      ->set('url.domains', $domains)
+      ->save();
   }
 
   /**
