Trivali webdevelopment

Alle actieve talen ophalen in D8

Met Dependency Injection

De mooie manier van werken is via Dependency Injection voor Drupal 8. Deze manier is de meest uitgebreide, maar zorgt wel voor testbaarheid en beste overdraagbaarheid van je code.

class moduleController extends ControllerBase {
protected $languageManager;

public function __construct(LanguageManagerInterface $languageManager) {
$this->languageManager = $languageManager;
}

public static function create(ContainerInterface $container) {
return new static(
$container->get(‘language_manager’)
);
}

public function my_function() {
$languagelist = $this->languageManager->getLanguages();
}
}

De quick-and-dirty manier

Wil je geen Dependency Injection gebruiken, dan kan je heel eenvoudig de language-list opvragen door onderstaand regeltje code.
We roepen uit de “language_manager”-service direct de functie getLanguages() aan die ons een array met language-objecten teruggeeft.

class moduleController extends ControllerBase {
public function my_function() {
$languagelist = \Drupal::service(‘language_manager’)->getLanguages();
}
}

Beschikbare methods op het language-object

Nadien kan je de volgende methods gebruiken om de info op te halen:

  • getDirection()
  • getId()
  • getName()
  • getWeight();
  • isDefault()
  • isLocked()

Een eenvoudige array maken met als key de taalcode en als value de taal ziet er dan zo uit:

foreach($languagelist as $language) {
$languages[$language->getId()] = $language->getName();
}