diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index 734ad6938d..0ce68d7d94 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -15,7 +15,6 @@
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Session\AccountInterface;
-use Drupal\language\ConfigurableLanguageInterface;
 use Drupal\language\Entity\ContentLanguageSettings;
 use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUI;
 use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl;
@@ -346,38 +345,6 @@ function language_modules_uninstalled($modules) {
   language_modules_installed($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.
  */
diff --git a/core/modules/language/src/Entity/ConfigurableLanguage.php b/core/modules/language/src/Entity/ConfigurableLanguage.php
index c277a85bd7..91a6424bac 100644
--- a/core/modules/language/src/Entity/ConfigurableLanguage.php
+++ b/core/modules/language/src/Entity/ConfigurableLanguage.php
@@ -139,6 +139,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();
+    }
   }
 
   /**
@@ -173,6 +181,16 @@ 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');
+    $config->clear('url.prefixes.'$entity->id());
+    $config->clear('url.domains.'$entity->id());
+
+    // Save the modified settings.
+    $config->set('url.prefixes', $prefixes)
+      ->set('url.domains', $domains)
+      ->save();
   }
 
   /**
