From 9f2f3d685a35ad8f6986f2f1bae1ba1c0eb49ef8 Mon Sep 17 00:00:00 2001 From: clotildeh Date: Tue, 22 Nov 2022 23:26:55 +0100 Subject: [PATCH 01/13] Ibexa 4 compatibility --- bundle/Command/TranslateContentCommand.php | 12 +- bundle/Controller/TranslationController.php | 6 +- bundle/Event/FieldDecodeEvent.php | 2 +- bundle/Event/FieldEncodeEvent.php | 2 +- .../ContentProxyTranslateListener.php | 8 +- bundle/Form/Data/TranslationAddData.php | 2 +- bundle/Form/Extension/ContentEditType.php | 8 +- bundle/Form/Extension/LanguageCreateType.php | 2 +- bundle/Form/Extension/TranslationAddType.php | 4 +- bundle/Form/TranslationAddDataTransformer.php | 2 +- bundle/Resources/config/ezadminui.yml | 4 +- bundle/Resources/config/services.yml | 12 +- bundle/Resources/config/services_override.yml | 2 +- bundle/Resources/doc/INSTALL.md | 4 +- bundle/Resources/doc/USAGE.md | 6 +- .../js/ezplatformautomatedtranslation.js | 11 +- .../views/ezadminui/javascripts.html.twig | 2 +- .../content/modal/add_translation.html.twig | 82 ++++++------ .../admin/content/modal/modal.html.twig | 118 ++++++++++++++++++ .../remote_translate_form_fields.html.twig | 17 ++- composer.json | 8 +- lib/Client/Deepl.php | 14 ++- lib/ClientProvider.php | 2 +- lib/Encoder.php | 10 +- lib/Encoder/Field/FieldEncoderManager.php | 4 +- lib/Encoder/Field/PageBuilderFieldEncoder.php | 10 +- lib/Encoder/Field/RichTextFieldEncoder.php | 4 +- lib/Encoder/Field/TextLineFieldEncoder.php | 6 +- lib/Encoder/RichText/RichTextEncoder.php | 2 +- lib/Translator.php | 14 +-- lib/TranslatorGuard.php | 10 +- .../Field/RichTextFieldEncoderTest.php | 4 +- .../Field/TextLineFieldEncoderTest.php | 4 +- .../Encoder/RichText/RichTextEncoderTest.php | 4 +- tests/lib/EncoderTest.php | 14 +-- 35 files changed, 266 insertions(+), 150 deletions(-) create mode 100644 bundle/Resources/views/themes/admin/content/modal/modal.html.twig diff --git a/bundle/Command/TranslateContentCommand.php b/bundle/Command/TranslateContentCommand.php index 700dce5..77d486c 100644 --- a/bundle/Command/TranslateContentCommand.php +++ b/bundle/Command/TranslateContentCommand.php @@ -8,9 +8,9 @@ namespace EzSystems\EzPlatformAutomatedTranslationBundle\Command; -use eZ\Publish\API\Repository\ContentService; -use eZ\Publish\API\Repository\PermissionResolver; -use eZ\Publish\API\Repository\UserService; +use Ibexa\Contracts\Core\Repository\ContentService; +use Ibexa\Contracts\Core\Repository\PermissionResolver; +use Ibexa\Contracts\Core\Repository\UserService; use EzSystems\EzPlatformAutomatedTranslation\ClientProvider; use EzSystems\EzPlatformAutomatedTranslation\Translator; use Symfony\Component\Console\Command\Command; @@ -29,13 +29,13 @@ final class TranslateContentCommand extends Command /** @var ClientProvider */ private $clientProvider; - /** @var \eZ\Publish\API\Repository\ContentService */ + /** @var \Ibexa\Contracts\Core\Repository\ContentService */ private $contentService; - /** @var \eZ\Publish\API\Repository\PermissionResolver */ + /** @var \Ibexa\Contracts\Core\Repository\PermissionResolver */ private $permissionResolver; - /** @var \eZ\Publish\API\Repository\UserService */ + /** @var \Ibexa\Contracts\Core\Repository\UserService */ private $userService; public function __construct( diff --git a/bundle/Controller/TranslationController.php b/bundle/Controller/TranslationController.php index 48437f3..08c6bda 100644 --- a/bundle/Controller/TranslationController.php +++ b/bundle/Controller/TranslationController.php @@ -8,8 +8,8 @@ namespace EzSystems\EzPlatformAutomatedTranslationBundle\Controller; -use EzSystems\EzPlatformAdminUiBundle\Controller\TranslationController as BaseTranslationController; -use EzSystems\EzPlatformAdminUiBundle\Controller\Controller; +use Ibexa\Bundle\AdminUi\Controller\TranslationController as BaseTranslationController; +use Ibexa\Contracts\AdminUi\Controller\Controller; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -38,7 +38,7 @@ public function addAction(Request $request): Response '\/?', urldecode( $this->generateUrl( - 'ezplatform.content.translate', + 'ibexa.content.translate', [ 'contentId' => '([0-9]*)', 'fromLanguageCode' => '([a-zA-Z-]*)', diff --git a/bundle/Event/FieldDecodeEvent.php b/bundle/Event/FieldDecodeEvent.php index 3c3e667..39bb15d 100644 --- a/bundle/Event/FieldDecodeEvent.php +++ b/bundle/Event/FieldDecodeEvent.php @@ -8,7 +8,7 @@ namespace EzSystems\EzPlatformAutomatedTranslationBundle\Event; -use eZ\Publish\Core\FieldType\Value; +use Ibexa\Core\FieldType\Value; final class FieldDecodeEvent { diff --git a/bundle/Event/FieldEncodeEvent.php b/bundle/Event/FieldEncodeEvent.php index f42d218..6104c38 100644 --- a/bundle/Event/FieldEncodeEvent.php +++ b/bundle/Event/FieldEncodeEvent.php @@ -8,7 +8,7 @@ namespace EzSystems\EzPlatformAutomatedTranslationBundle\Event; -use eZ\Publish\API\Repository\Values\Content\Field; +use Ibexa\Contracts\Core\Repository\Values\Content\Field; final class FieldEncodeEvent { diff --git a/bundle/EventListener/ContentProxyTranslateListener.php b/bundle/EventListener/ContentProxyTranslateListener.php index f03eb3e..3b2973a 100644 --- a/bundle/EventListener/ContentProxyTranslateListener.php +++ b/bundle/EventListener/ContentProxyTranslateListener.php @@ -8,8 +8,8 @@ namespace EzSystems\EzPlatformAutomatedTranslationBundle\EventListener; -use eZ\Publish\API\Repository\ContentService; -use EzSystems\EzPlatformAdminUi\Event\ContentProxyTranslateEvent; +use Ibexa\Contracts\Core\Repository\ContentService; +use Ibexa\Contracts\AdminUi\Event\ContentProxyTranslateEvent; use EzSystems\EzPlatformAutomatedTranslation\Translator; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -24,7 +24,7 @@ class ContentProxyTranslateListener implements EventSubscriberInterface /** @var \EzSystems\EzPlatformAutomatedTranslation\Translator */ private $translator; - /** @var \eZ\Publish\API\Repository\ContentService */ + /** @var \Ibexa\Contracts\Core\Repository\ContentService */ private $contentService; /** @var \Symfony\Component\Routing\RouterInterface */ @@ -79,7 +79,7 @@ public function translate(ContentProxyTranslateEvent $event): void ); $response = new RedirectResponse( - $this->router->generate('ezplatform.content.draft.edit', [ + $this->router->generate('ibexa.content.draft.edit', [ 'contentId' => $contentDraft->id, 'versionNo' => $contentDraft->getVersionInfo()->versionNo, 'language' => $toLanguageCode, diff --git a/bundle/Form/Data/TranslationAddData.php b/bundle/Form/Data/TranslationAddData.php index c3cf16a..a71c9cc 100644 --- a/bundle/Form/Data/TranslationAddData.php +++ b/bundle/Form/Data/TranslationAddData.php @@ -8,7 +8,7 @@ namespace EzSystems\EzPlatformAutomatedTranslationBundle\Form\Data; -use EzSystems\EzPlatformAdminUi\Form\Data\Content\Translation\TranslationAddData as BaseTranslationAddData; +use Ibexa\AdminUi\Form\Data\Content\Translation\TranslationAddData as BaseTranslationAddData; class TranslationAddData extends BaseTranslationAddData { diff --git a/bundle/Form/Extension/ContentEditType.php b/bundle/Form/Extension/ContentEditType.php index 2eec6e9..09485f7 100644 --- a/bundle/Form/Extension/ContentEditType.php +++ b/bundle/Form/Extension/ContentEditType.php @@ -8,11 +8,11 @@ namespace EzSystems\EzPlatformAutomatedTranslationBundle\Form\Extension; -use eZ\Publish\API\Repository\ContentTypeService; -use EzSystems\EzPlatformAdminUi\Form\Data\ContentTranslationData; +use Ibexa\Contracts\Core\Repository\ContentTypeService; +use Ibexa\AdminUi\Form\Data\ContentTranslationData; use EzSystems\EzPlatformAutomatedTranslation\Translator; -use EzSystems\EzPlatformContentForms\Data\Content\FieldData; -use EzSystems\EzPlatformContentForms\Form\Type\Content\ContentEditType as BaseContentEditType; +use Ibexa\Contracts\ContentForms\Data\Content\FieldData; +use Ibexa\ContentForms\Form\Type\Content\ContentEditType as BaseContentEditType; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; diff --git a/bundle/Form/Extension/LanguageCreateType.php b/bundle/Form/Extension/LanguageCreateType.php index 9d5dda8..2b43d15 100644 --- a/bundle/Form/Extension/LanguageCreateType.php +++ b/bundle/Form/Extension/LanguageCreateType.php @@ -8,7 +8,7 @@ namespace EzSystems\EzPlatformAutomatedTranslationBundle\Form\Extension; -use EzSystems\EzPlatformAdminUi\Form\Type\Language\LanguageCreateType as BaseLanguageCreateType; +use Ibexa\AdminUi\Form\Type\Language\LanguageCreateType as BaseLanguageCreateType; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\FormBuilderInterface; diff --git a/bundle/Form/Extension/TranslationAddType.php b/bundle/Form/Extension/TranslationAddType.php index 7a7533a..481b8a5 100644 --- a/bundle/Form/Extension/TranslationAddType.php +++ b/bundle/Form/Extension/TranslationAddType.php @@ -8,8 +8,8 @@ namespace EzSystems\EzPlatformAutomatedTranslationBundle\Form\Extension; -use eZ\Publish\Core\MVC\Symfony\Locale\LocaleConverterInterface; -use EzSystems\EzPlatformAdminUi\Form\Type\Content\Translation\TranslationAddType as BaseTranslationAddType; +use Ibexa\Core\MVC\Symfony\Locale\LocaleConverterInterface; +use Ibexa\AdminUi\Form\Type\Content\Translation\TranslationAddType as BaseTranslationAddType; use EzSystems\EzPlatformAutomatedTranslation\Client\ClientInterface; use EzSystems\EzPlatformAutomatedTranslation\ClientProvider; use EzSystems\EzPlatformAutomatedTranslationBundle\Form\TranslationAddDataTransformer; diff --git a/bundle/Form/TranslationAddDataTransformer.php b/bundle/Form/TranslationAddDataTransformer.php index 9ecb9ce..98eb422 100644 --- a/bundle/Form/TranslationAddDataTransformer.php +++ b/bundle/Form/TranslationAddDataTransformer.php @@ -8,7 +8,7 @@ namespace EzSystems\EzPlatformAutomatedTranslationBundle\Form; -use EzSystems\EzPlatformAdminUi\Form\Data\Content\Translation\TranslationAddData as BaseTranslationAddData; +use Ibexa\AdminUi\Form\Data\Content\Translation\TranslationAddData as BaseTranslationAddData; use EzSystems\EzPlatformAutomatedTranslationBundle\Form\Data\TranslationAddData; use Symfony\Component\Form\DataTransformerInterface; diff --git a/bundle/Resources/config/ezadminui.yml b/bundle/Resources/config/ezadminui.yml index 1ad4997..b02a2ae 100644 --- a/bundle/Resources/config/ezadminui.yml +++ b/bundle/Resources/config/ezadminui.yml @@ -1,10 +1,10 @@ services: ezautotranslate.ezadminui.component.javascripts: - parent: EzSystems\EzPlatformAdminUi\Component\TwigComponent + parent: Ibexa\AdminUi\Component\TwigComponent public: false arguments: $template: '@@EzPlatformAutomatedTranslation/ezadminui/javascripts.html.twig' tags: - - { name: ezplatform.admin_ui.component, group: 'script-body' } + - { name: ibexa.admin_ui.component, group: 'script-body' } diff --git a/bundle/Resources/config/services.yml b/bundle/Resources/config/services.yml index 64d6e61..dee05a8 100644 --- a/bundle/Resources/config/services.yml +++ b/bundle/Resources/config/services.yml @@ -17,7 +17,7 @@ services: EzSystems\EzPlatformAutomatedTranslation\Encoder\Field\PageBuilderFieldEncoder: arguments: $blockAttributeEncoderManager: '@EzSystems\EzPlatformAutomatedTranslation\Encoder\BlockAttribute\BlockAttributeEncoderManager' - $blockDefinitionFactory: '@EzSystems\EzPlatformPageFieldType\FieldType\Page\Block\Definition\BlockDefinitionFactory' + $blockDefinitionFactory: '@Ibexa\FieldTypePage\FieldType\Page\Block\Definition\BlockDefinitionFactory' EzSystems\EzPlatformAutomatedTranslation\Encoder\Field\RichTextFieldEncoder: arguments: @@ -43,7 +43,7 @@ services: # RichText encoder EzSystems\EzPlatformAutomatedTranslation\Encoder\RichText\RichTextEncoder: arguments: - $configResolver: '@ezpublish.config.resolver' + $configResolver: '@ibexa.config.resolver' EzSystems\EzPlatformAutomatedTranslation\Encoder: ~ @@ -64,16 +64,16 @@ services: EzSystems\EzPlatformAutomatedTranslationBundle\Form\Extension\TranslationAddType: tags: - - { name: form.type_extension, extended_type: EzSystems\EzPlatformAdminUi\Form\Type\Content\Translation\TranslationAddType } + - { name: form.type_extension, extended_type: Ibexa\AdminUi\Form\Type\Content\Translation\TranslationAddType } EzSystems\EzPlatformAutomatedTranslationBundle\Form\Extension\ContentEditType: tags: - - { name: form.type_extension, extended_type: EzSystems\EzPlatformContentForms\Form\Type\Content\ContentEditType } + - { name: form.type_extension, extended_type: Ibexa\ContentForms\Form\Type\Content\ContentEditType } EzSystems\EzPlatformAutomatedTranslationBundle\Form\Extension\LanguageCreateType: bind: - $localeList: '%ezpublish.locale.conversion_map%' + $localeList: '%ibexa.locale.conversion_map%' tags: - - { name: form.type_extension, extended_type: EzSystems\EzPlatformAdminUi\Form\Type\Language\LanguageCreateType } + - { name: form.type_extension, extended_type: Ibexa\AdminUi\Form\Type\Language\LanguageCreateType } EzSystems\EzPlatformAutomatedTranslationBundle\EventListener\ContentProxyTranslateListener: ~ diff --git a/bundle/Resources/config/services_override.yml b/bundle/Resources/config/services_override.yml index 42fe13f..7bcb6ac 100644 --- a/bundle/Resources/config/services_override.yml +++ b/bundle/Resources/config/services_override.yml @@ -1,6 +1,6 @@ services: EzSystems\EzPlatformAutomatedTranslationBundle\Controller\TranslationController: - decorates: EzSystems\EzPlatformAdminUiBundle\Controller\TranslationController + decorates: Ibexa\Bundle\AdminUi\Controller\TranslationController autoconfigure: true autowire: true tags: ['controller.service_arguments'] \ No newline at end of file diff --git a/bundle/Resources/doc/INSTALL.md b/bundle/Resources/doc/INSTALL.md index 87ee4f4..8d594d0 100644 --- a/bundle/Resources/doc/INSTALL.md +++ b/bundle/Resources/doc/INSTALL.md @@ -2,8 +2,8 @@ ## Requirements -* eZ Platform 3.x -* PHP 7.1+ +* Ibexa 4.x +* PHP 8.1+ ## Installation steps diff --git a/bundle/Resources/doc/USAGE.md b/bundle/Resources/doc/USAGE.md index c635efd..d25164e 100644 --- a/bundle/Resources/doc/USAGE.md +++ b/bundle/Resources/doc/USAGE.md @@ -12,8 +12,10 @@ ez_platform_automated_translation: default: configurations: google: - apiKey: "google-api-key" + apiKey: 'google-api-key' deepl: - authKey: "deepl-pro-key" + authKey: 'deepl-pro-key' + baseUri: 'api-url' #NEEDED ONLY FOR FREE API# + ``` diff --git a/bundle/Resources/public/admin/js/ezplatformautomatedtranslation.js b/bundle/Resources/public/admin/js/ezplatformautomatedtranslation.js index f139154..0f35d3a 100644 --- a/bundle/Resources/public/admin/js/ezplatformautomatedtranslation.js +++ b/bundle/Resources/public/admin/js/ezplatformautomatedtranslation.js @@ -1,14 +1,15 @@ jQuery(function () { let $ = jQuery; let $form = $("form[name=add-translation]", "#add-translation-modal"); + let $targetSelect = $(".target-language", $form); let $container = $(".ezautomatedtranslation-services-container:first", $form); let $error = $(".ezautomatedtranslation-error", $container); - $form.click(function () { + $targetSelect.click(function () { $error.addClass("invisible"); }); - $container.find(".ez-field-edit--ezboolean .ez-data-source__label").click(function () { + $container.find(".ez-field-edit--ezboolean .ez-data-source__label").on('click', function () { let $input = $(this).find("input[type='checkbox']"); let isChecked = $input.attr('checked') === 'checked'; if (isChecked) { @@ -18,7 +19,6 @@ jQuery(function () { $(this).addClass('is-checked'); $input.attr('checked', 'checked'); } - return false; }); $("form[name=add-translation]").submit(function () { @@ -38,10 +38,7 @@ jQuery(function () { let translationAvailable = (typeof sourceLang === 'undefined' || -1 !== $.inArray(sourceLang, mapping[serviceAlias])) && (-1 !== $.inArray(targetLang, mapping[serviceAlias])); if (false === translationAvailable) { $error.removeClass("invisible"); - if ($container.find(".ez-field-edit--ezboolean .ez-data-source__label").hasClass('is-checked')) { - $container.find(".ez-field-edit--ezboolean .ez-data-source__label").click(); - return false; - } + return false; } return true; }); diff --git a/bundle/Resources/views/ezadminui/javascripts.html.twig b/bundle/Resources/views/ezadminui/javascripts.html.twig index 757d82c..5f6a5cf 100644 --- a/bundle/Resources/views/ezadminui/javascripts.html.twig +++ b/bundle/Resources/views/ezadminui/javascripts.html.twig @@ -1 +1 @@ -{{ encore_entry_script_tags('ezplatform-automated-translation-js', null, 'ezplatform') }} +{{ encore_entry_script_tags('ezplatform-automated-translation-js', null, 'ibexa') }} diff --git a/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig b/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig index cf8d886..9fbd9d4 100644 --- a/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig +++ b/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig @@ -1,48 +1,48 @@ {% trans_default_domain 'locationview' %} -{% form_theme form '@ezdesign/ui/form_fields.html.twig' '@ezdesign/content/translation_add_form_fields.html.twig' %} +{% form_theme form '@ibexadesign/ui/form_fields.html.twig' '@ibexadesign/content/translation_add_form_fields.html.twig' %} - + {% endblock %} +{% endembed %} diff --git a/bundle/Resources/views/themes/admin/content/modal/modal.html.twig b/bundle/Resources/views/themes/admin/content/modal/modal.html.twig new file mode 100644 index 0000000..7deb4d0 --- /dev/null +++ b/bundle/Resources/views/themes/admin/content/modal/modal.html.twig @@ -0,0 +1,118 @@ +{% import "@ibexadesign/ui/component/macros.html.twig" as html %} + +{% set no_header = no_header|default(false) %} + +{% set size = size|default('') %} +{% if size == 'small' %} + {% set size_class = 'modal-sm' %} +{% elseif size == 'large' %} + {% set size_class = 'modal-lg' %} +{% elseif size == 'extra-large' %} + {% set size_class = 'modal-xl' %} +{% endif %} + +{% set attr = attr|default({})|merge({ + class: ('modal fade ibexa-modal ' + ~ (subtitle|default(false) ? 'ibexa-modal--has-subtitle ' : '') + ~ (no_header|default(false) ? 'ibexa-modal--no-header ') + ~ (no_header_border|default(false) ? 'ibexa-modal--no-header-border ') + ~ class|default('') ~ ' ' + ~ attr.class|default(''))|trim, + tabindex: attr.tabindex|default('-1'), + role: attr.role|default('dialog'), +}) %} + +{% if id is defined %} + {% set attr = attr|default({})|merge({ + id, + }) %} +{% endif %} + +{% if has_static_backdrop|default(false) %} + {% set attr = attr|merge({ + 'data-bs-backdrop': attr['data-bs-backdrop']|default('static') + }) %} +{% endif %} + +{% set attr_dialog = attr_dialog|default({})|merge({ + class: ('modal-dialog ' + ~ (size_class is defined ? size_class ~ ' ') + ~ attr_dialog.class|default(''))|trim, + role: attr_dialog.role|default('document'), +}) %} + +{% set attr_content = attr_content|default({})|merge({ + class: ('modal-content ' + ~ attr_content.class|default(''))|trim, +}) %} + +{% set attr_title = attr_title|default({})|merge({ + class: ('modal-title ' ~ attr_title.class|default(''))|trim, +}) %} + +{% set close_btn_title = 'close_btn.title'|trans({}, 'modal')|desc('Close') %} +{% set close_btn_aria_label = 'close_btn.aria_label'|trans({}, 'modal')|desc('Close') %} +{% set attr_close_btn = attr_close_btn|default({})|merge({ + class: ('close ' ~ attr_close_btn.class|default(''))|trim, + type: attr_close_btn.type|default('button'), + title: attr_close_btn.title|default(close_btn_title), + 'data-bs-dismiss': attr_close_btn['data-bs-dismiss']|default('modal'), + 'aria-label': attr_close_btn['aria-label']|default(close_btn_aria_label), +}) %} + +{% set close_btn %} + +{% endset %} + +
+ {% block dialog %} +
+ {% block content_before %}{% endblock %} + {% block content %} +
+ {% block header %} + {% if no_header %} + {{ close_btn }} + {% else %} + + {% endif %} + {% endblock %} + {% block subheader %} + {% if subtitle is defined %} +
+ {{ subtitle }} +
+ {% endif %} + {% endblock %} + {% block body %} + {% if block('body_content') is defined %} + + {% endif %} + {% endblock %} + {% block footer %} + {% if block('footer_content') is defined %} + + {% endif %} + {% endblock %} +
+ {% endblock %} + {% block content_after %}{% endblock %} +
+ {% endblock %} +
diff --git a/bundle/Resources/views/themes/admin/content/remote_translate_form_fields.html.twig b/bundle/Resources/views/themes/admin/content/remote_translate_form_fields.html.twig index 6faf70a..bf13cc9 100644 --- a/bundle/Resources/views/themes/admin/content/remote_translate_form_fields.html.twig +++ b/bundle/Resources/views/themes/admin/content/remote_translate_form_fields.html.twig @@ -1,27 +1,26 @@ {% if form.vars.autotranslated_data is defined %}
- {% if form.translatorAlias.vars.choices is defined %} + {% if form.translatorAlias.vars.choices is defined %} {# that is a select - then multiple providers #} - {{ 'tab.translations.remote.translation.service'|trans()|desc('Use automatic translation') }} +
{{ form_widget(form.translatorAlias) }} {% else %} {# that is a checkbox - then one provider #} - {{ 'tab.translations.remote.translation.service.with'|trans({"%alias%":form.translatorAlias.vars.label})|desc('Use automatic translation with %s') }}
-