/**
  * {@inheritdoc}
  */
 public function getNativeLanguages()
 {
     $languages = $this->getLanguages(LanguageInterface::STATE_CONFIGURABLE);
     $natives = array();
     $original_language = $this->getConfigOverrideLanguage();
     foreach ($languages as $langcode => $language) {
         $this->setConfigOverrideLanguage($language);
         $natives[$langcode] = ConfigurableLanguage::load($langcode);
     }
     $this->setConfigOverrideLanguage($original_language);
     Language::sort($natives);
     return $natives;
 }
 /**
  * Tests sorting an array of Language objects.
  *
  * @covers ::sort()
  *
  * @dataProvider providerTestSortArrayOfLanguages
  *
  * @param \Drupal\Core\Language\Language[] $languages
  *   An array of \Drupal\Core\Language\Language objects.
  * @param array $expected
  *   The expected array of keys.
  */
 public function testSortArrayOfLanguages(array $languages, array $expected)
 {
     Language::sort($languages);
     $this->assertSame($expected, array_keys($languages));
 }
 /**
  * {@inheritdoc}
  */
 public function getLanguages($flags = BaseLanguageInterface::STATE_CONFIGURABLE)
 {
     if (!isset($this->languages)) {
         // Prepopulate the language list with the default language to keep things
         // working even if we have no configuration.
         $default = $this->getDefaultLanguage();
         $this->languages = array($default->id => $default);
         // Retrieve the config storage to list available languages.
         $prefix = 'language.entity.';
         $config_ids = $this->configFactory->listAll($prefix);
         // Instantiate languages from config objects.
         $weight = 0;
         foreach ($this->configFactory->loadMultiple($config_ids) as $config) {
             $data = $config->get();
             $langcode = $data['id'];
             // Initialize default property so callers have an easy reference and can
             // save the same object without data loss.
             $data['default'] = $langcode == $default->id;
             $data['name'] = $data['label'];
             $this->languages[$langcode] = new Language($data);
             $weight = max(array($weight, $this->languages[$langcode]->weight));
         }
         // Add locked languages, they will be filtered later if needed.
         $this->languages += $this->getDefaultLockedLanguages($weight);
         // Sort the language list by weight then title.
         Language::sort($this->languages);
     }
     return parent::getLanguages($flags);
 }