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..0124423 100644
--- a/core/modules/language/src/Entity/ConfigurableLanguage.php
+++ b/core/modules/language/src/Entity/ConfigurableLanguage.php
@@ -124,7 +124,6 @@ public function preSave(EntityStorageInterface $storage) {
    */
   public function postSave(EntityStorageInterface $storage, $update = TRUE) {
     parent::postSave($storage, $update);
-
     $language_manager = \Drupal::languageManager();
     $language_manager->reset();
     if (!$this->isLocked() && $language_manager instanceof ConfigurableLanguageManagerInterface && !$this->isSyncing()) {
@@ -144,6 +143,14 @@ 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) {
+      // Add language to the list of language domains.
+      $config = \Drupal::configFactory()->getEditable('language.negotiation');
+      $domains = $config->get('url.domains');
+      $domains[$this->id()] = '';
+      $config->set('url.domains', $domains)->save();
+    }
   }
 
   /**
@@ -178,6 +185,18 @@ public static function postDelete(EntityStorageInterface $storage, array $entiti
     if (!\Drupal::languageManager()->isMultilingual()) {
       ConfigurableLanguageManager::rebuildServices();
     }
+
+    // Remove language from language prefix and domain list.
+    $config = \Drupal::configFactory()->getEditable('language.negotiation');
+    $prefixes = $config->get('url.prefixes');
+    $domains = $config->get('url.domains');
+    unset($prefixes[$entity->id]);
+    unset($domains[$entity->id]);
+
+    // Save the modified settings.
+    $config->set('url.prefixes', $prefixes)
+      ->set('url.domains', $domains)
+      ->save();
   }
 
   /**
