web-dev-qa-db-ja.com

ルートから言語を取得する

Drupal 8)のrouteMatchから言語を取得する方法はありますか?

例えば。私が行った場合:

$route_match = \Drupal::routeMatch();

現在、返されたオブジェクトに言語情報がありません。すべての言語情報が取り除かれたかのように見え、ルートオブジェクトはその言語について何も認識していません。

言語マネージャーの使用について調査しましたが、これをrouteMatchクラスと組み合わせる方法が見つかりません。

シナリオ:自分のAccessInterfaceクラスを作成していて、特定の言語からエンティティを非表示にしたい。ルートの言語の情報が必要です(そしてnotサイトの現在の言語)。

2
leon.nk

私は実際にDrupal 8サイトで同じ問題を抱えていました。

これが問題のように聞こえる可能性は低いことはわかっていますが、少なくとも1つの状況(私がいる状況!)を考えることができます。

管理インターフェイスがユーザーの希望する言語(クライアントからの要求)になるようにCMSを設定しているため、管理インターフェイスを理解できる言語に保ちながら、翻訳されたコンテンツをコピーアンドペーストできます。

ただし、\Drupal::languageManager()->getCurrentLanguage()は、コンテンツが含まれる言語ではなく、管理システムが使用している言語を返すため、混乱が生じます。

これを回避する最も簡単な方法は、以下を実行することでした。

$node = \Drupal::routeMatch()->getParameter('node'); $currentLanguage = $node->langcode->value;

(誰がなぜ$node->langcode->value機能します。この質問にはいくつかの良い答えがあります: Drupal 8 でコンテンツオブジェクトのプロパティを取得する方法)

これは文字通り、現在表示しているノードを取得し、ノードが表示している言語を取得します。

1
Sean