Puncte:1

Cum obțineți traduceri de formulare web în mod programatic?

drapel br

Sunt pe Drupal 9. Trebuie să încarc etichetele de opțiuni ale opțiunii unui formular Web în mod programatic.

Până acum, am reușit să încarc etichetele:

  $element = $webform_submission->getWebform()
      ->getElement($element_key, TRUE);

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

Cu toate acestea, trebuie să obțin acele etichete atât pentru limba site-ului - ro și aceasta.

Obiectul formular web nu are un getTranslation() metoda, asa ca am incercat:

  • bazându-se pe $webform_submission->getTranslation($langcode), dar asta nu funcționează, deoarece există doar pentru limba în care a fost trimis formularul web

  • incearca sa folosesti:

$test = \Drupal::service('entity.repository')
      ->getTranslationFromContext($webform, $langcode);
// obțineți valorile opțiunilor

dar nici asta nu merge, etichetele sunt mereu in aceasta dacă formularul web a fost trimis în aceasta si asemanator pentru ro.

Cum pot obține opțiunile pentru ambele limbi?

Puncte:3
drapel in

Aveți nevoie de managerul de traducere oferit de Webform (în mod alternativ, puteți aborda acest lucru ca un management standard al traducerii entităților de configurare).

Următorul cod demonstrează cum puteți afișa etichetele traduse pentru un element Select adăugat la un formular web.

<?php

utilizați Drupal\webform\Entity\Webform;

// Avem nevoie de managerul de traduceri.
$wftm = \Drupal::service('webform.translation_manager');
// Obțineți formularul web de contact standard, cu elementul de opțiuni tradus adăugat.
$wf = Webform::load('contact');

// Obține toate limbile sistemului.
$langcodes = \Drupal::languageManager()->getLanguages();
$langcodesList = array_keys($langcodes);

foreach ($langcodesList ca $langcode) {
  $elemente = $wftm->getElements($wf, $langcode);
  if (isset($elements['custom_options']['#options'])) {
    var_dump($elements['custom_options']['#options']);
  }
}

Ieșirea arată cam așa:

root@b91117fbf40f:/app# drush scr webform_test.php 
matrice (3) {
  ["lala"] =>
  șir (4) „Lala”
  ["koko"] =>
  șir (4) „Koko”
  ["mimi"] =>
  șir (4) „Mimi”
}
matrice (3) {
  ["lala"] =>
  șir (9) „Lala (it)”
  ["koko"] =>
  șir (9) „Koko (it)”
  ["mimi"] =>
  șir (9) „Mimi (it)”
}
Puncte:0
drapel sa

Puțin diferit de răspunsul lui Stefanos Petrakis (folosind getTranslationElements() în loc de getElements():

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

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.