Drupal 7では、現在の言語は私たちがアクセスできるグローバル変数です
global $language;
$langcode = $language->language;
Twig file in Drupal 8(in page--front.html.twig
例えば)?
私は自分の答えを見つけてここに投稿したので、後で他の人を助けるかもしれません。
まず、_MYTHEME.theme
_で:
In Drupal 8.2言語が template_preprocess_page の変数をページングするために追加されました。しかし、現在のバージョン8.1では存在しませんでした。私はそれを追加しました:
_function MYTHEME_preprocess_page(&$vars) {
$language = \Drupal::languageManager()->getCurrentLanguage()->getId();
$vars['language'] = $language;
}
_
次に、Twigファイルで_{{ language }}
_を使用します。また、{{ language.getName() }}
を使用して言語名を取得できます。
更新
Drupal 8.2以降、グローバル変数language
が存在するため、最初に追加する必要はありません。
_{% if language.getId() == 'en' %}
Do something
{% else %}
Do something else
{% endif %}
_
更新コメントをありがとう@Lucas
on Drupal>8.7.5
_{% if language.getId() == 'en' %} should be {% if language == 'en' %}
_
Drupalバージョン8.2.3では、language
変数はすでにTwigテンプレートで使用できます。使用例は次のとおりです。
{% if language.getId() == 'en' %}
Do something
{% else %}
Do something else
{% endif %}
{{ language }}
は機能しますが、page
コンテキストでのみです。
この質問の例(page--front.html.twig
)はたまたま機能します。
Xdebugで8.7.6を試しました。 page.html.twig
以外の場所から呼び出されると、{Drupal\Core\Language\Language}
ではなくnull
を返します。
それが機能していると報告している人もいれば、そうでない人もいると思います。 node.html.twig
などの下で使用できます。この場合でも、テーマのpreprocess()関数でそれを提供する必要があります。
Page.html.twigとDrupal 8.7.6では、以下を使用する必要がありました。
{% if language.id == 'en' %}
または{{ language.id == 'en' ? 'active' : 'not-active' }}
他の提案は機能しませんでした。