diff --git a/core/modules/language/src/ConfigurableLanguageManager.php b/core/modules/language/src/ConfigurableLanguageManager.php
index 238bd83..5c250dd 100644
--- a/core/modules/language/src/ConfigurableLanguageManager.php
+++ b/core/modules/language/src/ConfigurableLanguageManager.php
@@ -90,11 +90,16 @@ class ConfigurableLanguageManager extends LanguageManager implements Configurabl
   protected $initialized = FALSE;
 
   /**
-   * Whether already in the process of language initialization.
+   * An array of language-types currently being initialized, keyed by language-
+   * type.
    *
-   * @var bool
+   * @var bool[]
+   *   An array of which the keys are language type names, and values are
+   *   booleans indicating whether or not the language for that type is
+   *   currently being initialized. If a language type is missing, it is
+   *   currently not being initialized.
    */
-  protected $initializing = FALSE;
+  protected $initializing = [];
 
   /**
    * {@inheritdoc}
@@ -213,12 +218,15 @@ public function getCurrentLanguage($type = LanguageInterface::TYPE_INTERFACE) {
       $this->negotiatedLanguages[$type] = $this->getDefaultLanguage();
 
       if ($this->negotiator && $this->isMultilingual()) {
-        if (!$this->initializing) {
-          $this->initializing = TRUE;
+        if (empty($this->initializing[$type])) {
+          // Set a flag indicating that we're currently initializing the
+          // language-type to prevent recursive initialization.
+          $this->initializing[$type] = TRUE;
+
           $negotiation = $this->negotiator->initializeType($type);
           $this->negotiatedLanguages[$type] = reset($negotiation);
           $this->negotiatedMethods[$type] = key($negotiation);
-          $this->initializing = FALSE;
+          unset($this->initializing[$type]);
         }
         // If the current interface language needs to be retrieved during
         // initialization we return the system language. This way string
