Điểm:1

Làm cách nào để có được bản dịch biểu mẫu web theo chương trình?

lá cờ br

Tôi đang sử dụng Drupal 9. Tôi cần tải các nhãn tùy chọn của tùy chọn của Biểu mẫu web theo chương trình.

Cho đến nay, tôi đã quản lý để tải các nhãn:

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

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

Tuy nhiên, tôi cũng cần lấy các nhãn đó cho cả ngôn ngữ của trang web - vi.

Đối tượng biểu mẫu web không có getTranslation() phương pháp, vì vậy tôi đã thử:

  • phụ thuộc vào $webform_submission->getTranslation($langcode), nhưng điều đó không hoạt động vì nó chỉ tồn tại cho ngôn ngữ mà biểu mẫu web đã được gửi

  • cố gắng sử dụng:

$test = \Drupal::service('entity.repository')
      ->getTranslationFromContext($webform, $langcode);
// lấy các giá trị tùy chọn

nhưng điều đó cũng không hoạt động, các nhãn luôn ở trong nếu biểu mẫu web đã được gửi trong và tương tự cho vi.

Làm cách nào để có được các tùy chọn cho cả hai ngôn ngữ?

Điểm:3
lá cờ in

Bạn cần trình quản lý dịch thuật mà Webform cung cấp (ngoài ra, bạn có thể tiếp cận điều này dưới dạng quản lý dịch thực thể cấu hình tiêu chuẩn).

Mã sau minh họa cách bạn có thể hiển thị nhãn đã dịch cho phần tử Chọn được thêm vào Biểu mẫu web.

<?php

sử dụng Drupal\webform\Entity\Webform;

// Chúng tôi cần trình quản lý dịch thuật.
$wftm = \Drupal::service('webform.translation_manager');
// Nhận biểu mẫu web liên hệ tiêu chuẩn, có thêm phần tử tùy chọn đã dịch.
$wf = Biểu mẫu web::load('liên hệ');

// Nhận tất cả các ngôn ngữ hệ thống.
$langcodes = \Drupal::languageManager()->getLanguages();
$langcodesList = array_keys($langcodes);

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

Đầu ra trông như thế này:

root@b91117fbf40f:/app# drush scr webform_test.php 
mảng(3) {
  ["lala"]=>
  chuỗi (4) "Lala"
  ["koko"]=>
  chuỗi (4) "Koko"
  ["mimi"]=>
  chuỗi (4) "Mimi"
}
mảng(3) {
  ["lala"]=>
  chuỗi (9) "Lala (nó)"
  ["koko"]=>
  chuỗi (9) "Koko (nó)"
  ["mimi"]=>
  chuỗi (9) "Mimi (nó)"
}
Điểm:0
lá cờ sa

Chỉ khác một chút so với câu trả lời của Stefanos Petrakis (sử dụng getTranslationElements() thay vì 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'];

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.