You are here

public function ConfigurableLanguageManager::getLanguages in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/language/src/ConfigurableLanguageManager.php \Drupal\language\ConfigurableLanguageManager::getLanguages()

Returns a list of languages set up on the site.

Parameters

int $flags: (optional) Specifies the state of the languages that have to be returned. It can be: LanguageInterface::STATE_CONFIGURABLE, LanguageInterface::STATE_LOCKED, or LanguageInterface::STATE_ALL.

Return value

\Drupal\Core\Language\LanguageInterface[] An associative array of languages, keyed by the language code.

Overrides LanguageManager::getLanguages

5 calls to ConfigurableLanguageManager::getLanguages()
ConfigurableLanguageManager::getFallbackCandidates in core/modules/language/src/ConfigurableLanguageManager.php
Returns the language fallback candidates for a given context.
ConfigurableLanguageManager::getNativeLanguages in core/modules/language/src/ConfigurableLanguageManager.php
Returns a list of languages set up on the site in their native form.
ConfigurableLanguageManager::getStandardLanguageListWithoutConfigured in core/modules/language/src/ConfigurableLanguageManager.php
Returns the standard language list excluding already configured languages.
ConfigurableLanguageManager::isMultilingual in core/modules/language/src/ConfigurableLanguageManager.php
Returns whether or not the site has more than one language added.
ConfigurableLanguageManager::updateLockedLanguageWeights in core/modules/language/src/ConfigurableLanguageManager.php
Updates locked system language weights.

File

core/modules/language/src/ConfigurableLanguageManager.php, line 279

Class

ConfigurableLanguageManager
Overrides default LanguageManager to provide configured languages.

Namespace

Drupal\language

Code

public function getLanguages($flags = LanguageInterface::STATE_CONFIGURABLE) {

  // If a config override is set, cache using that language's ID.
  if ($override_language = $this
    ->getConfigOverrideLanguage()) {
    $static_cache_id = $override_language
      ->getId();
  }
  else {
    $static_cache_id = $this
      ->getCurrentLanguage()
      ->getId();
  }
  if (!isset($this->languages[$static_cache_id][$flags])) {

    // Initialize the language list with the default language and default
    // locked languages. These cannot be removed. This serves as a fallback
    // list if this method is invoked while the language module is installed
    // and the configuration entities for languages are not yet fully
    // imported.
    $default = $this
      ->getDefaultLanguage();
    $languages = [
      $default
        ->getId() => $default,
    ];
    $languages += $this
      ->getDefaultLockedLanguages($default
      ->getWeight());

    // Load configurable languages on top of the defaults. Ideally this could
    // use the entity API to load and instantiate ConfigurableLanguage
    // objects. However the entity API depends on the language system, so that
    // would result in infinite loops. We use the configuration system
    // directly and instantiate runtime Language objects. When language
    // entities are imported those cover the default and locked languages, so
    // site-specific configuration will prevail over the fallback values.
    // Having them in the array already ensures if this is invoked in the
    // middle of importing language configuration entities, the defaults are
    // always present.
    $config_ids = $this->configFactory
      ->listAll('language.entity.');
    foreach ($this->configFactory
      ->loadMultiple($config_ids) as $config) {
      $data = $config
        ->get();
      $data['name'] = $data['label'];
      $languages[$data['id']] = new Language($data);
    }
    Language::sort($languages);

    // Filter the full list of languages based on the value of $flags.
    $this->languages[$static_cache_id][$flags] = $this
      ->filterLanguages($languages, $flags);
  }
  return $this->languages[$static_cache_id][$flags];
}