/** * {@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); }