web-dev-qa-db-ja.com

異なる言語でフィールドラベルを取得するにはどうすればよいですか?

モジュールではなく(テンプレートではなく)、特定のフィールドのラベルを複数の言語で必要としています。

$entity->getFieldDefinition('myField')->label()は、現在/アクティブな言語(たとえば、英語)でラベルを提供します。

期待どおりに機能しないのは次のとおりです。

$entity->getTranslation('fr')->getFieldDefinition('myField')->label()

フランス語でのレーベルを期待しています。代わりに、ラベルは英語になります。フランスのレーベルを取得するには?

3
user125661

エンティティリポジトリサービスを使用して、エンティティの翻訳を読み込むことができます。フィールド構成はエンティティ自体です。だからあなたはこれを試すことができます:

use Drupal\field\Entity\FieldConfig;

// Override language before loading field configuration.
$language = \Drupal::languageManager()->getLanguage('fr');
\Drupal::languageManager()->setConfigOverrideLanguage($langu‌​age);

// $entity_type, $bundle, $field.
$field_info = FieldConfig::loadByName('entity_type', 'bundle', 'myField'); 

$label = $field_info->getLabel();

編集:

コメント内の4k4で述べられているように、構成エンティティはコンテンツエンティティのように動作しません。したがって、翻訳を取得するには、翻訳可能な文字列を取得する前に言語をオーバーライドする必要があります。それに応じて例を調整しました。

4
Mario Steinitz