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)?
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' %}
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 %}
{{ 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.
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é.