From f0df7263397c7bcf3350cb1a4b338ea4f2d80697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Thu, 18 Jun 2026 18:14:57 +0200 Subject: [PATCH 01/20] IBX-10684: Document translation management --- docs/api/event_reference/event_reference.md | 1 + .../translations_management_events.md | 29 ++++++ docs/ibexa_products/editions.md | 1 + .../translations_management_flow.drawio | 1 + .../img/managing_translations_sxs_view.png | Bin 0 -> 79236 bytes .../img/translations_management_flow.png | Bin 0 -> 63076 bytes .../translations_management_guide.md | 89 ++++++++++++++++++ mkdocs.yml | 6 ++ 8 files changed, 127 insertions(+) create mode 100644 docs/api/event_reference/translations_management_events.md create mode 100644 docs/multisite/img/diagram_source/translations_management_flow.drawio create mode 100644 docs/multisite/img/managing_translations_sxs_view.png create mode 100644 docs/multisite/img/translations_management_flow.png create mode 100644 docs/multisite/translations_management/translations_management_guide.md diff --git a/docs/api/event_reference/event_reference.md b/docs/api/event_reference/event_reference.md index 6cc5792d698..49396a4264f 100644 --- a/docs/api/event_reference/event_reference.md +++ b/docs/api/event_reference/event_reference.md @@ -37,6 +37,7 @@ For example, copying a content item is connected with two events: `BeforeCopyCon "api/event_reference/segmentation_events", "api/event_reference/site_events", "api/event_reference/taxonomy_events", + "api/event_reference/translations_management_events", "api/event_reference/trash_events", "api/event_reference/twig_component_events", "api/event_reference/url_events", diff --git a/docs/api/event_reference/translations_management_events.md b/docs/api/event_reference/translations_management_events.md new file mode 100644 index 00000000000..a94a153a0e7 --- /dev/null +++ b/docs/api/event_reference/translations_management_events.md @@ -0,0 +1,29 @@ +--- +description: Events that are triggered when working with taxonomy. +edition: lts-update +page_type: reference +--- + +# Translations management events + +The [Translations management](configure_translations_management.md) package dispatches events at two levels. + +## Translation events + +Translation events are thrown once per field value per translation operation. +They are used for logging, analytics, and observability. +Both events are read-only, you can't use them to override the translation result. + +| Event | Dispatched by | Dispatched when | Properties | +|---|---|---|----| +[`BeforeTranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-BeforeTranslateEvent.html) | `TranslationService` | Before a translation request is sent to the provider | `TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | +| [`TranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-TranslateEvent.html) | `TranslationService` | After a translation response is received | `string $result`
`TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | + +## Side-by-side creation events + +Side-by-side creation events are dispatched when a new translation draft is being prepared. + +| Event | Dispatched by | Dispatched when | Properties | +|---|---|---|---| +| [`OnContentSideBySideTranslationCreateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Event-OnContentSideBySideTranslationCreateEvent.html) | `SideBySideTranslationService` | When a draft side-by-side translation of a content item is being created | `Request $request`
`Content $sourceContent`
`string $sourceLanguageCode`
`string $targetLanguageCode`
`?Content $targetDraft` | +| [`OnProductSideBySideTranslationCreateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Event-OnProductSideBySideTranslationCreateEvent.html) | `SideBySideTranslationService` | When a draft side-by-side translation of a product is being created | `Request $request`
`ContentAwareProductInterface $sourceProduct`
`ContentAwareProductInterface $targetProduct`
`string $sourceLanguageCode`
`string $targetLanguageCode`
`?ProductUpdateData $productUpdateData` | diff --git a/docs/ibexa_products/editions.md b/docs/ibexa_products/editions.md index fc5296196e7..5bc7c73bf9b 100644 --- a/docs/ibexa_products/editions.md +++ b/docs/ibexa_products/editions.md @@ -71,3 +71,4 @@ The features brought by LTS Updates become standard parts of the next LTS releas | [Integrated help](integrated_help.md) | ✔ | ✔ | ✔ | | [MCP servers](mcp_guide.md) | ✔ | ✔ | ✔ | | [Shopping list](shopping_list_guide.md) | | | ✔ | +| [Translations management](translations_management_guide.md) | ✔ | ✔ | ✔ | diff --git a/docs/multisite/img/diagram_source/translations_management_flow.drawio b/docs/multisite/img/diagram_source/translations_management_flow.drawio new file mode 100644 index 00000000000..e289d5a54ee --- /dev/null +++ b/docs/multisite/img/diagram_source/translations_management_flow.drawio @@ -0,0 +1 @@ +5Zptc6M2EIB/DTPtB2d4MRh/tB3Hcc5pPfW0l/uUkUEG9WTkCuGX+/WVQNiAyJn0iJ1cZzxjWEmw++xqWQk0a7TeTyjYhI/Eh1gzdX+vWbeaaRqGaWrip/sHKbFtJ5MEFPlSdhIs0DcohbqUJsiHcakjIwQztCkLPRJF0GMlGaCU7MrdVgSX77oBAVQECw9gVfoZ+SzMDdP1U8M9REEob+3asmEN8s5SEIfAJ7uCyBpr1ogSwrKj9X4EsaCXc8nG3b3QelSMwog1GTDIBmwBTqRtA3+NIqEZZDH/SzYCLgVRjAFDRLRsKNly/jSWJrBDzoWSJPKhuLShWcNdiBhcbIAnWnc8FLgsZGssm1cI4xHBhKZjLR9Ad+Vxecwo+QoLLY7nwuWKt6jGSXu3kDK4L4iksRNI1pDRA+8iW007GyEjr2PkIbUr+NGVsrDgQkfKgAyd4HjpE11+IAHXwx4qsMc+YtxMU6fwnwTGKfEI7qrI28RsQ9fv1mF2zaXlOC1h7l+T80jh/AeMCd7CuBC9mulgfs/hUhwF4ugXDKIg4VO3swFIOEXckM+AWHTm8wHzVMLd8Wur/litVqZXG/a+s3TslvxhdPWKP1R3HHNS0R29Ftxxp4b9noe3l0Z7HudgyWnyVIwg9ttNLJchXEks/QuG+0Thu4CRn8IlLybvj4i4fz3G9zUpxYMoSyk5YU5PIKUoCj5iCBvlHGFahpoj9DfiO1X4jijkRFO8gAaQdfLsLApHClbsAxI23Ssifvhe9bFFcBenj7zqUxFEIqrXxEc8N6fuCOGHr0+MbjmVWOYFHfFJzddgC7OLvkVsXwhpObS7NUQNu4ao3QLRmUo05LbE6e353fMIb/mxdyGwPfs82d4bkX1UyM6TJUZxCFte/V0EpeU0CNK6MrgNlLBmcS5FMUmol6+/M1H20NOK6xnol3YlVCspFAl5W96k+CGVzUYqD9+TylYjlUeqyndtq5wOHVAKDoUOG4IiFheuPBeC4jqiPNtdvWJ9dsETi6NmzfB0G+G5U/FMruZRW8lB2sjUBr1GlrSudr3bjlt/x8qukjEylHLUyfjXhofllsPD6Ff2987oVen/4/HkNPLCvRpP06vFU7PAmaoqP7yLDGFVFhF57dqaS91GfB5UPp+u5tL+f1V5djWV83r59To/XktnFPT8ER3iu0n09LsxGuyecNLJi7BCdq4WhnEINuLQSyg+DCnwvgpTzlWI5XJyhdHmXh5r9WVfDcsXK0G7slzpHMu+0gpQUyrBrtlCKVgL0vopQFp63Upa5Wj0+m/EsatwnM/+nEx/U2i+ClsbqKwyKkeNuNrFRxt7DrWkHIXUYno77gy/dMQ/b/lrOv787rDxRdyNfWVy7vm5KmxGHsAzsIR4TmKUbpVZt0vCGFlzNHmHAUaBaGCkQjKf7et9IN6j3yxBjLyb7nNaIDzH/JHwzLEN0/fq+o3bDu3jZD2+m3cU1k4N6jZeFNWi7v9/UNckhLqofrMnUJ7KC2hFkbGQp4SykAQkAnh8khbmu87PTn1mREBO6f4NGTvIrzhAwkiZPdwj9pRyteXZl0LL7V5eOT05FE7mkCJuN6RSptVVRWfrq+9N72LR9XK/qxVeDSqvn2RmHLfi258Z/PT0tU22Wjp9tGSN/wU= \ No newline at end of file diff --git a/docs/multisite/img/managing_translations_sxs_view.png b/docs/multisite/img/managing_translations_sxs_view.png new file mode 100644 index 0000000000000000000000000000000000000000..8a27800397a02b1754b83dd96ab186eb7c0549ff GIT binary patch literal 79236 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 Ll%QpjCW!w7Vj^{B literal 0 HcmV?d00001 diff --git a/docs/multisite/img/translations_management_flow.png b/docs/multisite/img/translations_management_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..61a7d0447121b8b589ea4f677a0ea4426a0b0bcb GIT binary patch literal 63076 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

`$l{^X2ID)=5&BQ*skWa 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 Uc-kv3aDbnRf+oC1&MM@;0Hh@#y8r+H literal 0 HcmV?d00001 diff --git a/docs/multisite/translations_management/translations_management_guide.md b/docs/multisite/translations_management/translations_management_guide.md new file mode 100644 index 00000000000..cc17a779ce4 --- /dev/null +++ b/docs/multisite/translations_management/translations_management_guide.md @@ -0,0 +1,89 @@ +--- +description: Translations management helps managers, developers and localization teams with multilingual content delivery. +edition: lts-update +month_change: true +--- + +# Translations management product guide + +## What is Translations management + +Content managers, translators and proofreaders who work with multilingual content in [[= product_name =]] often face a common set of challenges: + +- context is lost when the source text isn't visible alongside the translation +- translation of long and complex content items is time consuming +- quality assurance is slow and error-prone without a direct comparison view +- switching between tools or tabs to cross-reference languages disrupts focus and slows down publishing + +Translations management package addresses these pain points through a side-by-side view, machine translation and ability to invite reviewers to collaborate on content item or product translation. + +The package integrates with the [AI Actions framework](ai_actions.md) to support machine translation providers such as Google Translate and DeepL, and AI powered translation services like OpenAI, Anthropic, and Google Gemini. + +Administrators can manage providers and configure default provider-to-language-pair mappings directly in [[= product_name =]]'s user interface, while editors can trigger machine translation from the content editing interface. + +!!! note + + Translations management is a standalone set of features. + Although some views are similar to those delivered by the [Automated translations](automated_translations.md) opt-in package, Translations management does not require the `ibexa/automated-translation` package to run. + These two packages use different namespaces, service tags, and provider interfaces. + +## Availability + +Translations management is an [LTS Update](editions.md#lts-updates) available in all [[= product_name =]] editions. + +## How it works + +Before the translation flow can happen, an administrator sets up the translation providers and assigns language pairs to them. +Then, when an editor opens a content item and requests a new machine translation, the plugin resolves which provider to use. +It falls back from a language-pair rule to the user's manual selection if necessary. +The plugin then extracts the translatable fields from the source language version of a content item and sends them to the configured provider's API. +The translated strings are written into a target-language draft version of a content item, which opens in a side-by-side view for the editor to review and refine. +The editor can save the result as draft, share it with a reviewer or publish it. + +![Translations management flow](translations_management_flow.png "Translations management flow") + +## Capabilities + +### Translation provider management + +Administrators can manage translation providers and configure [language pair defaults](configure_translations_management.md#manage-language-pairs). +This way they can define which provider handles which language combination. +Editors see the configured default pre-selected when creating a new translation, but can override the selection if needed. + +Translations management supports several built-in translation providers, for example Google Translate, which is accessed through its REST API, or OpenAI, accessed through AI Actions. + +### Side-by-side translation view + +Translations management introduces a [side-by-side translation view]([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view) that displays the source language read-only next to an editable target language form. +In this view, editors can provide and review translations in context, without having to leave the content editing interface. + +![Side-by-side translation view](managing_translations_sxs_view.png "Side-by-side translation view") + +Editors can: + +- access the side-by-side view when creating a new translation, reviewing an existing one, or editing a draft +- compare source and target content field by field while editing +- copy all content from the source column to the target column with a single action +- provide localized versions of media assets +- use the distraction-free mode for focused editing of individual fields, with AI actions available inline +- choose whether the source column appears on the left or right in user settings + +!!! note "Excluded content types" + + Content types that are editable in Page builder or Form builder are excluded from side-by-side editing. + + Products are editable in the side-by-side view, but product attributes are not translatable. + +### CLI translation + +Translations management package exposes a [console command](configure_translations_management.md#translate-content-items-with-cli) for translating content items from the command line, +useful for batch processing or CI/CD workflows. + +### Extensibility + +Developers can [extend the translations management](extend_translations_management.md) package: + +- create custom translation providers +- add support for custom fields +- add custom content type exclusion rules +- tap into the translation lifecycle with [events](translations_management_events.md) diff --git a/mkdocs.yml b/mkdocs.yml index 6ecfc86c8cf..7d323554087 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -105,6 +105,7 @@ nav: - Discounts events: api/event_reference/discounts_events.md - Collaboration events: api/event_reference/collaboration_events.md - Integrated help events: api/event_reference/integrated_help_events.md + - Translations management events: api/event_reference/translations_management_events.md - Other events: api/event_reference/other_events.md - Notification channels: api/notification_channels.md - Administration: @@ -479,6 +480,11 @@ nav: - Language API: multisite/languages/language_api.md - Back office translations: multisite/languages/back_office_translations.md - Automated content translation: multisite/languages/automated_translations.md + - Translations management: + - Translations management: multisite/translations_management/translations_management.md + - Translations management product guide: multisite/translations_management/translations_management_guide.md + - Configure translations management: multisite/translations_management/configure_translations_management.md + - Extend translations management: multisite/translations_management/extend_translations_management.md - Permissions: - Permissions: permissions/permissions.md - Permission overview: permissions/permission_overview.md From 2aec5397af67a7a040310e897e27fbd4bca4a040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Fri, 19 Jun 2026 16:40:28 +0200 Subject: [PATCH 02/20] Add events and extensions --- .../config/services.yaml | 31 +++ .../ContentProxyTranslateSubscriber.php | 38 ++++ .../ImageAltTextTransformer.php | 30 +++ .../MyCustomExclusionRule.php | 16 ++ .../MyCustomProvider.php | 45 ++++ .../MyTranslationAddExtension.php | 18 ++ .../translations_management_events.md | 2 +- .../extend_translations_management.md | 194 ++++++++++++++++++ .../translations_management.md | 16 ++ 9 files changed, 389 insertions(+), 1 deletion(-) create mode 100644 code_samples/translations_management/config/services.yaml create mode 100644 code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php create mode 100644 code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php create mode 100644 code_samples/translations_management/src/TranslationsManagement/MyCustomExclusionRule.php create mode 100644 code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php create mode 100644 code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php create mode 100644 docs/multisite/translations_management/extend_translations_management.md create mode 100644 docs/multisite/translations_management/translations_management.md diff --git a/code_samples/translations_management/config/services.yaml b/code_samples/translations_management/config/services.yaml new file mode 100644 index 00000000000..b198c91ba69 --- /dev/null +++ b/code_samples/translations_management/config/services.yaml @@ -0,0 +1,31 @@ +services: + App\TranslationsManagement\MyCustomProvider: + tags: + - name: 'ibexa.translations_management.auto_translate.provider' + identifier: 'my_custom_provider' + validation_profile: 'ai_generic' + App\TranslationsManagement\MyProviderValidator: + tags: + - name: 'ibexa.translations_management.auto_translate.provider.validator' + profile: 'my_custom_profile' + App\TranslationsManagement\MyTranslationAddExtension: + tags: + - { name: form.type_extension } + App\TranslationsManagement\ImageAltTextTransformer: + tags: + - name: 'ibexa.translations_management.auto_translate.field_value_transformer' + field_type_identifier: 'ibexa_image' + App\TranslationsManagement\MyCustomExclusionRule: + tags: + - { name: 'ibexa.translations_management.side_by_side.exclusion_rule' } + app.translations_management.exclusion_rule.custom_field_types: + class: Ibexa\TranslationsManagement\SideBySide\Service\UnsupportedFieldTypeExclusionRule + arguments: + $excludedFieldTypeIdentifiers: ['custom_blog_post', 'custom_landing_page'] + tags: + - { name: 'ibexa.translations_management.side_by_side.exclusion_rule' } + App\TranslationsManagement\TwigComponent\MyTranslationModalFooter: + tags: + - name: ibexa.twig.component + group: 'admin-ui-content-translation-modal-footer' + priority: 10 diff --git a/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php b/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php new file mode 100644 index 00000000000..a4229b1e82b --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php @@ -0,0 +1,38 @@ + ['onProxyTranslate', 200], + ]; + } + + public function onProxyTranslate(ContentProxyTranslateEvent $event): void + { + // Read the translation context: + $event->getContentId(); + $event->getFromLanguageCode(); // ?string — null when no source language exists + $event->getToLanguageCode(); + $event->getLocationId(); // ?int — null when no location context is available + + $url = $this->urlGenerator->generate('your_custom_route', [ + 'contentId' => $event->getContentId(), + ]); + + $event->setResponse(new RedirectResponse($url)); + $event->stopPropagation(); + } +} diff --git a/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php b/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php new file mode 100644 index 00000000000..b977aef6777 --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php @@ -0,0 +1,30 @@ +getValue()->alternativeText ?? ''); + } + + public function decode(string $value, mixed $previousFieldValue, array $metadata): Value + { + $previousFieldValue->alternativeText = $value; + + return $previousFieldValue; + } +} diff --git a/code_samples/translations_management/src/TranslationsManagement/MyCustomExclusionRule.php b/code_samples/translations_management/src/TranslationsManagement/MyCustomExclusionRule.php new file mode 100644 index 00000000000..48a55e68e04 --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/MyCustomExclusionRule.php @@ -0,0 +1,16 @@ +getContentType()->identifier === 'my_excluded_type'; + } +} diff --git a/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php b/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php new file mode 100644 index 00000000000..3eada2b90f7 --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php @@ -0,0 +1,45 @@ +apiClient->translate( + $translationData->getText(), + $translationData->getSourceLanguage(), + $translationData->getTargetLanguage() + ); + } + + /** @return array */ + public function getSupportedLanguageCodes(): array + { + return ['en_GB', 'de_DE', 'fr_FR']; + } +} diff --git a/code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php b/code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php new file mode 100644 index 00000000000..c8985f4af8d --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php @@ -0,0 +1,18 @@ +add('my_custom_field', /* ... */); + } +} diff --git a/docs/api/event_reference/translations_management_events.md b/docs/api/event_reference/translations_management_events.md index a94a153a0e7..0bc9b7e3866 100644 --- a/docs/api/event_reference/translations_management_events.md +++ b/docs/api/event_reference/translations_management_events.md @@ -1,5 +1,5 @@ --- -description: Events that are triggered when working with taxonomy. +description: Events that are triggered when working with translations management. edition: lts-update page_type: reference --- diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md new file mode 100644 index 00000000000..2a467abc039 --- /dev/null +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -0,0 +1,194 @@ +--- +description: Extend translations management - add custom classes, exclude custom content types and intercept the flow. +edition: lts-update +month_change: true +--- + +# Extend translations management + +By extending [Translations management](translations_management_guide.md), you can build custom translation workflows and adapt the feature set's behavior to your specific requirements. +The package is designed to be extended in multiple ways. +You can create custom [translation providers](configure_translations_management.md#configure-translation-providers), field type transformers, exclusion rules, and UI components. +In all cases you follow the same pattern: implement an interface or extend a base class, then register the service with a service tag. +The package discovers and registers tagged services automatically. + +## Add custom translation provider + +Before you build a custom translation provider, make sure that the `ibexa/connector-ai` package has been installed in your system. + +To connect a translation service that is not built into the package, implement [`TranslationProviderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Provider-TranslationProviderInterface.html). +The `translate()` method receives a `TranslationDataInterface` object that carries the text to translate along with the source and target language codes: + +``` php hl_lines="31-44" +[[= include_code('code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php') =]] +``` + +Register the provider with the `ibexa.translations_management.auto_translate.provider` tag. +Both `identifier` and `validation_profile` are required attributes. + +``` yaml +[[= include_code('code_samples/translations_management/config/services.yaml', 1, 6) =]] +``` + +The `validation_profile` attribute links the provider to a validator that checks language codes and payload size before each call. +By default, three profiles are available: + +| Profile | Used by | +|---|---| +| `google` | Google Translate provider | +| `deepl` | DeepL provider | +| `ai_generic` | All built-in AI providers. Suitable for custom AI providers. | + +To define a custom validation profile, implement [`ProviderValidatorInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Validator-ProviderValidatorInterface.html) and register it: + +``` yaml +[[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] +[[= include_code('code_samples/translations_management/config/services.yaml', 7, 10) =]] +``` + +The [`DefaultProviderValidator`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Validator-DefaultProviderValidator.html) class is available as a reusable base with configurable maximum payload size and language code regex patterns. + +The package also provides several specialized interfaces for providers with specific requirements: + +| Interface | Purpose | +|---|---| +| [`ConfigurableProviderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Provider-ConfigurableProviderInterface.html) | Extends `TranslationProviderInterface`. Adds `getConfiguration()` and `isConfigured()` for providers that store API keys and other settings | +| [`AiTranslationProviderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Provider-AiTranslationProviderInterface.html) | Extends `ConfigurableProviderInterface`. Used as a type marker for AI-based providers, it inherits the configuration methods | +| [`TranslationHttpClientInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Http-TranslationHttpClientInterface.html) | For HTTP-based providers that use a REST API pattern | + +## Add support for custom field types + +The translation engine works by extracting translatable text from fields, sending it to the provider, and writing the translated text back. +This encode/decode cycle is handled by field value transformers, one per field type. +The package includes transformers for standard text and RichText fields. +To add support for a custom or non-standard field type, implement [`FieldValueTransformerInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-FieldValueTransformerInterface.html): + +- `getFieldTypeIdentifier()` - returns the field type identifier this transformer handles +- `encode(Field $field): EncodedFieldValue` - extracts the translatable string from the field and wraps it in an [`EncodedFieldValue`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-EncodedFieldValue.html). The constructor takes the extracted string as its first argument and an optional metadata array as its second. +- `decode(string $value, mixed $previousFieldValue, array $metadata): Value` - receives the translated string, the previous field value, and any metadata, and returns the updated field value + + +``` php hl_lines="19 24" +[[= include_code('code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php') =]] +``` + +Register the transformer with the `ibexa.translations_management.auto_translate.field_value_transformer` tag. +The `field_type_identifier` attribute is required and must match the value returned by `getFieldTypeIdentifier()`: + +``` yaml +[[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] +[[= include_code('code_samples/translations_management/config/services.yaml', 14, 17) =]] +``` + +For field types that require metadata, for example, RichText fields with embedded objects that must be preserved after translation, implement [`MetadataAwareFieldValueTransformerInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-MetadataAwareFieldValueTransformerInterface.html) instead. + +## Define custom exclusion rules + +Content types that should not use the side-by-side view are identified by exclusion rules. +The Translations management package ships with one rule that excludes content types that contain `ibexa_landing_page` or `ibexa_form` fields. + +### Exclude with custom class + +To exclude additional content types, for example, content types with fields that are known to behave poorly in the side-by-side layout, implement [`SideBySideExclusionRuleInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Service-SideBySideExclusionRuleInterface.html). +The `isExcluded()` method receives a [`ContentInfo`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-ContentInfo.html) object and returns `true` if the content item should be excluded. +Classes that implement this interface are automatically tagged via autoconfigure: + +``` php +[[= include_code('code_samples/translations_management/src/TranslationsManagement/MyCustomExclusionRule.php') =]] +``` + +If autoconfigure is not available, register the tag explicitly: + +``` yaml +[[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] +[[= include_code('code_samples/translations_management/config/services.yaml', 18, 20) =]] +``` + +### Exclude with existing class + +`MyCustomExclusionRule` targets one specific content type by name. +To exclude any content type that contain specific field types without the need to write a custom class, register an additional instance of the built-in [`UnsupportedFieldTypeExclusionRule`](https://github.com/ibexa/translations-management/blob/main/src/lib/SideBySide/Service/UnsupportedFieldTypeExclusionRule.php). +Because this registers a second instance of the service with different arguments, you can't use the class name as the service ID. +Use an arbitrary string ID instead to avoid overwriting the package's own registration: + +``` yaml +[[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] +[[= include_code('code_samples/translations_management/config/services.yaml', 21, 26) =]] +``` + +## Use Twig component extension points + +Two Twig component groups allow you to inject custom UI elements into the translation interface without the need to override their templates. +Such custom elements could be: + +- buttons that allow the editor to create a new translation either in the side-by-side view or the standard single-panel editor +- a disclaimer or policy notice that the editor must acknowledge before a translation is created + + +| Component group | Location | Variables available | +|---|---|---| +| `admin-ui-content-translation-modal-footer` | Footer of the **Add translation** modal | `form`, `content_id`, `location`, `allow_placeholder` | +| `admin-ui-content-edit-translation-select-footer` | Footer of the **Select translation** panel on the content edit screen | `form`, `content_id`, `main_language_code` | + +Both groups follow the same pattern: if any component renders a non-empty output into the group, the default footer buttons are replaced entirely by the component output. +Therefore, if your component template replaces the defaults, make sure it includes its own action buttons. + +Register a component with the `ibexa.twig.component` tag: + + +``` yaml +[[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] +[[= include_code('code_samples/translations_management/config/services.yaml', 27, 31) =]] +``` + +!!! note + + The `admin-ui-content-translation-modal-footer` group receives a `location` variable that may be `null` when the modal is rendered outside a location context. + Always check for `null` before you access location properties in your component template. + +## Extend the modal + +If injecting custom UI elements is not sufficient, you can extend the modal itself. +To add a field to the **Add translation** modal, for example, to let the editor choose a custom workflow or pass extra parameters along with the translation request, extend [`TranslationAddType`](https://github.com/ibexa/admin-ui/blob/main/src/lib/Form/Type/Content/Translation/TranslationAddType.php) with a [Symfony's Form Type extension](https://symfony.com/doc/current/form/create_form_type_extension.html). +It's the same mechanism the translations management package uses internally to inject its provider selector into the modal. + +Create a class that extends [`AbstractTypeExtension`](https://symfony.com/doc/current/reference/forms/types/form.html) and declare the extended type: + +``` php +[[= include_code('code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php') =]] +``` + +Register it as a service: + +``` yaml +[[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] +[[= include_code('code_samples/translations_management/config/services.yaml', 11, 13) =]] +``` + +The extra field is then available in the submitted form data, which the standard `admin-ui` controller passes through the translation flow. +Use this approach when you need to read extra input from the editor, not to redirect or replace the response. + +## Intercept translation flow + +The `BeforeTranslateEvent` and `TranslateEvent` [events](translations_management_events.md#translation-events) operate at the field-value level and cannot redirect the HTTP flow. +To intercept the "Add translation" action at the HTTP level, for example, to trigger auto-translation and redirect to a custom view, or to bypass the default flow entirely, subscribe to `admin-ui`'s `ContentProxyTranslateEvent`. + +The `translations-management` package listens to this event at priority `100`. +Subscribe at a higher priority to act before the package does: + +``` php hl_lines="35 36" +[[= include_code('code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php') =]] +``` + +Both highlighted calls are required: + +- `setResponse()` alone does not prevent the translations management listener at priority 100 from running and overwriting the response. +- `stopPropagation()` stops all lower-priority listeners from executing. + +When a response is set on the event, `admin-ui` uses it and doesn't proceed with the standard translation editor. + +!!! caution "Internal `ContentProxyTranslateEvent`" + + `ContentProxyTranslateEvent` is marked `@internal` in `ibexa/admin-ui`. + While it functions as an extension point in practice, its name and signature may change. + It may even be removed entirely without a deprecation notice. diff --git a/docs/multisite/translations_management/translations_management.md b/docs/multisite/translations_management/translations_management.md new file mode 100644 index 00000000000..468165d8559 --- /dev/null +++ b/docs/multisite/translations_management/translations_management.md @@ -0,0 +1,16 @@ +--- +description: Translations management brings multiple features that help managers, developers and localization teams automated multilingual content delivery. +edition: lts-update +page_type: landing_page +--- + +# Translations management + +Translations management helps [[= product_name =]] developers and users deliver automated content item, product and product catalog translations. + +[[= cards([ + "multisite/translations_management/translations_management_guide", + "multisite/translations_management/configure_translations_management", + "multisite/translations_management/extend_translations_management", + "api/event_reference/translations_management_events", +], columns=3) =]] From bffca77bd2eeae261c3be07341079a9133fd7ee4 Mon Sep 17 00:00:00 2001 From: dabrt Date: Fri, 19 Jun 2026 14:48:19 +0000 Subject: [PATCH 03/20] PHP & JS CS Fixes --- .../TranslationsManagement/ContentProxyTranslateSubscriber.php | 3 ++- .../src/TranslationsManagement/MyCustomProvider.php | 3 ++- .../src/TranslationsManagement/MyTranslationAddExtension.php | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php b/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php index a4229b1e82b..e9442a3115e 100644 --- a/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php +++ b/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php @@ -11,7 +11,8 @@ { public function __construct( private UrlGeneratorInterface $urlGenerator, - ) {} + ) { + } public static function getSubscribedEvents(): array { diff --git a/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php b/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php index 3eada2b90f7..fa77ae45952 100644 --- a/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php +++ b/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php @@ -11,7 +11,8 @@ { public function __construct( private MyApiClient $apiClient, - ) {} + ) { + } public function getIdentifier(): string { diff --git a/code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php b/code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php index c8985f4af8d..47608fd81eb 100644 --- a/code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php +++ b/code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php @@ -13,6 +13,6 @@ public static function getExtendedTypes(): iterable public function buildForm(FormBuilderInterface $builder, array $options): void { - $builder->add('my_custom_field', /* ... */); + $builder->add('my_custom_field'/* ... */); } } From 6f128e0162d4015a3764a9ee6874358d884929ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Fri, 19 Jun 2026 16:51:14 +0200 Subject: [PATCH 04/20] Fix formatting in events --- docs/api/event_reference/translations_management_events.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/event_reference/translations_management_events.md b/docs/api/event_reference/translations_management_events.md index 0bc9b7e3866..01c69e1b638 100644 --- a/docs/api/event_reference/translations_management_events.md +++ b/docs/api/event_reference/translations_management_events.md @@ -16,7 +16,7 @@ Both events are read-only, you can't use them to override the translation result | Event | Dispatched by | Dispatched when | Properties | |---|---|---|----| -[`BeforeTranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-BeforeTranslateEvent.html) | `TranslationService` | Before a translation request is sent to the provider | `TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | +| [`BeforeTranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-BeforeTranslateEvent.html) | `TranslationService` | Before a translation request is sent to the provider | `TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | | [`TranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-TranslateEvent.html) | `TranslationService` | After a translation response is received | `string $result`
`TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | ## Side-by-side creation events From 07583df621e963764dbf4db51ebb22e721503e79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Mon, 22 Jun 2026 06:57:59 +0200 Subject: [PATCH 05/20] Add "Configure..." stem to enable building --- .../configure_translations_management.md | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 docs/multisite/translations_management/configure_translations_management.md diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md new file mode 100644 index 00000000000..6007e6b6577 --- /dev/null +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -0,0 +1,65 @@ +--- +description: Configure and extend translations management, including side-by-side translation view, and AI-based translation providers. +edition: lts-update +month_change: true +--- + +# Translations management + +`ibexa/translations-management` extends [[= product_name =]]'s content translation capabilities represented by the built-in language management tools. + +## Install + +```bash +composer require ibexa/translations-management +``` + +After installation, run the Ibexa data migrations to complete the setup. +This creates the database records and default configuration the package requires. + +## Configure translation providers + + +### Provider configuration + + +### Provider types + + +### Provider options + + +### Built-in AI providers + + +### Plugin disabled state + + +### Error handling + + +## Manage language pairs + +## User settings + + +### Always use automatic translation + + +### Three-state provider selection + + +### Multiple provider rendering + + +## Side-by-side translation view + +### Side-by-side view functions + +### Architecture + +## Translate content items with CLI + +### CLI command options + +## Design system assets From 9a004638cb5cc51179b6a6058f37747cc0dc09bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:59:33 +0200 Subject: [PATCH 06/20] Implement reviewer comments --- .../ImageAltTextTransformer.php | 3 ++ .../TranslationsManagement/MyApiClient.php | 15 ++++++++ .../MyCustomProvider.php | 4 +++ .../MyTranslationAddExtension.php | 6 +++- composer.json | 3 +- .../translations_management_events.md | 6 ++-- .../extend_translations_management.md | 34 ++++++++++--------- .../translations_management_guide.md | 10 +++--- 8 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 code_samples/translations_management/src/TranslationsManagement/MyApiClient.php diff --git a/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php b/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php index b977aef6777..fd7906b7225 100644 --- a/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php +++ b/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php @@ -21,6 +21,9 @@ public function encode(Field $field): EncodedFieldValue return new EncodedFieldValue($field->getValue()->alternativeText ?? ''); } + /** + * @param array $metadata + */ public function decode(string $value, mixed $previousFieldValue, array $metadata): Value { $previousFieldValue->alternativeText = $value; diff --git a/code_samples/translations_management/src/TranslationsManagement/MyApiClient.php b/code_samples/translations_management/src/TranslationsManagement/MyApiClient.php new file mode 100644 index 00000000000..4091bb52859 --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/MyApiClient.php @@ -0,0 +1,15 @@ +`string $text`
`string $sourceLanguage`
`string $targetLanguage` | | [`TranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-TranslateEvent.html) | `TranslationService` | After a translation response is received | `string $result`
`TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | @@ -25,5 +25,5 @@ Side-by-side creation events are dispatched when a new translation draft is bein | Event | Dispatched by | Dispatched when | Properties | |---|---|---|---| -| [`OnContentSideBySideTranslationCreateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Event-OnContentSideBySideTranslationCreateEvent.html) | `SideBySideTranslationService` | When a draft side-by-side translation of a content item is being created | `Request $request`
`Content $sourceContent`
`string $sourceLanguageCode`
`string $targetLanguageCode`
`?Content $targetDraft` | -| [`OnProductSideBySideTranslationCreateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Event-OnProductSideBySideTranslationCreateEvent.html) | `SideBySideTranslationService` | When a draft side-by-side translation of a product is being created | `Request $request`
`ContentAwareProductInterface $sourceProduct`
`ContentAwareProductInterface $targetProduct`
`string $sourceLanguageCode`
`string $targetLanguageCode`
`?ProductUpdateData $productUpdateData` | +| [`OnContentSideBySideTranslationCreateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Event-OnContentSideBySideTranslationCreateEvent.html) | `ContentTranslationCreateController` | When a draft side-by-side translation of a content item is being created | `Request $request`
`Content $sourceContent`
`string $sourceLanguageCode`
`string $targetLanguageCode`
`?Content $targetDraft` | +| [`OnProductSideBySideTranslationCreateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Event-OnProductSideBySideTranslationCreateEvent.html) | `ProductTranslationViewController` | When a draft side-by-side translation of a product is being created | `Request $request`
`ContentAwareProductInterface $sourceProduct`
`ContentAwareProductInterface $targetProduct`
`string $sourceLanguageCode`
`string $targetLanguageCode`
`?ProductUpdateData $productUpdateData` | diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index 2a467abc039..5438a0c73b2 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -14,12 +14,12 @@ The package discovers and registers tagged services automatically. ## Add custom translation provider -Before you build a custom translation provider, make sure that the `ibexa/connector-ai` package has been installed in your system. +Before you build a custom translation provider, make sure that the `ibexa/connector-ai` package is installed in your system. To connect a translation service that is not built into the package, implement [`TranslationProviderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Provider-TranslationProviderInterface.html). The `translate()` method receives a `TranslationDataInterface` object that carries the text to translate along with the source and target language codes: -``` php hl_lines="31-44" +``` php hl_lines="36-49" [[= include_code('code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php') =]] ``` @@ -59,7 +59,7 @@ The package also provides several specialized interfaces for providers with spec ## Add support for custom field types The translation engine works by extracting translatable text from fields, sending it to the provider, and writing the translated text back. -This encode/decode cycle is handled by field value transformers, one per field type. +Field value transformers handle this encode/decode cycle, one per field type. The package includes transformers for standard text and RichText fields. To add support for a custom or non-standard field type, implement [`FieldValueTransformerInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-FieldValueTransformerInterface.html): @@ -73,31 +73,32 @@ To add support for a custom or non-standard field type, implement [`FieldValueTr ``` Register the transformer with the `ibexa.translations_management.auto_translate.field_value_transformer` tag. -The `field_type_identifier` attribute is required and must match the value returned by `getFieldTypeIdentifier()`: +The `field_type_identifier` attribute is required. +It must match the value that `getFieldTypeIdentifier()` returns: ``` yaml [[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] [[= include_code('code_samples/translations_management/config/services.yaml', 14, 17) =]] ``` -For field types that require metadata, for example, RichText fields with embedded objects that must be preserved after translation, implement [`MetadataAwareFieldValueTransformerInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-MetadataAwareFieldValueTransformerInterface.html) instead. +If a field type requires metadata, for example, RichText fields with embedded objects that you must preserved after translation, implement [`MetadataAwareFieldValueTransformerInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-MetadataAwareFieldValueTransformerInterface.html) instead. ## Define custom exclusion rules -Content types that should not use the side-by-side view are identified by exclusion rules. +Use exclusion rules to identify content types that cannot use the side-by-side view. The Translations management package ships with one rule that excludes content types that contain `ibexa_landing_page` or `ibexa_form` fields. ### Exclude with custom class To exclude additional content types, for example, content types with fields that are known to behave poorly in the side-by-side layout, implement [`SideBySideExclusionRuleInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Service-SideBySideExclusionRuleInterface.html). The `isExcluded()` method receives a [`ContentInfo`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-ContentInfo.html) object and returns `true` if the content item should be excluded. -Classes that implement this interface are automatically tagged via autoconfigure: +Classes that implement this interface are automatically tagged with `autoconfigure`: ``` php [[= include_code('code_samples/translations_management/src/TranslationsManagement/MyCustomExclusionRule.php') =]] ``` -If autoconfigure is not available, register the tag explicitly: +If `autoconfigure` is not available, register the tag explicitly: ``` yaml [[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] @@ -106,7 +107,7 @@ If autoconfigure is not available, register the tag explicitly: ### Exclude with existing class -`MyCustomExclusionRule` targets one specific content type by name. +`MyCustomExclusionRule` targets one specific content type by name. To exclude any content type that contain specific field types without the need to write a custom class, register an additional instance of the built-in [`UnsupportedFieldTypeExclusionRule`](https://github.com/ibexa/translations-management/blob/main/src/lib/SideBySide/Service/UnsupportedFieldTypeExclusionRule.php). Because this registers a second instance of the service with different arguments, you can't use the class name as the service ID. Use an arbitrary string ID instead to avoid overwriting the package's own registration: @@ -124,17 +125,18 @@ Such custom elements could be: - buttons that allow the editor to create a new translation either in the side-by-side view or the standard single-panel editor - a disclaimer or policy notice that the editor must acknowledge before a translation is created - | Component group | Location | Variables available | |---|---|---| | `admin-ui-content-translation-modal-footer` | Footer of the **Add translation** modal | `form`, `content_id`, `location`, `allow_placeholder` | | `admin-ui-content-edit-translation-select-footer` | Footer of the **Select translation** panel on the content edit screen | `form`, `content_id`, `main_language_code` | -Both groups follow the same pattern: if any component renders a non-empty output into the group, the default footer buttons are replaced entirely by the component output. -Therefore, if your component template replaces the defaults, make sure it includes its own action buttons. +The two groups behave differently: -Register a component with the `ibexa.twig.component` tag: +- `admin-ui-content-translation-modal-footer` — if any of the components renders output that is not empty, it entirely replaces the default footer buttons. +Your component template must therefore include its own action buttons. +- `admin-ui-content-edit-translation-select-footer` — component output is inserted between the existing **Edit** and **Discard** buttons. +Register a component with the `ibexa.twig.component` tag: ``` yaml [[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] @@ -146,7 +148,7 @@ Register a component with the `ibexa.twig.component` tag: The `admin-ui-content-translation-modal-footer` group receives a `location` variable that may be `null` when the modal is rendered outside a location context. Always check for `null` before you access location properties in your component template. -## Extend the modal +## Extend modal If injecting custom UI elements is not sufficient, you can extend the modal itself. To add a field to the **Add translation** modal, for example, to let the editor choose a custom workflow or pass extra parameters along with the translation request, extend [`TranslationAddType`](https://github.com/ibexa/admin-ui/blob/main/src/lib/Form/Type/Content/Translation/TranslationAddType.php) with a [Symfony's Form Type extension](https://symfony.com/doc/current/form/create_form_type_extension.html). @@ -180,9 +182,9 @@ Subscribe at a higher priority to act before the package does: [[= include_code('code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php') =]] ``` -Both highlighted calls are required: +Both highlighted calls are required: -- `setResponse()` alone does not prevent the translations management listener at priority 100 from running and overwriting the response. +- `setResponse()` alone does not prevent the translations management listener at priority 100 from running and overwriting the response. - `stopPropagation()` stops all lower-priority listeners from executing. When a response is set on the event, `admin-ui` uses it and doesn't proceed with the standard translation editor. diff --git a/docs/multisite/translations_management/translations_management_guide.md b/docs/multisite/translations_management/translations_management_guide.md index cc17a779ce4..60ef33f2b9b 100644 --- a/docs/multisite/translations_management/translations_management_guide.md +++ b/docs/multisite/translations_management/translations_management_guide.md @@ -26,7 +26,7 @@ Administrators can manage providers and configure default provider-to-language-p Translations management is a standalone set of features. Although some views are similar to those delivered by the [Automated translations](automated_translations.md) opt-in package, Translations management does not require the `ibexa/automated-translation` package to run. These two packages use different namespaces, service tags, and provider interfaces. - + ## Availability Translations management is an [LTS Update](editions.md#lts-updates) available in all [[= product_name =]] editions. @@ -37,7 +37,7 @@ Before the translation flow can happen, an administrator sets up the translation Then, when an editor opens a content item and requests a new machine translation, the plugin resolves which provider to use. It falls back from a language-pair rule to the user's manual selection if necessary. The plugin then extracts the translatable fields from the source language version of a content item and sends them to the configured provider's API. -The translated strings are written into a target-language draft version of a content item, which opens in a side-by-side view for the editor to review and refine. +The system writes the translated strings into a target-language draft of the content item, which opens in a side-by-side view for the editor to review and refine. The editor can save the result as draft, share it with a reviewer or publish it. ![Translations management flow](translations_management_flow.png "Translations management flow") @@ -71,13 +71,13 @@ Editors can: !!! note "Excluded content types" Content types that are editable in Page builder or Form builder are excluded from side-by-side editing. - + Products are editable in the side-by-side view, but product attributes are not translatable. ### CLI translation -Translations management package exposes a [console command](configure_translations_management.md#translate-content-items-with-cli) for translating content items from the command line, -useful for batch processing or CI/CD workflows. +The Translations management package exposes a [console command](configure_translations_management.md#translate-content-items-with-cli) for translating content items from the command line. +You can use it for batch processing or CI (Continuous Integration) workflows. ### Extensibility From 1196977c22a7bb0ed970aea381b0df77545e20f0 Mon Sep 17 00:00:00 2001 From: dabrt Date: Tue, 23 Jun 2026 12:04:46 +0000 Subject: [PATCH 07/20] PHP & JS CS Fixes --- .../src/TranslationsManagement/MyCustomProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php b/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php index 7afe9d42167..947d6f3e04f 100644 --- a/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php +++ b/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php @@ -9,7 +9,7 @@ final readonly class MyCustomProvider implements TranslationProviderInterface { - /** + /** * Replace MyApiClient with your HTTP client, SDK wrapper, or any service * that communicates with the external translation API. */ From 97c540b49d9138fb70cff701cadce0fe825ad723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Wed, 24 Jun 2026 19:26:51 +0200 Subject: [PATCH 08/20] Add the "Configura" article --- .../configure_translations_management.md | 238 ++++++++++++++++-- .../extend_translations_management.md | 44 ++++ 2 files changed, 265 insertions(+), 17 deletions(-) diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md index 6007e6b6577..b83ced07897 100644 --- a/docs/multisite/translations_management/configure_translations_management.md +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -1,65 +1,269 @@ --- -description: Configure and extend translations management, including side-by-side translation view, and AI-based translation providers. +description: Install translations management, and configure it, including AI-based translation providers. edition: lts-update month_change: true --- # Translations management -`ibexa/translations-management` extends [[= product_name =]]'s content translation capabilities represented by the built-in language management tools. +`ibexa/translations-management` extends [[= product_name =]]'s built-in language management tools that editors use for content translation. +It introduces a plugin that handles translation provider system by connecting to REST APIs and AI services, a [side-by-side editing interface](#side-by-side-translation-view) where editors can compare source and target languages and provide translations in a single view, and multiple extension points that you can use to [customize different areas of the translation workflow](extend_translations_management.md). -## Install +The package is standalone and does not require the `ibexa/automated-translation` add-on package to run. + +## Install package + +The Translations management LTS Update is optional. +To enable it, run the following command: ```bash composer require ibexa/translations-management ``` -After installation, run the Ibexa data migrations to complete the setup. -This creates the database records and default configuration the package requires. +After installation, run the [[= product_name_base =]] data migrations to complete the setup: + +```bash +php bin/console ibexa:migrations:import --from-bundle=IbexaTranslationsManagementBundle +php bin/console ibexa:migrations:migrate +``` + +This copies the migration files into the project's migrations directory and adds the default action configurations in the database. ## Configure translation providers +Translation providers are the services that perform the actual text translation. +There are two types of translation providers: + +- REST API-based providers call a translation service such as Google Translate or DeepL directly by using an API key. +- AI-based providers send translation requests through the [AI Actions](configure_ai_actions.md) framework, relying on the same model selection and policy controls as other AI features in [[= product_name =]]. -### Provider configuration +Out of the box, Translations management can support the following translation providers: +| Provider | Type | Configuration | +|---|---|---| +| Google Translate | REST API | API key | +| DeepL | REST API | API key | +| OpenAI | AI Actions | Action Configuration identifier | +| Anthropic (Claude) | AI Actions | Action Configuration identifier | +| Google Gemini | AI Actions | Action Configuration identifier | -### Provider types +!!! note "Prerequisites for the default translation providers" + Before you can configure translation providers, you must fulfill the following prerequisites: -### Provider options + - For the REST API-based translation providers, add API keys that you obtain from the machine translation services to the `.env` file in the root directory of your project. + - For the AI-based translation providers, [install and configure](configure_ai_actions.md) the `ibexa/connector-ai` package and their corresponding connectors. -### Built-in AI providers +#### Built-in AI providers +When you install the Translations management package, the installation process automatically creates AI [Action Configurations](extend_ai_actions.md#action-configurations) for OpenAI (`auto_translate_openai`), Google Gemini (`auto_translate_gemini`), and Anthropic Clause (`auto_translate_anthropic`). -### Plugin disabled state +You can use them directly in provider configuration: +| Action Configuration identifier | Handler | Default model | +|---|---|---| +| `auto_translate_openai` | `openai-text-to-text` | `gpt-5` | +| `auto_translate_gemini` | `gemini-text-to-text` | `gemini-pro-latest` | +| `auto_translate_anthropic` | `anthropic-text-to-text` | `claude-sonnet-4-20250514` | -### Error handling +You can then [customize these configurations in the UI]([[= user_doc =]]/ai_actions/work_with_ai_actions/#edit-existing-ai-actions). + +### Add YAML configuration + +In `config/packages` folder, create a `translations_management.yaml` file. +You configure the providers in the SiteAccess-aware `translations_management` namespace. + +``` yaml +ibexa: + system: + default: + translations_management: + auto_translate: + providers: + google: + apiKey: '%env(GOOGLE_TRANSLATE_API_KEY)%' + deepl: + apiKey: '%env(DEEPL_API_KEY)%' + openai: + actionConfigurationIdentifier: 'auto_translate_openai' + anthropic: + actionConfigurationIdentifier: 'auto_translate_anthropic' + gemini: + actionConfigurationIdentifier: 'auto_translate_gemini' +``` + +The `apiKey` values must reference API key values that you added to the `.env` file. +The `actionConfigurationIdentifier` values must reference existing Action Configurations. +If a value is missing or empty, the provider doesn't appear in the UI as a selectable option. + +!!! caution "AI policies required" + + AI-based providers require that AI policies are assigned to user roles. + If an editor can't see AI providers in the translation provider dropdown, check if the appropriate AI policies are granted in their role definition. + +If you fail to configure the providers, the Translations management disables itself in the editor's UI. +The **Use automatic translation** checkbox is disabled, and a message is displayed that prompts the user to contact the administrator + +This state is controlled by `TranslationProviderFormFieldsConfigurator::isAutomaticTranslationDisabled()`, which returns `true` when the provider registry is empty. + +### Advanced translation provider options + +In addition to their required authentication setting, all providers support two optional keys: + +- `supportedLanguageCodes` - overrides the default list of language codes this provider accepts +- `languageCodesMap` - maps language codes used by [[= product_name =]], for example, `eng-GB`, to the provider-specific codes the API expects + +``` yaml +ibexa: + system: + default: + translations_management: + auto_translate: + providers: + # ... + openai: + actionConfigurationIdentifier: 'auto_translate_openai' + supportedLanguageCodes: + - 'eng-GB' + - 'ger-DE' + - 'fre-FR' + languageCodesMap: + eng-GB: 'en' + ger-DE: 'de' + fre-FR: 'fr' +``` +The `supportedLanguageCodes` setting controls which languages are available when creating [language pairs](#manage-language-pairs) for this provider. + +!!! note "Identifier normalization" + + Provider identifiers are normalized from hyphens to underscores during configuration processing. + Use one format consistently. + If you mix `my-provider` and `my_provider` for the same provider, it results in an exception. ## Manage language pairs -## User settings +Language pair definitions decide which provider handles each source-to-target language combination by default. +For example, you can decide that English to French translations should use DeepL. +When an editor [opens the translation modal]([[= user_doc =]]/content_management/translate_content/#add-new-translation) and selects a matching language combination, the provider that you chose is pre-selected in the dropdown. +The editor can override the pre-selection. +You manage language pairs in back office, under **Admin** > **Languages** > **Translation providers**. +The configurations are persisted by `SettingService` and stored in the `ibexa_setting` database table under group `translations_management` with identifier `language_pairs`. + +The list of languages available when creating a language pair is determined by what each provider supports. +You can only select the languages that are present in a provider's [supported list](#advanced-translation-provider-options) for that provider's pairs. + +## User settings -### Always use automatic translation +The Translations management package adds two preferences that editors can configure under their [user settings](getting_started/get_started/#browsing). +Each editor can configure them independently, and they do not affect other users. +- Column order -### Three-state provider selection +Editors can choose whether the target language column appears on the left or right in the side-by-side view. +By default, the target is on the right, and each editor can override this default. +You can change the system-wide default in configuration: -### Multiple provider rendering +``` yaml +ibexa: + system: + default: + translations_management: + default_side_by_side_column_order: 'source_left_target_right' +``` +The accepted values are `source_left_target_right` (default) and `source_right_target_left`. ## Side-by-side translation view -### Side-by-side view functions +The [side-by-side translation view]([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view) is a two-column content editing interface where the source column is read-only and the target column is an editable form. + +Content types that contain the `ibexa_landing_page` or `ibexa_form` fields are not supported, and editors can open them in the standard single-language editor only. +You can exclude support for additional content types if needed. +To do it, [define custom exclusion rules](extend_translations_management.md#define-custom-exclusion-rules). ### Architecture +The side-by-side view consists of three forms placed in a single Twig template: + +- `view.sourcePreviewForm` — the source language content, rendered as read-only fields +- `view.form` — the target language content, rendered as editable fields +- `view.copyAllForm` — the **Copy all from source** action + +To assemble the view, `SideBySideEditContextBuilder` performs the following actions: + +1. Resolves source and target languages +2. Loads the correct content version +3. Groups fields by their content type field groups + +!!! note "Meta fields" + + The builder excludes the fields that are marked marked as `meta: true` or belong to a field group is listed in `admin_ui_forms.content_edit.meta_field_groups_list`, and does not render them. + +To resolve the column order, `SideBySideTargetLanguagePositionResolver` reads the user setting and falls back to `source_left_target_right` when the setting is not made. +The Twig template applies `order-xl-*` classes for responsive column placement. + +### Side-by-side view behavior + +Editors have multiple ways to arrive at the side-by-side translation view, for example: + +- From the **Create a new translation** modal, by clicking the **Open side-by-side** action. + This submits the modal to the `ibexa.translations_management.side_by_side_create` route, which creates a new draft and redirects to `side_by_side_view` with the resolved `versionNo`. + +- From the **Versions** tab, by clicking the **Edit side-by-side** action next to a draft whose source and target languages differ. + This doesn't create a new draft, and the existing version number is used. + +!!! tip "Routes" + + The Translations management package registers internal back office routes. + To list them with their current paths, run: + + ``` bash + php bin/console debug:router | grep translations_management + ``` + +### Side-by-side view functions + +The side-by-side translation view has several functions, including: + +- Copy all from source + +When an editor clicks the **Copy all from source** action, all translatable field values are copied from the source to target column. +It's a single server-side operation handled by `SideBySideFieldCopyService::copyAllFields()` after which the view is reloaded. + +- Draft conflict warning + +When an user opens the translation modal and selects a target language which already has a draft translation, a warning appears in the modal. +The warning is shown or hidden dynamically by `side-by-side-translation-modal-warning.js` when the user changes the target language selection. + ## Translate content items with CLI +For the purposes of batch processing, automations and other scripted actions, the Translations management package exposes a command that translates content items by using any of the configured providers: + +``` bash +php bin/console ibexa:translations:auto-translate-content \ + --content-id=42 \ + --provider=deepl \ + --from=eng-GB \ + --to=fre-FR +``` + +!!! tip "Command alias" + + You can use `ibexa:translations:translate-content` as an alias. + +The command uses the same provider configuration and field value transformers as the UI, so the results are the same if an editor triggered the translation manually. + ### CLI command options -## Design system assets +| Option | Required | Description | +|---|---|---| +| `--content-id` | Yes | ID of the content item to translate | +| `--provider` | Yes | Identifier of the translation provider to use | +| `--from` | Yes | Source language code | +| `--to` | Yes | Target language code | +| `--user-id` | No | Repository user ID to run the translation (default: `14`) | +| `--draft-only` | No | Create a translated draft without publishing it | diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index 5438a0c73b2..574d8af7829 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -194,3 +194,47 @@ When a response is set on the event, `admin-ui` uses it and doesn't proceed with `ContentProxyTranslateEvent` is marked `@internal` in `ibexa/admin-ui`. While it functions as an extension point in practice, its name and signature may change. It may even be removed entirely without a deprecation notice. + +## Manage language pairs programatically + +To manage language pairs programmatically, inject `LanguagePairServiceInterface`: + +``` php +use Ibexa\TranslationsManagement\AutoTranslate\LanguagePair\LanguagePairServiceInterface; +use Ibexa\Contracts\Core\Repository\LanguageService; + +/** @var LanguagePairServiceInterface $languagePairService */ +/** @var LanguageService $languageService */ + +$sourceLanguage = $languageService->loadLanguage('eng-GB'); +$targetLanguage = $languageService->loadLanguage('fre-FR'); + +// $provider is an instance of TranslationProviderInterface +$languagePairService->createLanguagePair( + $sourceLanguage, + $targetLanguage, + $provider, + false // set to true to replace an existing pair with the same source and target +); +``` + +The service exposes the following methods: + +| Method | Description | +|---|---| +| `createLanguagePair()` | Create a new language pair. Pass `true` as the fourth argument to overwrite an existing pair with the same source and target. | +| `updateLanguagePair()` | Update an existing language pair by ID. | +| `syncLanguagePairsForSourceAndProvider()` | Synchronize all target languages for a given source language and provider. | +| `loadLanguagePairs()` | Load all configured language pairs. | +| `deleteLanguagePairById()` | Delete a language pair by ID. | +| `deleteLanguagePairsForProvider()` | Delete all language pairs associated with a given provider. | + +## Service tags reference + +The following service tags expose additional extension points that you can use to customize and extend translations management behavior. + +| Tag | Purpose | Required attributes | +|---|---|---| +| `ibexa.translations_management.auto_translate.provider.language_normalizer` | Register a language code normalizer for a provider | — | +| `ibexa.translations_management.auto_translate.provider.ai.translation_strategy` | Register a custom AI translation strategy (prompt structure) | `priority` | +| `ibexa.translations_management.auto_translate.metadata_validation.retry_policy` | Register a metadata validation retry policy | `priority` | From 510b6bb2762a2b5a726a79ba371d35f1e7646c5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Thu, 25 Jun 2026 12:43:13 +0200 Subject: [PATCH 09/20] Clarify configuration article --- .../TranslationPairManager.php | 36 +++++++++++ ...translations_management_language_pairs.png | Bin 0 -> 41554 bytes .../configure_translations_management.md | 58 +++++++++++++++--- .../extend_translations_management.md | 34 ---------- .../translations_management_guide.md | 8 ++- mkdocs.yml | 2 +- 6 files changed, 91 insertions(+), 47 deletions(-) create mode 100644 code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php create mode 100644 docs/multisite/img/translations_management_language_pairs.png diff --git a/code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php b/code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php new file mode 100644 index 00000000000..1d15730c157 --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php @@ -0,0 +1,36 @@ +languageService->loadLanguage($sourceLanguageCode); + $targetLanguage = $this->languageService->loadLanguage($targetLanguageCode); + + return $this->languagePairService->createLanguagePair( + $sourceLanguage, + $targetLanguage, + $provider, + $replaceExisting, + ); + } +} diff --git a/docs/multisite/img/translations_management_language_pairs.png b/docs/multisite/img/translations_management_language_pairs.png new file mode 100644 index 0000000000000000000000000000000000000000..a15adf7af5cc91ce602535f7ff8ca84748aa098d GIT binary patch literal 41554 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
rzeSwR?Yjd|bB?vA}TM9bdM2k%K&> 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 ZIA+jGP4k%4^TZMO(NNV@!C$lv`wz+*RlWcK literal 0 HcmV?d00001 diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md index b83ced07897..3a79a138c77 100644 --- a/docs/multisite/translations_management/configure_translations_management.md +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -134,7 +134,7 @@ ibexa: fre-FR: 'fr' ``` -The `supportedLanguageCodes` setting controls which languages are available when creating [language pairs](#manage-language-pairs) for this provider. +The `supportedLanguageCodes` setting controls which languages are available when creating [language pairs](#define-language-pairs) for this provider. !!! note "Identifier normalization" @@ -142,27 +142,67 @@ The `supportedLanguageCodes` setting controls which languages are available when Use one format consistently. If you mix `my-provider` and `my_provider` for the same provider, it results in an exception. -## Manage language pairs +## Define language pairs Language pair definitions decide which provider handles each source-to-target language combination by default. For example, you can decide that English to French translations should use DeepL. When an editor [opens the translation modal]([[= user_doc =]]/content_management/translate_content/#add-new-translation) and selects a matching language combination, the provider that you chose is pre-selected in the dropdown. The editor can override the pre-selection. -You manage language pairs in back office, under **Admin** > **Languages** > **Translation providers**. -The configurations are persisted by `SettingService` and stored in the `ibexa_setting` database table under group `translations_management` with identifier `language_pairs`. - The list of languages available when creating a language pair is determined by what each provider supports. You can only select the languages that are present in a provider's [supported list](#advanced-translation-provider-options) for that provider's pairs. +The configurations are persisted by `SettingService` and stored in the `ibexa_setting` database table under group `translations_management` with identifier `language_pairs`. + +You can manage language pairs in [[= product_name_base =]]'s back office or programatically. + +### Manage language pairs in UI + +To manage language pairs in the back office, go to **Admin** -> **Languages** -> **Language pairs** tab. +Here you can create, edit and delete language pairs. + +To add a language pair, click **+ Add language pair**. +Then, pick a source language and one or more target languages from their respective drop-down lists. +Finally, from the **Translation service** list, pick a translation provider and click **Save and close** + +![Creating a language pair](translations_management_language_pairs.png "Creating a language pair") + +This will add as many language pairs as you picked target languages. + +!!! note + + The **Add language pair** action is disabled if no translation providers are [configured](#configure-translation-providers). + + If a language pair already exists and is associated with a translation provider, you can't create another language pair with a different provider. + Edit the existing language pair instead. + +## Manage language pairs programmatically + +To manage language pairs programmatically, create a service class and inject `LanguagePairServiceInterface` into its constructor. +Symfony autowires it automatically` so no manual service configuration is needed. + + +``` php hl_lines="2" +[[= include_code('code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php', 14, 35) =]] +``` + +The service exposes the following methods: + +| Method | Description | +|---|---| +| `createLanguagePair()` | Create a new language pair. Pass `true` as the fourth argument to overwrite an existing pair with the same source and target. | +| `updateLanguagePair()` | Update an existing language pair by ID. | +| `syncLanguagePairsForSourceAndProvider()` | Synchronize all target languages for a given source language and provider. | +| `loadLanguagePairs()` | Load all configured language pairs. | +| `deleteLanguagePairById()` | Delete a language pair by ID. | +| `deleteLanguagePairsForProvider()` | Delete all language pairs associated with a given provider. | + ## User settings -The Translations management package adds two preferences that editors can configure under their [user settings](getting_started/get_started/#browsing). +The Translations management package adds preferences that editors can configure under their [user settings](getting_started/get_started/#browsing). Each editor can configure them independently, and they do not affect other users. -- Column order - -Editors can choose whether the target language column appears on the left or right in the side-by-side view. +For example, editors can choose whether the target language column appears on the left or right in the side-by-side view. By default, the target is on the right, and each editor can override this default. You can change the system-wide default in configuration: diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index 574d8af7829..2c16e93e709 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -195,40 +195,6 @@ When a response is set on the event, `admin-ui` uses it and doesn't proceed with While it functions as an extension point in practice, its name and signature may change. It may even be removed entirely without a deprecation notice. -## Manage language pairs programatically - -To manage language pairs programmatically, inject `LanguagePairServiceInterface`: - -``` php -use Ibexa\TranslationsManagement\AutoTranslate\LanguagePair\LanguagePairServiceInterface; -use Ibexa\Contracts\Core\Repository\LanguageService; - -/** @var LanguagePairServiceInterface $languagePairService */ -/** @var LanguageService $languageService */ - -$sourceLanguage = $languageService->loadLanguage('eng-GB'); -$targetLanguage = $languageService->loadLanguage('fre-FR'); - -// $provider is an instance of TranslationProviderInterface -$languagePairService->createLanguagePair( - $sourceLanguage, - $targetLanguage, - $provider, - false // set to true to replace an existing pair with the same source and target -); -``` - -The service exposes the following methods: - -| Method | Description | -|---|---| -| `createLanguagePair()` | Create a new language pair. Pass `true` as the fourth argument to overwrite an existing pair with the same source and target. | -| `updateLanguagePair()` | Update an existing language pair by ID. | -| `syncLanguagePairsForSourceAndProvider()` | Synchronize all target languages for a given source language and provider. | -| `loadLanguagePairs()` | Load all configured language pairs. | -| `deleteLanguagePairById()` | Delete a language pair by ID. | -| `deleteLanguagePairsForProvider()` | Delete all language pairs associated with a given provider. | - ## Service tags reference The following service tags expose additional extension points that you can use to customize and extend translations management behavior. diff --git a/docs/multisite/translations_management/translations_management_guide.md b/docs/multisite/translations_management/translations_management_guide.md index 60ef33f2b9b..3466bdafc21 100644 --- a/docs/multisite/translations_management/translations_management_guide.md +++ b/docs/multisite/translations_management/translations_management_guide.md @@ -46,11 +46,13 @@ The editor can save the result as draft, share it with a reviewer or publish it. ### Translation provider management -Administrators can manage translation providers and configure [language pair defaults](configure_translations_management.md#manage-language-pairs). +Administrators can manage translation providers and configure [language pair defaults](configure_translations_management.md#define-language-pairs). This way they can define which provider handles which language combination. Editors see the configured default pre-selected when creating a new translation, but can override the selection if needed. -Translations management supports several built-in translation providers, for example Google Translate, which is accessed through its REST API, or OpenAI, accessed through AI Actions. +![Creating a language pair](translations_management_language_pairs.png "Creating a language pair") + +The package provides integrations with several translation providers, including Google Translate through its REST API and OpenAI through [AI Actions](ai_actions.md). ### Side-by-side translation view @@ -74,7 +76,7 @@ Editors can: Products are editable in the side-by-side view, but product attributes are not translatable. -### CLI translation +### Command line translation The Translations management package exposes a [console command](configure_translations_management.md#translate-content-items-with-cli) for translating content items from the command line. You can use it for batch processing or CI (Continuous Integration) workflows. diff --git a/mkdocs.yml b/mkdocs.yml index 7d323554087..dc16cdb66a8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -482,7 +482,7 @@ nav: - Automated content translation: multisite/languages/automated_translations.md - Translations management: - Translations management: multisite/translations_management/translations_management.md - - Translations management product guide: multisite/translations_management/translations_management_guide.md + - Translations management guide: multisite/translations_management/translations_management_guide.md - Configure translations management: multisite/translations_management/configure_translations_management.md - Extend translations management: multisite/translations_management/extend_translations_management.md - Permissions: From 9f3f304abaa440028512bb53a7446697951ff2d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Thu, 25 Jun 2026 14:35:32 +0200 Subject: [PATCH 10/20] Fix issues --- .../configure_translations_management.md | 22 +++++++-------- .../extend_translations_management.md | 23 +++++++-------- .../translations_management_guide.md | 28 +++++++++---------- 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md index 3a79a138c77..59bcd89dafc 100644 --- a/docs/multisite/translations_management/configure_translations_management.md +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -1,5 +1,5 @@ --- -description: Install translations management, and configure it, including AI-based translation providers. +description: Install translations management configure translation providers, language pairs, and more. edition: lts-update month_change: true --- @@ -7,7 +7,7 @@ month_change: true # Translations management `ibexa/translations-management` extends [[= product_name =]]'s built-in language management tools that editors use for content translation. -It introduces a plugin that handles translation provider system by connecting to REST APIs and AI services, a [side-by-side editing interface](#side-by-side-translation-view) where editors can compare source and target languages and provide translations in a single view, and multiple extension points that you can use to [customize different areas of the translation workflow](extend_translations_management.md). +It introduces a plugin that handles the translation provider system by connecting to REST APIs and AI services, a [side-by-side editing interface](#side-by-side-translation-view) where editors can compare source and target languages and provide translations in a single view, and multiple extension points that you can use to [customize different areas of the translation workflow](extend_translations_management.md). The package is standalone and does not require the `ibexa/automated-translation` add-on package to run. @@ -57,7 +57,7 @@ Out of the box, Translations management can support the following translation pr #### Built-in AI providers -When you install the Translations management package, the installation process automatically creates AI [Action Configurations](extend_ai_actions.md#action-configurations) for OpenAI (`auto_translate_openai`), Google Gemini (`auto_translate_gemini`), and Anthropic Clause (`auto_translate_anthropic`). +When you install the Translations management package, the installation process automatically creates AI [Action Configurations](extend_ai_actions.md#action-configurations) for OpenAI (`auto_translate_openai`), Google Gemini (`auto_translate_gemini`), and Anthropic Claude (`auto_translate_anthropic`). You can use them directly in provider configuration: @@ -71,7 +71,7 @@ You can then [customize these configurations in the UI]([[= user_doc =]]/ai_acti ### Add YAML configuration -In `config/packages` folder, create a `translations_management.yaml` file. +In `config/packages`, create a `translations_management.yaml` file. You configure the providers in the SiteAccess-aware `translations_management` namespace. ``` yaml @@ -102,14 +102,14 @@ If a value is missing or empty, the provider doesn't appear in the UI as a selec AI-based providers require that AI policies are assigned to user roles. If an editor can't see AI providers in the translation provider dropdown, check if the appropriate AI policies are granted in their role definition. -If you fail to configure the providers, the Translations management disables itself in the editor's UI. +If you fail to configure the providers, the Translations management feature disables itself in the editor's UI. The **Use automatic translation** checkbox is disabled, and a message is displayed that prompts the user to contact the administrator This state is controlled by `TranslationProviderFormFieldsConfigurator::isAutomaticTranslationDisabled()`, which returns `true` when the provider registry is empty. ### Advanced translation provider options -In addition to their required authentication setting, all providers support two optional keys: +In addition to their required authentication keys, all providers support two optional ones: - `supportedLanguageCodes` - overrides the default list of language codes this provider accepts - `languageCodesMap` - maps language codes used by [[= product_name =]], for example, `eng-GB`, to the provider-specific codes the API expects @@ -154,7 +154,7 @@ You can only select the languages that are present in a provider's [supported li The configurations are persisted by `SettingService` and stored in the `ibexa_setting` database table under group `translations_management` with identifier `language_pairs`. -You can manage language pairs in [[= product_name_base =]]'s back office or programatically. +You can manage language pairs in [[= product_name_base =]]'s back office or programmatically. ### Manage language pairs in UI @@ -167,7 +167,7 @@ Finally, from the **Translation service** list, pick a translation provider and ![Creating a language pair](translations_management_language_pairs.png "Creating a language pair") -This will add as many language pairs as you picked target languages. +This adds as many language pairs as you picked target languages. !!! note @@ -179,7 +179,7 @@ This will add as many language pairs as you picked target languages. ## Manage language pairs programmatically To manage language pairs programmatically, create a service class and inject `LanguagePairServiceInterface` into its constructor. -Symfony autowires it automatically` so no manual service configuration is needed. +Symfony autowires it automatically so no manual service configuration is needed. ``` php hl_lines="2" @@ -241,7 +241,7 @@ To assemble the view, `SideBySideEditContextBuilder` performs the following acti !!! note "Meta fields" - The builder excludes the fields that are marked marked as `meta: true` or belong to a field group is listed in `admin_ui_forms.content_edit.meta_field_groups_list`, and does not render them. + The builder excludes the fields that are marked marked as `meta: true` or belong to a field group that is listed in `admin_ui_forms.content_edit.meta_field_groups_list`, and does not render them. To resolve the column order, `SideBySideTargetLanguagePositionResolver` reads the user setting and falls back to `source_left_target_right` when the setting is not made. The Twig template applies `order-xl-*` classes for responsive column placement. @@ -305,5 +305,5 @@ The command uses the same provider configuration and field value transformers as | `--provider` | Yes | Identifier of the translation provider to use | | `--from` | Yes | Source language code | | `--to` | Yes | Target language code | -| `--user-id` | No | Repository user ID to run the translation (default: `14`) | +| `--user-id` | No | Repository user ID to run the translation (default: `14`, which is the Administrator user) | | `--draft-only` | No | Create a translated draft without publishing it | diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index 2c16e93e709..d8fe4d8ec8a 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -6,15 +6,15 @@ month_change: true # Extend translations management -By extending [Translations management](translations_management_guide.md), you can build custom translation workflows and adapt the feature set's behavior to your specific requirements. +By extending [Translations management](translations_management_guide.md), you can build custom translation workflows and adapt the package's behavior to your specific requirements. The package is designed to be extended in multiple ways. You can create custom [translation providers](configure_translations_management.md#configure-translation-providers), field type transformers, exclusion rules, and UI components. -In all cases you follow the same pattern: implement an interface or extend a base class, then register the service with a service tag. +In all cases, you follow the same pattern: implement an interface or extend a base class, then register the service with a service tag. The package discovers and registers tagged services automatically. ## Add custom translation provider -Before you build a custom translation provider, make sure that the `ibexa/connector-ai` package is installed in your system. +Before you build a custom translation provider, if your provider uses the AI Actions framework, make sure that the `ibexa/connector-ai` package is installed in your system. To connect a translation service that is not built into the package, implement [`TranslationProviderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Provider-TranslationProviderInterface.html). The `translate()` method receives a `TranslationDataInterface` object that carries the text to translate along with the source and target language codes: @@ -30,7 +30,7 @@ Both `identifier` and `validation_profile` are required attributes. [[= include_code('code_samples/translations_management/config/services.yaml', 1, 6) =]] ``` -The `validation_profile` attribute links the provider to a validator that checks language codes and payload size before each call. +The `validation_profile` attribute links the provider to a validator that checks language codes and payload size before each before each translation request. By default, three profiles are available: | Profile | Used by | @@ -46,7 +46,8 @@ To define a custom validation profile, implement [`ProviderValidatorInterface`]( [[= include_code('code_samples/translations_management/config/services.yaml', 7, 10) =]] ``` -The [`DefaultProviderValidator`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Validator-DefaultProviderValidator.html) class is available as a reusable base with configurable maximum payload size and language code regex patterns. +You can extend [`DefaultProviderValidator`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Validator-DefaultProviderValidator.html) as base class. +It exposes configurable maximum payload size and language code regex patterns. The package also provides several specialized interfaces for providers with specific requirements: @@ -81,7 +82,7 @@ It must match the value that `getFieldTypeIdentifier()` returns: [[= include_code('code_samples/translations_management/config/services.yaml', 14, 17) =]] ``` -If a field type requires metadata, for example, RichText fields with embedded objects that you must preserved after translation, implement [`MetadataAwareFieldValueTransformerInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-MetadataAwareFieldValueTransformerInterface.html) instead. +If a field type requires metadata, for example, RichText fields with embedded objects that you must preserve after translation, implement [`MetadataAwareFieldValueTransformerInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-MetadataAwareFieldValueTransformerInterface.html) instead. ## Define custom exclusion rules @@ -90,7 +91,7 @@ The Translations management package ships with one rule that excludes content ty ### Exclude with custom class -To exclude additional content types, for example, content types with fields that are known to behave poorly in the side-by-side layout, implement [`SideBySideExclusionRuleInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Service-SideBySideExclusionRuleInterface.html). +To exclude additional content types, for example, content types whose fields render incorrectly in the side-by-side layout, implement [`SideBySideExclusionRuleInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Service-SideBySideExclusionRuleInterface.html). The `isExcluded()` method receives a [`ContentInfo`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-ContentInfo.html) object and returns `true` if the content item should be excluded. Classes that implement this interface are automatically tagged with `autoconfigure`: @@ -110,7 +111,7 @@ If `autoconfigure` is not available, register the tag explicitly: `MyCustomExclusionRule` targets one specific content type by name. To exclude any content type that contain specific field types without the need to write a custom class, register an additional instance of the built-in [`UnsupportedFieldTypeExclusionRule`](https://github.com/ibexa/translations-management/blob/main/src/lib/SideBySide/Service/UnsupportedFieldTypeExclusionRule.php). Because this registers a second instance of the service with different arguments, you can't use the class name as the service ID. -Use an arbitrary string ID instead to avoid overwriting the package's own registration: +Use an arbitrary string ID instead to avoid a service definition conflict: ``` yaml [[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] @@ -167,7 +168,7 @@ Register it as a service: [[= include_code('code_samples/translations_management/config/services.yaml', 11, 13) =]] ``` -The extra field is then available in the submitted form data, which the standard `admin-ui` controller passes through the translation flow. +The extra field is then available in the submitted form data, which the standard `admin-ui` controller includes in the translation request data. Use this approach when you need to read extra input from the editor, not to redirect or replace the response. ## Intercept translation flow @@ -184,7 +185,7 @@ Subscribe at a higher priority to act before the package does: Both highlighted calls are required: -- `setResponse()` alone does not prevent the translations management listener at priority 100 from running and overwriting the response. +- `setResponse()` alone does not prevent the Translations management listener at priority 100 from running and overwriting the response. - `stopPropagation()` stops all lower-priority listeners from executing. When a response is set on the event, `admin-ui` uses it and doesn't proceed with the standard translation editor. @@ -201,6 +202,6 @@ The following service tags expose additional extension points that you can use t | Tag | Purpose | Required attributes | |---|---|---| -| `ibexa.translations_management.auto_translate.provider.language_normalizer` | Register a language code normalizer for a provider | — | +| `ibexa.translations_management.auto_translate.provider.language_normalizer` | Register a language code normalizer for a provider | none | | `ibexa.translations_management.auto_translate.provider.ai.translation_strategy` | Register a custom AI translation strategy (prompt structure) | `priority` | | `ibexa.translations_management.auto_translate.metadata_validation.retry_policy` | Register a metadata validation retry policy | `priority` | diff --git a/docs/multisite/translations_management/translations_management_guide.md b/docs/multisite/translations_management/translations_management_guide.md index 3466bdafc21..cebb95ddf13 100644 --- a/docs/multisite/translations_management/translations_management_guide.md +++ b/docs/multisite/translations_management/translations_management_guide.md @@ -8,14 +8,14 @@ month_change: true ## What is Translations management -Content managers, translators and proofreaders who work with multilingual content in [[= product_name =]] often face a common set of challenges: +Content managers, translators, and proofreaders who work with multilingual content in [[= product_name =]] often face a common set of challenges: - context is lost when the source text isn't visible alongside the translation -- translation of long and complex content items is time consuming +- translating long and complex content items is time-consuming - quality assurance is slow and error-prone without a direct comparison view - switching between tools or tabs to cross-reference languages disrupts focus and slows down publishing -Translations management package addresses these pain points through a side-by-side view, machine translation and ability to invite reviewers to collaborate on content item or product translation. +The Translations management package addresses these pain points through a side-by-side view, machine translation and the ability to invite reviewers to collaborate on the translation of a content items or products. The package integrates with the [AI Actions framework](ai_actions.md) to support machine translation providers such as Google Translate and DeepL, and AI powered translation services like OpenAI, Anthropic, and Google Gemini. @@ -35,10 +35,10 @@ Translations management is an [LTS Update](editions.md#lts-updates) available in Before the translation flow can happen, an administrator sets up the translation providers and assigns language pairs to them. Then, when an editor opens a content item and requests a new machine translation, the plugin resolves which provider to use. -It falls back from a language-pair rule to the user's manual selection if necessary. +If no language-pair rule matches, it falls back to the user's manual selection. The plugin then extracts the translatable fields from the source language version of a content item and sends them to the configured provider's API. -The system writes the translated strings into a target-language draft of the content item, which opens in a side-by-side view for the editor to review and refine. -The editor can save the result as draft, share it with a reviewer or publish it. +The system writes the translated strings into a target-language draft of the content item, and opens it in a side-by-side view for the editor to review and refine. +The editor can save the result as a draft, share it with a reviewer or publish it. ![Translations management flow](translations_management_flow.png "Translations management flow") @@ -46,17 +46,17 @@ The editor can save the result as draft, share it with a reviewer or publish it. ### Translation provider management -Administrators can manage translation providers and configure [language pair defaults](configure_translations_management.md#define-language-pairs). -This way they can define which provider handles which language combination. -Editors see the configured default pre-selected when creating a new translation, but can override the selection if needed. +Administrators can manage translation providers and configure translation provider/language combination assignments ([language pairs](configure_translations_management.md#define-language-pairs)). +This allows administrators to define which provider handles which language combination. +Editors see the configured provider pre-selected when creating a new translation, but can override it if needed. ![Creating a language pair](translations_management_language_pairs.png "Creating a language pair") -The package provides integrations with several translation providers, including Google Translate through its REST API and OpenAI through [AI Actions](ai_actions.md). +The package provides integrations with several translation providers, including REST API-based services such as Google Translate and DeepL, and AI-powered services through the [AI Actions](ai_actions.md). ### Side-by-side translation view -Translations management introduces a [side-by-side translation view]([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view) that displays the source language read-only next to an editable target language form. +Translations management introduces a [side-by-side translation view]([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view) that displays the read-only source language content next to an editable target language form. In this view, editors can provide and review translations in context, without having to leave the content editing interface. ![Side-by-side translation view](managing_translations_sxs_view.png "Side-by-side translation view") @@ -66,7 +66,7 @@ Editors can: - access the side-by-side view when creating a new translation, reviewing an existing one, or editing a draft - compare source and target content field by field while editing - copy all content from the source column to the target column with a single action -- provide localized versions of media assets +- provide localized versions of media assets and their alternative text - use the distraction-free mode for focused editing of individual fields, with AI actions available inline - choose whether the source column appears on the left or right in user settings @@ -76,10 +76,10 @@ Editors can: Products are editable in the side-by-side view, but product attributes are not translatable. -### Command line translation +### Command-line translation The Translations management package exposes a [console command](configure_translations_management.md#translate-content-items-with-cli) for translating content items from the command line. -You can use it for batch processing or CI (Continuous Integration) workflows. +You can use it for batch processing or automated workflows. ### Extensibility From 5739e698474cb57053d9f79db675d9a1648474c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Thu, 25 Jun 2026 16:34:09 +0200 Subject: [PATCH 11/20] Remove duplicate blanks --- .../configure_translations_management.md | 7 +++---- .../extend_translations_management.md | 1 - 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md index 59bcd89dafc..7d2f2a608b1 100644 --- a/docs/multisite/translations_management/configure_translations_management.md +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -32,7 +32,7 @@ This copies the migration files into the project's migrations directory and adds ## Configure translation providers Translation providers are the services that perform the actual text translation. -There are two types of translation providers: +The Translations management package comes with two types of translation providers: - REST API-based providers call a translation service such as Google Translate or DeepL directly by using an API key. - AI-based providers send translation requests through the [AI Actions](configure_ai_actions.md) framework, relying on the same model selection and policy controls as other AI features in [[= product_name =]]. @@ -55,7 +55,7 @@ Out of the box, Translations management can support the following translation pr - For the AI-based translation providers, [install and configure](configure_ai_actions.md) the `ibexa/connector-ai` package and their corresponding connectors. -#### Built-in AI providers +**Built-in AI providers** When you install the Translations management package, the installation process automatically creates AI [Action Configurations](extend_ai_actions.md#action-configurations) for OpenAI (`auto_translate_openai`), Google Gemini (`auto_translate_gemini`), and Anthropic Claude (`auto_translate_anthropic`). @@ -181,7 +181,6 @@ This adds as many language pairs as you picked target languages. To manage language pairs programmatically, create a service class and inject `LanguagePairServiceInterface` into its constructor. Symfony autowires it automatically so no manual service configuration is needed. - ``` php hl_lines="2" [[= include_code('code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php', 14, 35) =]] ``` @@ -281,7 +280,7 @@ The warning is shown or hidden dynamically by `side-by-side-translation-modal-wa ## Translate content items with CLI -For the purposes of batch processing, automations and other scripted actions, the Translations management package exposes a command that translates content items by using any of the configured providers: +For the purposes of batch processing, automation and other scripted actions, the Translations management package exposes a command that translates content items by using any of the configured providers: ``` bash php bin/console ibexa:translations:auto-translate-content \ diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index d8fe4d8ec8a..2f9176c2502 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -68,7 +68,6 @@ To add support for a custom or non-standard field type, implement [`FieldValueTr - `encode(Field $field): EncodedFieldValue` - extracts the translatable string from the field and wraps it in an [`EncodedFieldValue`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-EncodedFieldValue.html). The constructor takes the extracted string as its first argument and an optional metadata array as its second. - `decode(string $value, mixed $previousFieldValue, array $metadata): Value` - receives the translated string, the previous field value, and any metadata, and returns the updated field value - ``` php hl_lines="19 24" [[= include_code('code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php') =]] ``` From 45be4c67bb59514c61875cfb6987e8d96b7ba517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Thu, 25 Jun 2026 17:42:41 +0200 Subject: [PATCH 12/20] Add a release notes entry --- .../configure_translations_management.md | 2 +- docs/release_notes/ibexa_dxp_v5.0.md | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md index 7d2f2a608b1..32c7939e3a3 100644 --- a/docs/multisite/translations_management/configure_translations_management.md +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -4,7 +4,7 @@ edition: lts-update month_change: true --- -# Translations management +# Configure translations management `ibexa/translations-management` extends [[= product_name =]]'s built-in language management tools that editors use for content translation. It introduces a plugin that handles the translation provider system by connecting to REST APIs and AI services, a [side-by-side editing interface](#side-by-side-translation-view) where editors can compare source and target languages and provide translations in a single view, and multiple extension points that you can use to [customize different areas of the translation workflow](extend_translations_management.md). diff --git a/docs/release_notes/ibexa_dxp_v5.0.md b/docs/release_notes/ibexa_dxp_v5.0.md index 02469e686b4..8a976a17545 100644 --- a/docs/release_notes/ibexa_dxp_v5.0.md +++ b/docs/release_notes/ibexa_dxp_v5.0.md @@ -10,6 +10,53 @@ month_change: true

+[[% set version = 'v5.0.10' %]] +[[% set date = '2026-07-30' %]] + +[[= release_note_entry_begin( + 'Translations management ' + version, + date, + ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release'] +) =]] + +Translations management is a new LTS Update that extends [[= product_name =]]'s built-in language management tools with machine translation, a side-by-side editing view, and a command-line translation utility. + +### Machine translation providers + +Translation providers are the services that perform the actual text translation. +Translations management uses two provider types to connect to the translation services: + +- REST API-based providers: Google Translate and DeepL, configured with API keys +- AI-based providers: OpenAI, Anthropic Claude, and Google Gemini, routed through AI Actions + +For more information, see [Configure translation providers](configure_translations_management.md#configure-translation-providers). + +### Side-by-side translation view + +A [side-by-side translation view]([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view) displays the source and target text of the content item or product on one screen. +Editors can translate or compare source and target content, copy all content from the source column to the target column in a single action, and use the distraction-free mode for focused editing of individual fields. + +For more information, see [User Documentation]([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view). + +### CLI translation command + +A new console command translates content items from the command line, enabling batch processing and automated workflows. + +For more information, see [Translate content items with CLI](configure_translations_management.md#translate-content-items-with-cli). + +### Developer experience + +The package exposes multiple extension points for custom translation workflows, including: + +- Custom translation providers through `TranslationProviderInterface` +- Custom field type support through `FieldValueTransformerInterface` +- Custom content type exclusion rules through `SideBySideExclusionRuleInterface` +- extension points for adding UI elements and fields to the views used by the feature + +For more information, see [Extend translations management](https://doc.ibexa.co/en/5.0/translations/extend_translations_management/). + +[[= release_note_entry_end() =]] + [[% set version = 'v5.0.8' %]] [[% set date = '2026-05-21' %]] From 866d19c8641a399d8b8869db4fbe271885c89e18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Fri, 26 Jun 2026 07:58:59 +0200 Subject: [PATCH 13/20] Fix code issues --- .../src/TranslationsManagement/ImageAltTextTransformer.php | 2 +- .../src/TranslationsManagement/TranslationPairManager.php | 6 +++--- .../extend_translations_management.md | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php b/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php index fd7906b7225..6f6f05ca8d7 100644 --- a/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php +++ b/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php @@ -7,7 +7,7 @@ use Ibexa\Contracts\Core\Repository\Values\Content\Field; use Ibexa\Contracts\TranslationsManagement\AutoTranslate\Transformer\Field\EncodedFieldValue; use Ibexa\Contracts\TranslationsManagement\AutoTranslate\Transformer\Field\FieldValueTransformerInterface; -use Ibexa\Core\FieldType\Value; +use Ibexa\Contracts\Core\FieldType\Value; final class ImageAltTextTransformer implements FieldValueTransformerInterface { diff --git a/code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php b/code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php index 1d15730c157..e0324871ffc 100644 --- a/code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php +++ b/code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php @@ -9,11 +9,11 @@ use Ibexa\TranslationsManagement\AutoTranslate\LanguagePair\LanguagePairInterface; use Ibexa\TranslationsManagement\AutoTranslate\LanguagePair\LanguagePairServiceInterface; -final class TranslationPairManager +final readonly class TranslationPairManager { public function __construct( - private readonly LanguagePairServiceInterface $languagePairService, - private readonly LanguageService $languageService, + private LanguagePairServiceInterface $languagePairService, + private LanguageService $languageService, ) { } diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index 2f9176c2502..cd0f02e2459 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -170,6 +170,12 @@ Register it as a service: The extra field is then available in the submitted form data, which the standard `admin-ui` controller includes in the translation request data. Use this approach when you need to read extra input from the editor, not to redirect or replace the response. +!!! caution "Internal `TranslationAddType`" + + `TranslationAddType` is marked `@internal` in `ibexa/admin-ui`. + While it functions as an extension point in practice, its name and signature may change. + It may even be removed entirely without a deprecation notice. + ## Intercept translation flow The `BeforeTranslateEvent` and `TranslateEvent` [events](translations_management_events.md#translation-events) operate at the field-value level and cannot redirect the HTTP flow. From 00ebddc96d15e487409eb8b9e76d23beab54fe7f Mon Sep 17 00:00:00 2001 From: dabrt Date: Fri, 26 Jun 2026 06:05:58 +0000 Subject: [PATCH 14/20] PHP & JS CS Fixes --- .../src/TranslationsManagement/ImageAltTextTransformer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php b/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php index 6f6f05ca8d7..380932de0dd 100644 --- a/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php +++ b/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php @@ -4,10 +4,10 @@ namespace App\TranslationsManagement; +use Ibexa\Contracts\Core\FieldType\Value; use Ibexa\Contracts\Core\Repository\Values\Content\Field; use Ibexa\Contracts\TranslationsManagement\AutoTranslate\Transformer\Field\EncodedFieldValue; use Ibexa\Contracts\TranslationsManagement\AutoTranslate\Transformer\Field\FieldValueTransformerInterface; -use Ibexa\Contracts\Core\FieldType\Value; final class ImageAltTextTransformer implements FieldValueTransformerInterface { From 45ce1251fa3a0b843f59eebe99b9b741d529ee7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Fri, 26 Jun 2026 08:13:54 +0200 Subject: [PATCH 15/20] Add TranslationAddType to deptrack baseline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: dabrt Co-Authored-By: Marek Nocoń --- deptrac.baseline.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deptrac.baseline.yaml b/deptrac.baseline.yaml index b465d1d963a..664593c7d1a 100644 --- a/deptrac.baseline.yaml +++ b/deptrac.baseline.yaml @@ -245,6 +245,8 @@ deptrac: App\Tab\Dashboard\Everyone\EveryoneArticleTab: - Ibexa\AdminUi\Tab\Dashboard\PagerLocationToDataMapper - Ibexa\Core\Pagination\Pagerfanta\LocationSearchAdapter + App\TranslationsManagement\MyTranslationAddExtension: + - Ibexa\AdminUi\Form\Type\Content\Translation\TranslationAddType App\View\Matcher\Owner: - Ibexa\Core\MVC\Symfony\Matcher\ContentBased\MatcherInterface - Ibexa\Core\MVC\Symfony\View\ContentValueView From f51b281f238d8b8fd58d2f913ca78903b7783d3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Mon, 10 Aug 2026 11:38:38 +0200 Subject: [PATCH 16/20] Apply suggestions from code review Co-authored-by: Tomasz Kryszan --- code_samples/translations_management/config/services.yaml | 2 +- docs/api/event_reference/translations_management_events.md | 2 +- .../configure_translations_management.md | 2 +- .../translations_management/extend_translations_management.md | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code_samples/translations_management/config/services.yaml b/code_samples/translations_management/config/services.yaml index b198c91ba69..5af3399a83e 100644 --- a/code_samples/translations_management/config/services.yaml +++ b/code_samples/translations_management/config/services.yaml @@ -3,7 +3,7 @@ services: tags: - name: 'ibexa.translations_management.auto_translate.provider' identifier: 'my_custom_provider' - validation_profile: 'ai_generic' + validation_profile: 'my_custom_profile' App\TranslationsManagement\MyProviderValidator: tags: - name: 'ibexa.translations_management.auto_translate.provider.validator' diff --git a/docs/api/event_reference/translations_management_events.md b/docs/api/event_reference/translations_management_events.md index ca9e482b940..efc851788d7 100644 --- a/docs/api/event_reference/translations_management_events.md +++ b/docs/api/event_reference/translations_management_events.md @@ -16,7 +16,7 @@ Both events are read-only, you can't use them to override the translation result | Event | Dispatched by | Dispatched when | Properties | |---|---|---|----| -| [`BeforeTranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-BeforeTranslateEvent.html) | `TranslationService` | Before a translation request is sent to the provider | `TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | +| [`BeforeTranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-BeforeTranslateEvent.html) | `EventDispatchingProviderTranslator` | Before a translation request is sent to the provider | `TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | | [`TranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-TranslateEvent.html) | `TranslationService` | After a translation response is received | `string $result`
`TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | ## Side-by-side creation events diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md index 32c7939e3a3..a9b235a7d18 100644 --- a/docs/multisite/translations_management/configure_translations_management.md +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -276,7 +276,7 @@ It's a single server-side operation handled by `SideBySideFieldCopyService::copy - Draft conflict warning When an user opens the translation modal and selects a target language which already has a draft translation, a warning appears in the modal. -The warning is shown or hidden dynamically by `side-by-side-translation-modal-warning.js` when the user changes the target language selection. +The warning is shown or hidden dynamically by `add.translation.modal.warning.js` when the user changes the target language selection. ## Translate content items with CLI diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index cd0f02e2459..b0a8c2672e1 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -92,13 +92,13 @@ The Translations management package ships with one rule that excludes content ty To exclude additional content types, for example, content types whose fields render incorrectly in the side-by-side layout, implement [`SideBySideExclusionRuleInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Service-SideBySideExclusionRuleInterface.html). The `isExcluded()` method receives a [`ContentInfo`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-ContentInfo.html) object and returns `true` if the content item should be excluded. -Classes that implement this interface are automatically tagged with `autoconfigure`: +Register the rule with the `ibexa.translations_management.side_by_side.exclusion_rule` tag. +This interface is not registered for Symfony autoconfiguration, so the tag is required. ``` php [[= include_code('code_samples/translations_management/src/TranslationsManagement/MyCustomExclusionRule.php') =]] ``` -If `autoconfigure` is not available, register the tag explicitly: ``` yaml [[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] From 53570f831e405390030bf94c52cdc928c54c3bfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Mon, 10 Aug 2026 16:56:42 +0200 Subject: [PATCH 17/20] Add translation review description. --- .../configure_translations_management.md | 83 ++++++++++++++----- .../extend_translations_management.md | 2 +- .../translations_management_guide.md | 12 +++ docs/release_notes/ibexa_dxp_v5.0.md | 12 +++ 4 files changed, 86 insertions(+), 23 deletions(-) diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md index a9b235a7d18..4da2447c7d8 100644 --- a/docs/multisite/translations_management/configure_translations_management.md +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -176,26 +176,6 @@ This adds as many language pairs as you picked target languages. If a language pair already exists and is associated with a translation provider, you can't create another language pair with a different provider. Edit the existing language pair instead. -## Manage language pairs programmatically - -To manage language pairs programmatically, create a service class and inject `LanguagePairServiceInterface` into its constructor. -Symfony autowires it automatically so no manual service configuration is needed. - -``` php hl_lines="2" -[[= include_code('code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php', 14, 35) =]] -``` - -The service exposes the following methods: - -| Method | Description | -|---|---| -| `createLanguagePair()` | Create a new language pair. Pass `true` as the fourth argument to overwrite an existing pair with the same source and target. | -| `updateLanguagePair()` | Update an existing language pair by ID. | -| `syncLanguagePairsForSourceAndProvider()` | Synchronize all target languages for a given source language and provider. | -| `loadLanguagePairs()` | Load all configured language pairs. | -| `deleteLanguagePairById()` | Delete a language pair by ID. | -| `deleteLanguagePairsForProvider()` | Delete all language pairs associated with a given provider. | - ## User settings The Translations management package adds preferences that editors can configure under their [user settings](getting_started/get_started/#browsing). @@ -220,8 +200,9 @@ The accepted values are `source_left_target_right` (default) and `source_right_t The [side-by-side translation view]([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view) is a two-column content editing interface where the source column is read-only and the target column is an editable form. -Content types that contain the `ibexa_landing_page` or `ibexa_form` fields are not supported, and editors can open them in the standard single-language editor only. -You can exclude support for additional content types if needed. +Content types that contain the `ibexa_landing_page` or `ibexa_form` fields can't be opened in the side-by-side translation view. +However, they can still be automatically translated through the standard translation flow and the CLI command, and editors can open them in the standard single-language editor. +You can exclude the support for additional content types if needed. To do it, [define custom exclusion rules](extend_translations_management.md#define-custom-exclusion-rules). ### Architecture @@ -306,3 +287,61 @@ The command uses the same provider configuration and field value transformers as | `--to` | Yes | Target language code | | `--user-id` | No | Repository user ID to run the translation (default: `14`, which is the Administrator user) | | `--draft-only` | No | Create a translated draft without publishing it | + +## Translation review + +When a draft translation of a content item or product is created by going through the automatic translation process, the system creates a review status record and marks the draft `for_review`. +This way editors and reviewers can check whether automatically translated drafts have been checked before publishing. + +Automatically translated drafts can have one of the following two states: +- `for_review` - The draft was machine-translated and is awaiting review. +- `translated` - The translation has been accepted by a reviewer. + +The `ibexa_auto_translation_review` [workflow](workflow.md) has two transitions: + +| Transition | From | To | +|---|---|---| +| `approved` | `for_review` | `translated` | +| `rejected` | `for_review` | `for_review` (stays, event logged) | + +When the editor rejects the translation, the status doesn't change, but the system records that the draft translation requires corrections. +A draft translation in `translated` state can't be rejected. + +!!! note + + This workflow is separate from the [editorial workflow](workflow_management/editorial_workflow.md). + Accepting or rejecting draft translations does not trigger editorial workflow transitions or notifications. + + +### Database tables + +The review feature uses two tables to the database: + +- `ibexa_auto_translation` — One row for each draft translation created automatically. Stores the current review status. + +| Field | Type | Description | +|---|---|---| +| `id` | integer | ID of the translation draft | +| `provider_identifier` | string | Identifier of the translation provider used | +| `content_id` | integer | ID of the translated content item | +| `version_no` | integer | Version number of the draft | +| `source_language_id` | bigint | ID of the source language | +| `target_language_id` | bigint | ID of the target language | +| `review_status` | string | Current status. Possible values: `for_review` or `translated` | +| `created_at` | datetime | When the draft translation was created | +| `updated_at` | datetime | When the status was last changed | + +A constraint prevents the creation of duplicate review records for the same draft translation. + +- `ibexa_auto_translation_review_log` — An audit log, wit one for each status operation. + +| Field | Type | Description | +|---|---|---| +| `id` | integer | ID of the operation | +| `auto_translation_id` | integer (nullable) | An `id` of the translation draft from the `ibexa_auto_translation` table, `SET NULL` on delete | +| `user_id` | integer | ID of the user who performed the operation | +| `status` | string | Status at the time of the operation | +| `operation` | string | `created`, `approved`, or `rejected` | +| `created_at` | datetime | When the operation was performed | + +When an automatically translated draft is deleted, its `ibexa_auto_translation` row is removed, the review log rows remain, but their `auto_translation_id` is set to `null`. diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index b0a8c2672e1..32f7d6649d8 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -9,7 +9,7 @@ month_change: true By extending [Translations management](translations_management_guide.md), you can build custom translation workflows and adapt the package's behavior to your specific requirements. The package is designed to be extended in multiple ways. You can create custom [translation providers](configure_translations_management.md#configure-translation-providers), field type transformers, exclusion rules, and UI components. -In all cases, you follow the same pattern: implement an interface or extend a base class, then register the service with a service tag. +In all cases, you follow the same pattern: implement an interface first, then register the service with a service tag. The package discovers and registers tagged services automatically. ## Add custom translation provider diff --git a/docs/multisite/translations_management/translations_management_guide.md b/docs/multisite/translations_management/translations_management_guide.md index cebb95ddf13..142848944e2 100644 --- a/docs/multisite/translations_management/translations_management_guide.md +++ b/docs/multisite/translations_management/translations_management_guide.md @@ -81,6 +81,18 @@ Editors can: The Translations management package exposes a [console command](configure_translations_management.md#translate-content-items-with-cli) for translating content items from the command line. You can use it for batch processing or automated workflows. +### Translation review + +When a draft is created by going through the automatic translation process, it is marked as "For review". +Editors can [accept or reject the translation]([[= user_doc =]]/content_management/translate_content/#review-automatic-translation) directly in the side-by-side view. +Accepted drafts are marked as "Translated". + +The review history is [stored in the database](configure_translations_management.md#database-tables) for audit purposes. + +!!! note "No review for manual translations" + + Draft translations that were created manually don't have a review status. + ### Extensibility Developers can [extend the translations management](extend_translations_management.md) package: diff --git a/docs/release_notes/ibexa_dxp_v5.0.md b/docs/release_notes/ibexa_dxp_v5.0.md index 8a976a17545..34809335cf6 100644 --- a/docs/release_notes/ibexa_dxp_v5.0.md +++ b/docs/release_notes/ibexa_dxp_v5.0.md @@ -44,6 +44,18 @@ A new console command translates content items from the command line, enabling b For more information, see [Translate content items with CLI](configure_translations_management.md#translate-content-items-with-cli). +### Translation review + +When a draft is created through automatic translation, it receives the "For review" status. +Editors can accept or reject the translation in the side-by-side view, which displays a review bar. +Accepted translations are given the "Translated". + +The **Versions** tab shows a **Translation status** column with review status badges for draft translations created with automatic translation. + +For more information, see [Translation review](configure_translations_management.md#translation-review). + + + ### Developer experience The package exposes multiple extension points for custom translation workflows, including: From bedfd31d3d3900c537d553844d5980ba3e37505b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Tue, 11 Aug 2026 15:47:06 +0200 Subject: [PATCH 18/20] Implement reviewer comments --- .../config/services.yaml | 5 ++ .../ImageAltTextTransformer.php | 35 ++++++++-- .../MyCustomAiProvider.php | 64 ++++++++++++++++++ .../MyCustomProvider.php | 2 +- .../TranslationPairManager.php | 36 ---------- .../configure_translations_management.md | 67 ++++++------------- .../extend_translations_management.md | 37 +++++++++- .../translations_management_guide.md | 2 - docs/release_notes/ibexa_dxp_v5.0.md | 4 +- 9 files changed, 157 insertions(+), 95 deletions(-) create mode 100644 code_samples/translations_management/src/TranslationsManagement/MyCustomAiProvider.php delete mode 100644 code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php diff --git a/code_samples/translations_management/config/services.yaml b/code_samples/translations_management/config/services.yaml index 5af3399a83e..6925c8f441b 100644 --- a/code_samples/translations_management/config/services.yaml +++ b/code_samples/translations_management/config/services.yaml @@ -29,3 +29,8 @@ services: - name: ibexa.twig.component group: 'admin-ui-content-translation-modal-footer' priority: 10 + App\TranslationsManagement\MyCustomAiProvider: + tags: + - name: 'ibexa.translations_management.auto_translate.provider' + identifier: 'my_custom_ai_provider' + validation_profile: 'ai_generic' diff --git a/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php b/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php index 380932de0dd..d11ec9b1305 100644 --- a/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php +++ b/code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php @@ -4,10 +4,12 @@ namespace App\TranslationsManagement; -use Ibexa\Contracts\Core\FieldType\Value; use Ibexa\Contracts\Core\Repository\Values\Content\Field; use Ibexa\Contracts\TranslationsManagement\AutoTranslate\Transformer\Field\EncodedFieldValue; use Ibexa\Contracts\TranslationsManagement\AutoTranslate\Transformer\Field\FieldValueTransformerInterface; +use Ibexa\Core\Base\Exceptions\InvalidArgumentException; +use Ibexa\Core\FieldType\Image\Value as ImageValue; +use Ibexa\Core\FieldType\Value; final class ImageAltTextTransformer implements FieldValueTransformerInterface { @@ -18,7 +20,15 @@ public function getFieldTypeIdentifier(): string public function encode(Field $field): EncodedFieldValue { - return new EncodedFieldValue($field->getValue()->alternativeText ?? ''); + $value = $field->getValue(); + if (!$value instanceof ImageValue) { + throw new InvalidArgumentException( + '$field', + sprintf('Expected %s, got %s.', ImageValue::class, get_debug_type($value)) + ); + } + + return new EncodedFieldValue($value->alternativeText ?? ''); } /** @@ -26,8 +36,25 @@ public function encode(Field $field): EncodedFieldValue */ public function decode(string $value, mixed $previousFieldValue, array $metadata): Value { - $previousFieldValue->alternativeText = $value; + if (!$previousFieldValue instanceof ImageValue) { + throw new InvalidArgumentException( + '$previousFieldValue', + sprintf('Expected %s, got %s.', ImageValue::class, get_debug_type($previousFieldValue)) + ); + } - return $previousFieldValue; + return new ImageValue([ + 'id' => $previousFieldValue->id, + 'fileName' => $previousFieldValue->fileName, + 'fileSize' => $previousFieldValue->fileSize, + 'uri' => $previousFieldValue->uri, + 'imageId' => $previousFieldValue->imageId, + 'inputUri' => $previousFieldValue->inputUri, + 'width' => $previousFieldValue->width, + 'height' => $previousFieldValue->height, + 'alternativeText' => $value, + 'additionalData' => $previousFieldValue->additionalData, + 'mime' => $previousFieldValue->mime, + ]); } } diff --git a/code_samples/translations_management/src/TranslationsManagement/MyCustomAiProvider.php b/code_samples/translations_management/src/TranslationsManagement/MyCustomAiProvider.php new file mode 100644 index 00000000000..6321bd505db --- /dev/null +++ b/code_samples/translations_management/src/TranslationsManagement/MyCustomAiProvider.php @@ -0,0 +1,64 @@ +apiClient->translate( + $translationData->getText(), + $translationData->getSourceLanguage(), + $translationData->getTargetLanguage() + ); + } + + /** @return array */ + public function getSupportedLanguageCodes(): array + { + return ['eng-GB', 'ger-DE', 'fre-FR']; + } + + /** @return array */ + public function getConfiguration(): array + { + return [ + 'actionConfigurationIdentifier' => $this->actionConfigurationIdentifier, + ]; + } + + public function isConfigured(): bool + { + return $this->actionConfigurationIdentifier !== ''; + } +} diff --git a/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php b/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php index 947d6f3e04f..e726d3435fd 100644 --- a/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php +++ b/code_samples/translations_management/src/TranslationsManagement/MyCustomProvider.php @@ -45,6 +45,6 @@ public function translate(TranslationDataInterface $translationData): string /** @return array */ public function getSupportedLanguageCodes(): array { - return ['en_GB', 'de_DE', 'fr_FR']; + return ['eng-GB', 'ger-DE', 'fre-FR']; } } diff --git a/code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php b/code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php deleted file mode 100644 index e0324871ffc..00000000000 --- a/code_samples/translations_management/src/TranslationsManagement/TranslationPairManager.php +++ /dev/null @@ -1,36 +0,0 @@ -languageService->loadLanguage($sourceLanguageCode); - $targetLanguage = $this->languageService->loadLanguage($targetLanguageCode); - - return $this->languagePairService->createLanguagePair( - $sourceLanguage, - $targetLanguage, - $provider, - $replaceExisting, - ); - } -} diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md index 4da2447c7d8..29f99bb7929 100644 --- a/docs/multisite/translations_management/configure_translations_management.md +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -7,10 +7,22 @@ month_change: true # Configure translations management `ibexa/translations-management` extends [[= product_name =]]'s built-in language management tools that editors use for content translation. -It introduces a plugin that handles the translation provider system by connecting to REST APIs and AI services, a [side-by-side editing interface](#side-by-side-translation-view) where editors can compare source and target languages and provide translations in a single view, and multiple extension points that you can use to [customize different areas of the translation workflow](extend_translations_management.md). +It introduces a plugin that handles the translation provider system by connecting to REST APIs and AI services, a [side-by-side editing interface](#side-by-side-translation-view) where editors can compare source and target languages and provide content item and product translations in a single view, and multiple extension points that you can use to [customize different areas of the translation workflow](extend_translations_management.md). The package is standalone and does not require the `ibexa/automated-translation` add-on package to run. +!!! note "Automatic translation limitations" + + Content types that contain the `ibexa_form` field are excluded from automatic translation. + The ones with the `ibexa_landing_page` field can still be automatically translated through the standard translation flow and the CLI command, and the following elements are translated: + + - The page's title and description + - Names of page blocks + - Plain text on page blocks + - Richtext fields on page blocks + + Also, [product attributes](products.md#product-attributes) are not translatable. + ## Install package The Translations management LTS Update is optional. @@ -27,7 +39,7 @@ php bin/console ibexa:migrations:import --from-bundle=IbexaTranslationsManagemen php bin/console ibexa:migrations:migrate ``` -This copies the migration files into the project's migrations directory and adds the default action configurations in the database. +This copies the migration files into the project's migrations directory, creates the database tables required for the review workflow, and adds the default action configurations in the database. ## Configure translation providers @@ -105,8 +117,6 @@ If a value is missing or empty, the provider doesn't appear in the UI as a selec If you fail to configure the providers, the Translations management feature disables itself in the editor's UI. The **Use automatic translation** checkbox is disabled, and a message is displayed that prompts the user to contact the administrator -This state is controlled by `TranslationProviderFormFieldsConfigurator::isAutomaticTranslationDisabled()`, which returns `true` when the provider registry is empty. - ### Advanced translation provider options In addition to their required authentication keys, all providers support two optional ones: @@ -152,9 +162,7 @@ The editor can override the pre-selection. The list of languages available when creating a language pair is determined by what each provider supports. You can only select the languages that are present in a provider's [supported list](#advanced-translation-provider-options) for that provider's pairs. -The configurations are persisted by `SettingService` and stored in the `ibexa_setting` database table under group `translations_management` with identifier `language_pairs`. - -You can manage language pairs in [[= product_name_base =]]'s back office or programmatically. +You can manage language pairs in [[= product_name_base =]]'s back office. ### Manage language pairs in UI @@ -178,7 +186,7 @@ This adds as many language pairs as you picked target languages. ## User settings -The Translations management package adds preferences that editors can configure under their [user settings](getting_started/get_started/#browsing). +The Translations management package adds preferences that editors can configure under their [user settings]([[= user_doc =]]/getting_started/get_started/#user-settings). Each editor can configure them independently, and they do not affect other users. For example, editors can choose whether the target language column appears on the left or right in the side-by-side view. @@ -201,7 +209,8 @@ The accepted values are `source_left_target_right` (default) and `source_right_t The [side-by-side translation view]([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view) is a two-column content editing interface where the source column is read-only and the target column is an editable form. Content types that contain the `ibexa_landing_page` or `ibexa_form` fields can't be opened in the side-by-side translation view. -However, they can still be automatically translated through the standard translation flow and the CLI command, and editors can open them in the standard single-language editor. +Editors can open them in the standard single-language editor. + You can exclude the support for additional content types if needed. To do it, [define custom exclusion rules](extend_translations_management.md#define-custom-exclusion-rules). @@ -297,51 +306,17 @@ Automatically translated drafts can have one of the following two states: - `for_review` - The draft was machine-translated and is awaiting review. - `translated` - The translation has been accepted by a reviewer. -The `ibexa_auto_translation_review` [workflow](workflow.md) has two transitions: +The `ibexa_auto_translation_review` workflow has two transitions: | Transition | From | To | |---|---|---| | `approved` | `for_review` | `translated` | -| `rejected` | `for_review` | `for_review` (stays, event logged) | +| `rejected` | `for_review` | `for_review` | When the editor rejects the translation, the status doesn't change, but the system records that the draft translation requires corrections. A draft translation in `translated` state can't be rejected. !!! note - This workflow is separate from the [editorial workflow](workflow_management/editorial_workflow.md). + This workflow is separate from the [editorial workflow](workflow.md). Accepting or rejecting draft translations does not trigger editorial workflow transitions or notifications. - - -### Database tables - -The review feature uses two tables to the database: - -- `ibexa_auto_translation` — One row for each draft translation created automatically. Stores the current review status. - -| Field | Type | Description | -|---|---|---| -| `id` | integer | ID of the translation draft | -| `provider_identifier` | string | Identifier of the translation provider used | -| `content_id` | integer | ID of the translated content item | -| `version_no` | integer | Version number of the draft | -| `source_language_id` | bigint | ID of the source language | -| `target_language_id` | bigint | ID of the target language | -| `review_status` | string | Current status. Possible values: `for_review` or `translated` | -| `created_at` | datetime | When the draft translation was created | -| `updated_at` | datetime | When the status was last changed | - -A constraint prevents the creation of duplicate review records for the same draft translation. - -- `ibexa_auto_translation_review_log` — An audit log, wit one for each status operation. - -| Field | Type | Description | -|---|---|---| -| `id` | integer | ID of the operation | -| `auto_translation_id` | integer (nullable) | An `id` of the translation draft from the `ibexa_auto_translation` table, `SET NULL` on delete | -| `user_id` | integer | ID of the user who performed the operation | -| `status` | string | Status at the time of the operation | -| `operation` | string | `created`, `approved`, or `rejected` | -| `created_at` | datetime | When the operation was performed | - -When an automatically translated draft is deleted, its `ibexa_auto_translation` row is removed, the review log rows remain, but their `auto_translation_id` is set to `null`. diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index 32f7d6649d8..33f74feb4a4 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -16,7 +16,9 @@ The package discovers and registers tagged services automatically. Before you build a custom translation provider, if your provider uses the AI Actions framework, make sure that the `ibexa/connector-ai` package is installed in your system. -To connect a translation service that is not built into the package, implement [`TranslationProviderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Provider-TranslationProviderInterface.html). +### REST API-based provider + +To connect a translation service that calls a REST API directly, implement [`TranslationProviderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Provider-TranslationProviderInterface.html). The `translate()` method receives a `TranslationDataInterface` object that carries the text to translate along with the source and target language codes: ``` php hl_lines="36-49" @@ -24,12 +26,38 @@ The `translate()` method receives a `TranslationDataInterface` object that carri ``` Register the provider with the `ibexa.translations_management.auto_translate.provider` tag. -Both `identifier` and `validation_profile` are required attributes. +Both `identifier` and [`validation_profile`](#validation-profiles) are required attributes. ``` yaml [[= include_code('code_samples/translations_management/config/services.yaml', 1, 6) =]] ``` +### AI-based provider + +To connect a translation service that uses the [AI Actions](ai_actions.md) framework, implement [`AiTranslationProviderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Provider-AiTranslationProviderInterface.html). +The interface adds `getConfiguration()` and `isConfigured()` to the base provider contract. +These methods allow the package to determine whether the provider is available before it displays selectable options in the **Create a new translation** modal: + +``` php hl_lines="37-50" +[[= include_code('code_samples/translations_management/src/TranslationsManagement/MyCustomAiProvider.php') =]] +``` + +Register the provider with the `ibexa.translations_management.auto_translate.provider` tag, with `ai_generic` as the validation profile: + +``` yaml +[[= include_file('code_samples/translations_management/config/services.yaml', 0, 1) =]] [[= include_code('code_samples/translations_management/config/services.yaml', 32, 36) =]] +``` + +!!! note "Minimal `getConfiguration()` and `isConfigured()` implementations" + + The sample implements `getConfiguration()` and `isConfigured()` as stubs. + The built-in AI providers delegate these methods to internal services that are not part of the public API and are not available to custom code outside the bundle. + If your custom provider integrates with the AI Actions framework, `isConfigured()` should check whether the `actionConfigurationIdentifier` resolves to an existing and enabled Action Configuration. + +The `validation_profile`, `supportedLanguageCodes`, and `languageCodesMap` options work the same way as for REST API-based providers. + +### Validation profiles + The `validation_profile` attribute links the provider to a validator that checks language codes and payload size before each before each translation request. By default, three profiles are available: @@ -68,7 +96,7 @@ To add support for a custom or non-standard field type, implement [`FieldValueTr - `encode(Field $field): EncodedFieldValue` - extracts the translatable string from the field and wraps it in an [`EncodedFieldValue`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-EncodedFieldValue.html). The constructor takes the extracted string as its first argument and an optional metadata array as its second. - `decode(string $value, mixed $previousFieldValue, array $metadata): Value` - receives the translated string, the previous field value, and any metadata, and returns the updated field value -``` php hl_lines="19 24" +``` php hl_lines="31 46-58" [[= include_code('code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php') =]] ``` @@ -195,6 +223,9 @@ Both highlighted calls are required: When a response is set on the event, `admin-ui` uses it and doesn't proceed with the standard translation editor. +When the package's Subscriber fails to create the auto-translated draft, for example, when the provider is unreachable, it catches the exception, shows an error notification in the back office, and redirects the editor to the content view, but it does not surface a full error page. +If your subscriber takes over the flow by calling both `setResponse()` and `stopPropagation()`, you must implement error handling. + !!! caution "Internal `ContentProxyTranslateEvent`" `ContentProxyTranslateEvent` is marked `@internal` in `ibexa/admin-ui`. diff --git a/docs/multisite/translations_management/translations_management_guide.md b/docs/multisite/translations_management/translations_management_guide.md index 142848944e2..36932a4af85 100644 --- a/docs/multisite/translations_management/translations_management_guide.md +++ b/docs/multisite/translations_management/translations_management_guide.md @@ -87,8 +87,6 @@ When a draft is created by going through the automatic translation process, it i Editors can [accept or reject the translation]([[= user_doc =]]/content_management/translate_content/#review-automatic-translation) directly in the side-by-side view. Accepted drafts are marked as "Translated". -The review history is [stored in the database](configure_translations_management.md#database-tables) for audit purposes. - !!! note "No review for manual translations" Draft translations that were created manually don't have a review status. diff --git a/docs/release_notes/ibexa_dxp_v5.0.md b/docs/release_notes/ibexa_dxp_v5.0.md index 34809335cf6..557a248af6c 100644 --- a/docs/release_notes/ibexa_dxp_v5.0.md +++ b/docs/release_notes/ibexa_dxp_v5.0.md @@ -48,14 +48,12 @@ For more information, see [Translate content items with CLI](configure_translati When a draft is created through automatic translation, it receives the "For review" status. Editors can accept or reject the translation in the side-by-side view, which displays a review bar. -Accepted translations are given the "Translated". +Accepted translations are given the "Translated" status. The **Versions** tab shows a **Translation status** column with review status badges for draft translations created with automatic translation. For more information, see [Translation review](configure_translations_management.md#translation-review). - - ### Developer experience The package exposes multiple extension points for custom translation workflows, including: From b9f08ca4bb25f17bb714c51f03dc067e2101ff0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Tue, 11 Aug 2026 15:53:38 +0200 Subject: [PATCH 19/20] Minor fix --- .../extend_translations_management.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index 33f74feb4a4..ba5e365919e 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -90,17 +90,19 @@ The package also provides several specialized interfaces for providers with spec The translation engine works by extracting translatable text from fields, sending it to the provider, and writing the translated text back. Field value transformers handle this encode/decode cycle, one per field type. The package includes transformers for standard text and RichText fields. + To add support for a custom or non-standard field type, implement [`FieldValueTransformerInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-FieldValueTransformerInterface.html): -- `getFieldTypeIdentifier()` - returns the field type identifier this transformer handles -- `encode(Field $field): EncodedFieldValue` - extracts the translatable string from the field and wraps it in an [`EncodedFieldValue`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-EncodedFieldValue.html). The constructor takes the extracted string as its first argument and an optional metadata array as its second. -- `decode(string $value, mixed $previousFieldValue, array $metadata): Value` - receives the translated string, the previous field value, and any metadata, and returns the updated field value +- `getFieldTypeIdentifier()` - returns the field type identifier that this transformer handles +- `encode(Field $field): EncodedFieldValue` - extracts the translatable string from the field and wraps it in an [`EncodedFieldValue`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-EncodedFieldValue.html). +The constructor takes the extracted string as its first argument and an optional metadata array as the second. +- `decode(string $value, mixed $previousFieldValue, array $metadata): Value` - receives the translated string, the previous field value, and any metadata. Returns the updated field value. -``` php hl_lines="31 46-58" +``` php hl_lines="21 31 37 46-58" [[= include_code('code_samples/translations_management/src/TranslationsManagement/ImageAltTextTransformer.php') =]] ``` -Register the transformer with the `ibexa.translations_management.auto_translate.field_value_transformer` tag. +Register the new transformer with the `ibexa.translations_management.auto_translate.field_value_transformer` tag. The `field_type_identifier` attribute is required. It must match the value that `getFieldTypeIdentifier()` returns: From 55a11e744e03418f38783b0de1448b8ed2b85bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20D=C4=85browski?= <64841871+dabrt@users.noreply.github.com> Date: Thu, 13 Aug 2026 15:01:58 +0200 Subject: [PATCH 20/20] Implement reviewer comments, improve installation procedure --- .../install/schema.mysql.sql | 35 ++++++ .../install/schema.postgresql.sql | 40 ++++++ .../ContentProxyTranslateSubscriber.php | 4 +- .../MyTranslationAddExtension.php | 22 ---- deptrac.baseline.yaml | 2 - .../translations_management_events.md | 2 +- .../img/managing_translations_sxs_view.png | Bin 79236 -> 118669 bytes ...translations_management_language_pairs.png | Bin 41554 -> 0 bytes .../configure_translations_management.md | 118 +++++++++--------- .../extend_translations_management.md | 35 +----- 10 files changed, 140 insertions(+), 118 deletions(-) create mode 100644 code_samples/translations_management/install/schema.mysql.sql create mode 100644 code_samples/translations_management/install/schema.postgresql.sql delete mode 100644 code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php delete mode 100644 docs/multisite/img/translations_management_language_pairs.png diff --git a/code_samples/translations_management/install/schema.mysql.sql b/code_samples/translations_management/install/schema.mysql.sql new file mode 100644 index 00000000000..e45471a1bbc --- /dev/null +++ b/code_samples/translations_management/install/schema.mysql.sql @@ -0,0 +1,35 @@ +CREATE TABLE IF NOT EXISTS ibexa_auto_translation ( + id INT AUTO_INCREMENT NOT NULL, + provider_identifier VARCHAR(190) NOT NULL, + content_id INT NOT NULL, + version_no INT NOT NULL, + source_language_id BIGINT NOT NULL, + target_language_id BIGINT NOT NULL, + review_status VARCHAR(64) NOT NULL, + created_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', + updated_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', + INDEX ibexa_auto_translation_content_version_idx (content_id, version_no), + INDEX ibexa_auto_translation_target_language_idx (target_language_id), + INDEX ibexa_auto_translation_review_status_idx (review_status), + UNIQUE INDEX ibexa_auto_translation_context_uidx (content_id, version_no, source_language_id, target_language_id), + PRIMARY KEY(id) +) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB; + +CREATE TABLE IF NOT EXISTS ibexa_auto_translation_review_log ( + id INT AUTO_INCREMENT NOT NULL, + auto_translation_id INT DEFAULT NULL, + user_id INT NOT NULL, + status VARCHAR(64) NOT NULL, + operation VARCHAR(64) NOT NULL, + created_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', + INDEX IDX_325A3B737CE350E8 (auto_translation_id), + INDEX ibexa_auto_translation_review_log_auto_translation_created_idx (auto_translation_id, created_at, id), + INDEX ibexa_auto_translation_review_log_status_created_idx (status, created_at), + INDEX ibexa_auto_translation_review_log_user_idx (user_id), + PRIMARY KEY(id) +) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB; + +ALTER TABLE ibexa_auto_translation_review_log ADD CONSTRAINT ibexa_auto_translation_review_log_auto_translation_fk + FOREIGN KEY (auto_translation_id) REFERENCES ibexa_auto_translation (id) ON UPDATE CASCADE ON DELETE SET NULL; +ALTER TABLE ibexa_auto_translation_review_log ADD CONSTRAINT ibexa_auto_translation_review_log_user_fk + FOREIGN KEY (user_id) REFERENCES ibexa_user (contentobject_id) ON UPDATE CASCADE ON DELETE RESTRICT; diff --git a/code_samples/translations_management/install/schema.postgresql.sql b/code_samples/translations_management/install/schema.postgresql.sql new file mode 100644 index 00000000000..c8af0e838cb --- /dev/null +++ b/code_samples/translations_management/install/schema.postgresql.sql @@ -0,0 +1,40 @@ +CREATE TABLE IF NOT EXISTS ibexa_auto_translation ( + id SERIAL NOT NULL, + provider_identifier VARCHAR(190) NOT NULL, + content_id INT NOT NULL, + version_no INT NOT NULL, + source_language_id BIGINT NOT NULL, + target_language_id BIGINT NOT NULL, + review_status VARCHAR(64) NOT NULL, + created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, + updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, + PRIMARY KEY(id) +); + +CREATE INDEX IF NOT EXISTS ibexa_auto_translation_content_version_idx ON ibexa_auto_translation (content_id, version_no); +CREATE INDEX IF NOT EXISTS ibexa_auto_translation_target_language_idx ON ibexa_auto_translation (target_language_id); +CREATE INDEX IF NOT EXISTS ibexa_auto_translation_review_status_idx ON ibexa_auto_translation (review_status); +CREATE UNIQUE INDEX IF NOT EXISTS ibexa_auto_translation_context_uidx ON ibexa_auto_translation (content_id, version_no, source_language_id, target_language_id); +COMMENT ON COLUMN ibexa_auto_translation.created_at IS '(DC2Type:datetime_immutable)'; +COMMENT ON COLUMN ibexa_auto_translation.updated_at IS '(DC2Type:datetime_immutable)'; + +CREATE TABLE IF NOT EXISTS ibexa_auto_translation_review_log ( + id SERIAL NOT NULL, + auto_translation_id INT DEFAULT NULL, + user_id INT NOT NULL, + status VARCHAR(64) NOT NULL, + operation VARCHAR(64) NOT NULL, + created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, + PRIMARY KEY(id) +); + +CREATE INDEX IF NOT EXISTS IDX_325A3B737CE350E8 ON ibexa_auto_translation_review_log (auto_translation_id); +CREATE INDEX IF NOT EXISTS ibexa_auto_translation_review_log_auto_translation_created_idx ON ibexa_auto_translation_review_log (auto_translation_id, created_at, id); +CREATE INDEX IF NOT EXISTS ibexa_auto_translation_review_log_status_created_idx ON ibexa_auto_translation_review_log (status, created_at); +CREATE INDEX IF NOT EXISTS ibexa_auto_translation_review_log_user_idx ON ibexa_auto_translation_review_log (user_id); +COMMENT ON COLUMN ibexa_auto_translation_review_log.created_at IS '(DC2Type:datetime_immutable)'; + +ALTER TABLE ibexa_auto_translation_review_log ADD CONSTRAINT ibexa_auto_translation_review_log_auto_translation_fk + FOREIGN KEY (auto_translation_id) REFERENCES ibexa_auto_translation (id) ON UPDATE CASCADE ON DELETE SET NULL; +ALTER TABLE ibexa_auto_translation_review_log ADD CONSTRAINT ibexa_auto_translation_review_log_user_fk + FOREIGN KEY (user_id) REFERENCES ibexa_user (contentobject_id) ON UPDATE CASCADE ON DELETE RESTRICT; diff --git a/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php b/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php index e9442a3115e..cb9e07c8705 100644 --- a/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php +++ b/code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php @@ -1,4 +1,6 @@ -add('my_custom_field'/* ... */); - } -} diff --git a/deptrac.baseline.yaml b/deptrac.baseline.yaml index 664593c7d1a..b465d1d963a 100644 --- a/deptrac.baseline.yaml +++ b/deptrac.baseline.yaml @@ -245,8 +245,6 @@ deptrac: App\Tab\Dashboard\Everyone\EveryoneArticleTab: - Ibexa\AdminUi\Tab\Dashboard\PagerLocationToDataMapper - Ibexa\Core\Pagination\Pagerfanta\LocationSearchAdapter - App\TranslationsManagement\MyTranslationAddExtension: - - Ibexa\AdminUi\Form\Type\Content\Translation\TranslationAddType App\View\Matcher\Owner: - Ibexa\Core\MVC\Symfony\Matcher\ContentBased\MatcherInterface - Ibexa\Core\MVC\Symfony\View\ContentValueView diff --git a/docs/api/event_reference/translations_management_events.md b/docs/api/event_reference/translations_management_events.md index efc851788d7..79f08c33ed9 100644 --- a/docs/api/event_reference/translations_management_events.md +++ b/docs/api/event_reference/translations_management_events.md @@ -17,7 +17,7 @@ Both events are read-only, you can't use them to override the translation result | Event | Dispatched by | Dispatched when | Properties | |---|---|---|----| | [`BeforeTranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-BeforeTranslateEvent.html) | `EventDispatchingProviderTranslator` | Before a translation request is sent to the provider | `TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | -| [`TranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-TranslateEvent.html) | `TranslationService` | After a translation response is received | `string $result`
`TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | +| [`TranslateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Event-TranslateEvent.html) | `EventDispatchingProviderTranslator` | After a translation response is received | `string $result`
`TranslationProviderInterface $provider`
`string $text`
`string $sourceLanguage`
`string $targetLanguage` | ## Side-by-side creation events diff --git a/docs/multisite/img/managing_translations_sxs_view.png b/docs/multisite/img/managing_translations_sxs_view.png index 8a27800397a02b1754b83dd96ab186eb7c0549ff..466a8465bf78ec1470c74a328d83dc7b643adc56 100644 GIT binary patch literal 118669 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%0A8H43pqE%?HH{yeRN%inn>?nRqk@ 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 literal 79236 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 Ll%QpjCW!w7Vj^{B diff --git a/docs/multisite/img/translations_management_language_pairs.png b/docs/multisite/img/translations_management_language_pairs.png deleted file mode 100644 index a15adf7af5cc91ce602535f7ff8ca84748aa098d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41554 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 ZIA+jGP4k%4^TZMO(NNV@!C$lv`wz+*RlWcK diff --git a/docs/multisite/translations_management/configure_translations_management.md b/docs/multisite/translations_management/configure_translations_management.md index 29f99bb7929..3a3ffd8113c 100644 --- a/docs/multisite/translations_management/configure_translations_management.md +++ b/docs/multisite/translations_management/configure_translations_management.md @@ -6,59 +6,71 @@ month_change: true # Configure translations management -`ibexa/translations-management` extends [[= product_name =]]'s built-in language management tools that editors use for content translation. -It introduces a plugin that handles the translation provider system by connecting to REST APIs and AI services, a [side-by-side editing interface](#side-by-side-translation-view) where editors can compare source and target languages and provide content item and product translations in a single view, and multiple extension points that you can use to [customize different areas of the translation workflow](extend_translations_management.md). - -The package is standalone and does not require the `ibexa/automated-translation` add-on package to run. +`ibexa/translations-management` extends [[= product_name =]]'s built-in language management tools that editors use for content item and product translation. +It introduces a plugin that handles automatic translations through the translation provider system by connecting to REST APIs and AI services, a [side-by-side editing interface](#side-by-side-translation-view) where editors can compare source and target , provide content item and product translations in a single view, and reject or approve translations, and multiple extension points that you can use to [customize different areas of the translation workflow](extend_translations_management.md). !!! note "Automatic translation limitations" - Content types that contain the `ibexa_form` field are excluded from automatic translation. - The ones with the `ibexa_landing_page` field can still be automatically translated through the standard translation flow and the CLI command, and the following elements are translated: - - - The page's title and description - - Names of page blocks - - Plain text on page blocks - - Richtext fields on page blocks - + Content types that contain the `ibexa_form` or `ibexa_landing_page` fields do not support the side-by-side translation view and open in the single-language editor instead. + When a content type that uses `ibexa_landing_page` is automatically translated, only the page's title and description are translated. + When a content type that uses `ibexa_form` is automatically translated, only the forms's title is translated. + Also, [product attributes](products.md#product-attributes) are not translatable. ## Install package -The Translations management LTS Update is optional. -To enable it, run the following command: +To install the Translations management [LTS Update](editions.md#lts-updates), run the following command: ```bash composer require ibexa/translations-management ``` -After installation, run the [[= product_name_base =]] data migrations to complete the setup: +If you're installing Translations management LTS Update as part of the installation process of a fresh [[= product_name =]] instance, this step copies the migration files into the project's migrations directory, creates the database tables required for the review workflow, and adds the default action configurations in the database. +Otherwise follow the steps below. + +### Existing installations + +To add the Translations management LTS Update to an existing [[= product_name =]] instance, after installation, you must create database tabes and action configurations yourself. + +#### Modify database schema + +Add the tables needed by the bundle: + +=== "MySQL" + + ```sql + [[= include_file('code_samples/translations_management/install/schema.mysql.sql', 0, None, ' ') =]] + ``` + +=== "PostgreSQL" + + ```sql + [[= include_file('code_samples/translations_management/install/schema.postgresql.sql', 0, None, ' ') =]] + ``` + +The script creates the required data structures, but doesn't add any data to the database. + +#### Add action configurations + +Import and run the AI Action Configuration migrations to complete the setup: ```bash -php bin/console ibexa:migrations:import --from-bundle=IbexaTranslationsManagementBundle +php bin/console ibexa:migrations:import vendor/ibexa/translations-management/src/bundle/Resources/migrations/2026_05_06_15_00_auto_translate_openai_action_configuration.yaml +php bin/console ibexa:migrations:import vendor/ibexa/translations-management/src/bundle/Resources/migrations/2026_05_11_10_00_auto_translate_gemini_action_configuration.yaml +php bin/console ibexa:migrations:import vendor/ibexa/translations-management/src/bundle/Resources/migrations/2026_05_12_08_30_auto_translate_anthropic_action_configuration.yaml php bin/console ibexa:migrations:migrate ``` -This copies the migration files into the project's migrations directory, creates the database tables required for the review workflow, and adds the default action configurations in the database. - ## Configure translation providers Translation providers are the services that perform the actual text translation. -The Translations management package comes with two types of translation providers: + If you fail to configure them, the automatic translation feature is disabled in the editor's UI, and a message is displayed that prompts the user to contact the administrator + +The Translations management package comes with two types of translation services: - REST API-based providers call a translation service such as Google Translate or DeepL directly by using an API key. - AI-based providers send translation requests through the [AI Actions](configure_ai_actions.md) framework, relying on the same model selection and policy controls as other AI features in [[= product_name =]]. -Out of the box, Translations management can support the following translation providers: - -| Provider | Type | Configuration | -|---|---|---| -| Google Translate | REST API | API key | -| DeepL | REST API | API key | -| OpenAI | AI Actions | Action Configuration identifier | -| Anthropic (Claude) | AI Actions | Action Configuration identifier | -| Google Gemini | AI Actions | Action Configuration identifier | - !!! note "Prerequisites for the default translation providers" Before you can configure translation providers, you must fulfill the following prerequisites: @@ -67,9 +79,19 @@ Out of the box, Translations management can support the following translation pr - For the AI-based translation providers, [install and configure](configure_ai_actions.md) the `ibexa/connector-ai` package and their corresponding connectors. +Out of the box, Translations management can support the following translation providers: + +| Provider | Type | +|---|---|---| +| Google Translate | REST API | +| DeepL | REST API | +| OpenAI | AI Actions | +| Anthropic (Claude) | AI Actions | +| Google Gemini | AI Actions | + **Built-in AI providers** -When you install the Translations management package, the installation process automatically creates AI [Action Configurations](extend_ai_actions.md#action-configurations) for OpenAI (`auto_translate_openai`), Google Gemini (`auto_translate_gemini`), and Anthropic Claude (`auto_translate_anthropic`). +If you fulfill the above prerequisites, and you install the Translations management package, the installation process automatically creates AI [Action Configurations](extend_ai_actions.md#action-configurations) for OpenAI (`auto_translate_openai`), Google Gemini (`auto_translate_gemini`), and Anthropic Claude (`auto_translate_anthropic`). You can use them directly in provider configuration: @@ -109,19 +131,11 @@ The `apiKey` values must reference API key values that you added to the `.env` f The `actionConfigurationIdentifier` values must reference existing Action Configurations. If a value is missing or empty, the provider doesn't appear in the UI as a selectable option. -!!! caution "AI policies required" - - AI-based providers require that AI policies are assigned to user roles. - If an editor can't see AI providers in the translation provider dropdown, check if the appropriate AI policies are granted in their role definition. - -If you fail to configure the providers, the Translations management feature disables itself in the editor's UI. -The **Use automatic translation** checkbox is disabled, and a message is displayed that prompts the user to contact the administrator - -### Advanced translation provider options +#### Advanced translation provider options In addition to their required authentication keys, all providers support two optional ones: -- `supportedLanguageCodes` - overrides the default list of language codes this provider accepts +- `supportedLanguageCodes` - overrides the default list of language codes that this provider accepts - `languageCodesMap` - maps language codes used by [[= product_name =]], for example, `eng-GB`, to the provider-specific codes the API expects ``` yaml @@ -162,27 +176,7 @@ The editor can override the pre-selection. The list of languages available when creating a language pair is determined by what each provider supports. You can only select the languages that are present in a provider's [supported list](#advanced-translation-provider-options) for that provider's pairs. -You can manage language pairs in [[= product_name_base =]]'s back office. - -### Manage language pairs in UI - -To manage language pairs in the back office, go to **Admin** -> **Languages** -> **Language pairs** tab. -Here you can create, edit and delete language pairs. - -To add a language pair, click **+ Add language pair**. -Then, pick a source language and one or more target languages from their respective drop-down lists. -Finally, from the **Translation service** list, pick a translation provider and click **Save and close** - -![Creating a language pair](translations_management_language_pairs.png "Creating a language pair") - -This adds as many language pairs as you picked target languages. - -!!! note - - The **Add language pair** action is disabled if no translation providers are [configured](#configure-translation-providers). - - If a language pair already exists and is associated with a translation provider, you can't create another language pair with a different provider. - Edit the existing language pair instead. +You [manage language pairs in the back office]([[= user_doc =]]/content_management/translate_content/#manage-translation-services-and-language-pairs). ## User settings @@ -268,6 +262,8 @@ It's a single server-side operation handled by `SideBySideFieldCopyService::copy When an user opens the translation modal and selects a target language which already has a draft translation, a warning appears in the modal. The warning is shown or hidden dynamically by `add.translation.modal.warning.js` when the user changes the target language selection. +For a description of the side-by-side view and its functions from the user's perspective, see [Translate content](([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view). + ## Translate content items with CLI For the purposes of batch processing, automation and other scripted actions, the Translations management package exposes a command that translates content items by using any of the configured providers: diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md index ba5e365919e..b0f9e2be145 100644 --- a/docs/multisite/translations_management/extend_translations_management.md +++ b/docs/multisite/translations_management/extend_translations_management.md @@ -6,7 +6,7 @@ month_change: true # Extend translations management -By extending [Translations management](translations_management_guide.md), you can build custom translation workflows and adapt the package's behavior to your specific requirements. +By extending [Translations management](translations_management_guide.md), you can adapt the package's behavior to your specific requirements. The package is designed to be extended in multiple ways. You can create custom [translation providers](configure_translations_management.md#configure-translation-providers), field type transformers, exclusion rules, and UI components. In all cases, you follow the same pattern: implement an interface first, then register the service with a service tag. @@ -42,7 +42,8 @@ These methods allow the package to determine whether the provider is available b [[= include_code('code_samples/translations_management/src/TranslationsManagement/MyCustomAiProvider.php') =]] ``` -Register the provider with the `ibexa.translations_management.auto_translate.provider` tag, with `ai_generic` as the validation profile: +Register the provider with the `ibexa.translations_management.auto_translate.provider` tag, with `ai_generic` as the validation profile. +The `ai_generic` validation profile is used by default for AI providers, but you can [implement your own](#validation-profiles). ``` yaml [[= include_file('code_samples/translations_management/config/services.yaml', 0, 1) =]] [[= include_code('code_samples/translations_management/config/services.yaml', 32, 36) =]] @@ -178,34 +179,6 @@ Register a component with the `ibexa.twig.component` tag: The `admin-ui-content-translation-modal-footer` group receives a `location` variable that may be `null` when the modal is rendered outside a location context. Always check for `null` before you access location properties in your component template. -## Extend modal - -If injecting custom UI elements is not sufficient, you can extend the modal itself. -To add a field to the **Add translation** modal, for example, to let the editor choose a custom workflow or pass extra parameters along with the translation request, extend [`TranslationAddType`](https://github.com/ibexa/admin-ui/blob/main/src/lib/Form/Type/Content/Translation/TranslationAddType.php) with a [Symfony's Form Type extension](https://symfony.com/doc/current/form/create_form_type_extension.html). -It's the same mechanism the translations management package uses internally to inject its provider selector into the modal. - -Create a class that extends [`AbstractTypeExtension`](https://symfony.com/doc/current/reference/forms/types/form.html) and declare the extended type: - -``` php -[[= include_code('code_samples/translations_management/src/TranslationsManagement/MyTranslationAddExtension.php') =]] -``` - -Register it as a service: - -``` yaml -[[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]] -[[= include_code('code_samples/translations_management/config/services.yaml', 11, 13) =]] -``` - -The extra field is then available in the submitted form data, which the standard `admin-ui` controller includes in the translation request data. -Use this approach when you need to read extra input from the editor, not to redirect or replace the response. - -!!! caution "Internal `TranslationAddType`" - - `TranslationAddType` is marked `@internal` in `ibexa/admin-ui`. - While it functions as an extension point in practice, its name and signature may change. - It may even be removed entirely without a deprecation notice. - ## Intercept translation flow The `BeforeTranslateEvent` and `TranslateEvent` [events](translations_management_events.md#translation-events) operate at the field-value level and cannot redirect the HTTP flow. @@ -214,7 +187,7 @@ To intercept the "Add translation" action at the HTTP level, for example, to tri The `translations-management` package listens to this event at priority `100`. Subscribe at a higher priority to act before the package does: -``` php hl_lines="35 36" +``` php hl_lines="22 38 39" [[= include_code('code_samples/translations_management/src/TranslationsManagement/ContentProxyTranslateSubscriber.php') =]] ```