Перевод значений конфигурации в пользовательский обработчик веб-форм


Я создал пользовательский обработчик веб-форм, который использует данные электронной почты и имени из ввода формы для подписки пользователя на рассылку новостей через API поставщиков.

Ich создал форму конфигурации с этим обработчиком, в которой я могу ввести ключ API и список рассылки службы рассылки.

Все это хорошо работает до тех пор, пока я не захочу перевести веб-форму на другой язык. Мне нужна другая конфигурация для список рассылки на немецком языке, чем на английском.

Я проверил код обработчиков, которые поставляются с модулем webform, но я не могу понять, как определить, какие значения полей конфигурации должны быть переведены. Мне нужно, чтобы элемент формы newsletter_list был переведен.

Кто-нибудь может помочь?

Это мой сокращенный код

<?php
/**
  * @file custom_webform_handler/src/Plugin/WebformHandler/NewsletterWebformHandler.php
  */
namespace Drupal\custom_webform_handler\Plugin\WebformHandler;

use Drupal\webform\Plugin\WebformHandlerBase;

// ...
/**
 * ´Newsletter Webform handler.
 *
 * @WebformHandler(
 *   id = "newsletter",
 *   label = @Translation("Newsletter Subscription"),
 *   category = @Translation("Subscription"),
 *   description = @Translation("Subscribe to Newsletter"),
 *   cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
 *   results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_IGNORED,
 *   submission = \Drupal\webform\Plugin\WebformHandlerInterface::SUBMISSION_REQUIRED,
 * )
 */

class NewsletterWebformHandler extends WebformHandlerBase
{
  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [
      'newsletter_apikey' => '',
      'newsletter_list' => '',
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form['newsletter'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('Newsletter settings'),
    ];
    $form['newsletter']['newsletter_apikey'] = [
      '#type' => 'textfield',
      '#title' => $this->t('API key'),
      '#default_value' => $this->configuration['newsletter_apikey'],
      '#required' => TRUE,
    ];
    $form['newsletter']['newsletter_list'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Mailing List'),
      '#default_value' => $this->configuration['newsletter_list'],
      '#required' => TRUE,
    ];
    
    return $this->setSettingsParents($form);

  }
  /**
   * {@inheritdoc}
   */
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
    parent::submitConfigurationForm($form, $form_state);
    // ...
  }

// ...
}

Я прочитал, что для этого мне нужна схема, поэтому я попытался добавить ее, но это ничего не изменило

# file custom_webform_handler/config/schema/custom_webform_handler.schema.yml
webform.handler.newsletter:
  type: mapping
  label: 'Newsletter'
  mapping:
    newsletter_list:
      label: 'Mailing List'
      type: string


Редактировать

Чтобы сделать это более ясный: Я создал обработчик, который имеет такую форму конфигурации

enter image description here

Параметры подключения - это те, которые необходимо перевести

Когда я перехожу на страницу перевода своей веб-формы, я могу перевести настройки обработчика электронной почты, но не мои пользовательские настройки обработчика подписки на рассылку

enter image description here

Author: yunzen, 2020-10-29

2 answers

Я действительно указал неправильный тип. Это должно быть label, а не string

webform.handler.newsletter2go:
  type: mapping
  label: 'Newsletter2go'
  mapping:
    newsletter2go_formcode:
      label: Formcode
      type: label
 2
Author: yunzen, 2020-11-05 15:34:01

Вы должны иметь возможность добавлять переводы в /config/install/language/[код языка]/config.name.yml

Итак /config/install/language/fr/custom_webform_handler.handler.newsletter.yml

Но весь перевод конфигурации не очень хорошо поддерживается/глючит, вам нужно убедиться, что ваш язык по умолчанию - EN! Если нет, cli_language может помочь, язык интерфейса командной строки должен быть установлен на EN, и ваш модуль должен быть установлен через интерфейс командной строки (fe.drush).


Обновление: Чтобы иметь возможность перевести вашу пользовательскую конфигурацию, вам необходимо предоставьте что-нибудь, например, custom_webform.config_translation.yml:

Пользовательская Форма_webform.newsletter_settings_form: имя базового маршрута: [не уверен в маршруте..] имена: - веб-форма.обработчик.информационный бюллетень

Не знаю, какой маршрут выбрать... возможно, entity.webform.settings_форма

См. также: https://www.drupal.org/docs/user_guide/en/language-config-translate.html

 0
Author: rémy, 2020-11-05 15:23:45