Рейтинг:1

Как получить переводы веб-форм программно?

флаг br

Я использую Drupal 9. Мне нужно программно загрузить метки параметров веб-формы.

До сих пор мне удалось загрузить метки:

  $element = $webform_submission->getWebform()
      ->getElement($element_key, ИСТИНА);

  $option_text = WebformOptionsHelper::getOptionText($element_value, $element['#options']);

Однако мне также нужно получить эти метки для обоих языков сайта - en и Это.

Объект веб-формы не имеет получитьПеревод() метод, поэтому я пробовал:

  • надеется $webform_submission->getTranslation($langcode), но это не работает, так как он существует только для языка, на котором была отправлена ​​веб-форма.

  • пытаюсь использовать:

$test = \Drupal::service('entity.repository')
      ->getTranslationFromContext($webform, $langcode);
// получаем значения опций

но это тоже не работает, ярлыки всегда в Это если веб-форма была отправлена ​​в Это и аналогично для en.

Как получить варианты для обоих языков?

Рейтинг:3
флаг in

Вам нужен диспетчер переводов, который предоставляет Webform (в качестве альтернативы вы можете подойти к этому как к стандартному управлению переводом объекта конфигурации).

В следующем коде показано, как можно отобразить переведенные метки для элемента Select, добавленного в веб-форму.

<?php

используйте Drupal\webform\Entity\Webform;

// Нам нужен менеджер переводов.
$wftm = \Drupal::service('webform.translation_manager');
// Получите стандартную контактную веб-форму с добавленным переведенным элементом параметров.
$wf = Webform::load('контакт');

// Получить все системные языки.
$langcodes = \Drupal::languageManager()->getLanguages();
$langcodesList = array_keys($langcodes);

foreach ($langcodesList как $langcode) {
  $elements = $wftm->getElements($wf, $langcode);
  если (isset($elements['custom_options']['#options'])) {
    var_dump($elements['custom_options']['#options']);
  }
}

Вывод выглядит примерно так:

root@b91117fbf40f:/app# drush scr webform_test.php 
массив (3) {
  ["лала"]=>
  строка(4) "Лала"
  ["коко"]=>
  строка(4) "Коко"
  ["мими"]=>
  строка(4) "Мими"
}
массив (3) {
  ["лала"]=>
  string(9) "Лала (это)"
  ["коко"]=>
  string(9) "Коко (оно)"
  ["мими"]=>
  string(9) "Мими (это)"
}
Рейтинг:0
флаг sa

Просто немного отличается от ответа Стефаноса Петракиса (с использованием получитьЭлементыПеревода() вместо получитьэлементы():

$webform_translation_manager = \Drupal::service('webform.translation_manager');
$webform_translation_elements = $webform_translation_manager->getTranslationElements($booking_form, $langcode);
$options = $webform_translated_elements['element_machinename']['#options'];

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.