web-dev-qa-db-ja.com

段落のコンテンツ翻訳

Drupal 8.)でパラグラフを翻訳しようとしています。修正済みとマークされている このバグレポート によると、機能するはずです。
#2543258:変換できないフィールドのエンティティ参照が正しい変換で表示されないも修正される予定です。

これが何か関係があるかどうかはわかりません。今、私は行き詰まっています。これが本当にうまくいくか動作するかどうかもわかりません。

私は次のことをしています:

  1. Hook_preprocess_pageには$ vars ["node"]があります(通常、引数$ varsを介して利用できます)
  2. このノードでは(実際には任意のNodeオブジェクト、おそらくそうです)、私は$ node-> getFields()を呼び出します
  3. フィールドの1つはpararaphノード( "field_sidepane")です
  4. このフィールドで「$ field-> view()」を呼び出して、フィールド全体(つまり、サイドペインにあるものすべて)を一度にレンダリングします。 view()は、langcodeなどの2番目の引数をサポートしていないようです。
  5. サイドペインには複数の段落が含まれています(カーディナリティ= -1)。これらの段落の1つに、タイプ「text_long」のフィールド「field_body」が含まれています。
  6. このフィールドは翻訳可能としてマークされています(構成ページの段落セクションの下)。ただし、field_sidepane自体は(構成ページの[コンテンツ]セクションに表示されます)、翻訳可能としてマークされていません。
  7. マイナーな問題を別にして、これらの段落が誤って「すべての言語」とラベル付けされていること(これは https://www.drupal.org/node/2463575 だと思います)すべてが編集時にうまく機能します。異なる言語などのテキストを個別に編集できます。
  8. ただし、ページには、主言語のみが表示されます。

簡単だと思いましたが、意外と難しいことがわかりました。 Drupal\Core\Entity\Entity\EntityViewDisplayクラスで、次のセクションを発見しました。

_      // The language of the field values to display is already determined
      // in the incoming $entity. The formatter should build its output of
      // those values using:
      // - the entity language if the entity is translatable,
      // - the current "content language" otherwise.
      if ($entity instanceof TranslatableInterface && $entity->isTranslatable()) {
        $view_langcode = $entity->language()->getId();
      }
      else {
        $view_langcode = NULL;
      }
_

_$view_langcode_をNULLに設定すると、動作するようです。明らかに、メインエンティティから言語を取得します。しかし、これをどのように(プログラム的にもUIを介しても)変更する方法がわかりません。明示的に$node = $node->getTranslation("en");を使用し、結果に対してgetFields()を呼び出しても、動作しないようです。翻訳された言語でフィールドをレンダリングする方法がまったく見つかりませんでした。

3
rgpublic

はい、そのAPIは言語の受け渡しをサポートしていません。

私はあなたがしていることにビューモードを使用することをお勧めします。それをUIで一緒にクリックし、そこに表示するフィールドを構成してから、$ node-> view( 'your_view_mode')を呼び出すだけです。それはうまくいくはずです。

Ctoolsモジュールが提供するEntity Viewブロックを使用することもできます。その場合、サイドバーをリージョンのブロックとして配置でき、カスタムコードをまったく必要としません。

1
Berdir