Как мне получить переведенную метку для определения базового поля?


Как упоминалось здесь и здесь , существует (сложный) способ получить переведенные метки для полей пакетов.

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();

Однако я не могу найти способ, как добиться этого для базовых полей. Взлом, подобный поставке (любого) пакета, также не приводит к успеху.

Author: informatik-handwerk.de, 2020-03-01

1 answers

Существует два возможных метода перевода базового поля: перевод интерфейса и перевод конфигурации.

Базовые поля определяются в коде и переводятся с помощью t(), который получает переводимую строку из таблицы перевода основного интерфейса.

$translatableMarkup = t($label, [], ["langcode" => $langcode]);
//optionally, render to string
$translatedLabel = $translatableMarkup->render();

Если переопределение базового поля существует в конфигурации, то оно содержит переводимую метку:

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

$field_override = BaseFieldOverride::loadByName('entity_type', 'bundle', 'myField');
if ($field_override) {
  $label = $field_override->getLabel();
}
 3
Author: 4k4, 2020-03-01 15:41:28