web-dev-qa-db-fra.com

Obtenir la langue actuelle dans le modèle

Dans Drupal 7 la langue actuelle est une variable globale à laquelle nous pouvons accéder avec

global $language;
$langcode = $language->language; 

Je veux savoir comment pouvons-nous accéder à la langue actuelle dans un fichier Twig in Drupal 8 (in page--front.html.twig par exemple)?

7
Yusef

J'ai trouvé ma réponse et je la poste ici, alors peut-être qu'elle aidera les autres plus tard.

Tout d'abord, dans MYTHEME.theme:

En Drupal 8.2 a été ajouté pour paginer les variables dans template_preprocess_page . Mais dans ma version actuelle 8.1, il n'existait pas donc Je l'ai ajouté avec:

function MYTHEME_preprocess_page(&$vars) {

  $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
  $vars['language'] = $language;
}

Ensuite, dans mon fichier Twig j'utilise {{ language }}. Je peux également obtenir le nom de la langue avec {{ language.getName() }}.

Mise à jour

Après Drupal 8.2 une variable globale language existe et maintenant il n'est plus nécessaire de l'ajouter en premier.

{% if language.getId() == 'en' %}
  Do something
{% else %}
  Do something else
{% endif %}

Mettre à jour Merci @Lucas pour son commentaire

sur Drupal> 8.7.5

{% if language.getId() == 'en' %} should be {% if language == 'en' %} 
17
Yusef

Sur Drupal version 8.2.3 la variable language est déjà disponible dans les modèles Twig. Un exemple d'utilisation est le suivant:

{% if language.getId() == 'en' %}
  Do something
{% else %}
  Do something else
{% endif %}
12
Vagelis Prokopiou

{{ language }} fonctionne mais niquement dans le contexte page.

L'exemple de cette question (page--front.html.twig) se trouve être un travail.

J'ai essayé en 8.7.6 avec Xdebug. En cas d'appel depuis un autre endroit que page.html.twig il renverra un null au lieu de {Drupal\Core\Language\Language}

Je pense que c'est pourquoi certaines personnes signalent que cela fonctionne, mais d'autres pas. Vous pouvez l'utiliser sous node.html.twig ou quelque chose. Dans ce cas, vous devez toujours fournir cette fonction sous preprocess () de votre thème.

7
hehongbo

Dans page.html.twig et Drupal 8.7.6, j'ai dû utiliser:

{% if language.id == 'en' %} ou {{ language.id == 'en' ? 'active' : 'not-active' }}

D'autres suggestions n'ont pas fonctionné.

3
Taikahessu