bugfix> twig > 投稿

Drupal 8のセットアップでは、2つの言語が構成されています(ドイツ語:デフォルト、英語)。すべてのページが英語に翻訳されているわけではありませんが、ナビゲーションに表示されます。

現在選択されている言語で翻訳されていないページにリンクしているメニュー項目を強調したいと思います。

Twigでこれを行うにはどうすればよいですか?メニュー項目をダンプすると、クラスのオブジェクトが表示されますMenuLinkContent それはフィールドを持っていますエンティティ 答えが含まれている可能性があります:

object(Drupal\menu_link_content\Plugin\Menu\MenuLinkContent)[31277]
    [...]
  protected 'entity' =>
    object(Drupal\menu_link_content\Entity\MenuLinkContent)[31407]
      [...]
        protected 'translations' => 
          array (size=2)
            'x-default' => 
              array (size=2)
                ...
            'en' => 
              array (size=2)
                ...
[...]

しかし、私は実際にそれらの値を読み取ることができないようです。

回答 1 件
  • それは簡単です、まず、yourtheme_preprocessによって現在の言語を変数に追加する必要があります

    yourtheme_preprocess(&$vars, $hook)
    {
      $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
      $vars['langcode'] = $language;
    }
    
    

    そして今、あなたの小枝テンプレートで、翻訳があるかどうかエンティティをチェックする必要があります、

    {% if node.hasTranslation(langcode) %}
       {% set node = node.getTranslation(langcode) %}
    {% endif %}
    
    

あなたの答え