Перевод значений конфигурации в пользовательский обработчик веб-форм
Я создал пользовательский обработчик веб-форм, который использует данные электронной почты и имени из ввода формы для подписки пользователя на рассылку новостей через 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
Редактировать
Чтобы сделать это более ясный: Я создал обработчик, который имеет такую форму конфигурации
Параметры подключения - это те, которые необходимо перевести
Когда я перехожу на страницу перевода своей веб-формы, я могу перевести настройки обработчика электронной почты, но не мои пользовательские настройки обработчика подписки на рассылку
2 answers
Я действительно указал неправильный тип. Это должно быть label
, а не string
webform.handler.newsletter2go:
type: mapping
label: 'Newsletter2go'
mapping:
newsletter2go_formcode:
label: Formcode
type: label
Вы должны иметь возможность добавлять переводы в /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