This extension provides a backend module for translating TYPO3 form framework forms and a cli for creating a source xliff file for a given form.
Either from TYPO3 TER or through composer $ composer req r3h6/form-translator
.
If you like use machine translation by LibreTranslate you must only configure an api host in the extension configuration. See available mirrors.
The extensions adds a translation file path to the *.form.yaml file when localize through the backend module.
# example.form.yaml
renderingOptions:
translation:
translationFiles:
99: fileadmin/form_definitions/l10n/example.xlf
Customized validation error messages are translated by overriding the form definition
at runtime using the afterBuildingFinished
hook from the form framework.
Rename language files prefixed with a locale like de_DE.locallang.xlf
to the corresponding TYPO3 language de.locallang.xlf
or setup a custom language.
No changes required.
Scenario: German is used as default language and your form definition labels are in German too.
When you translate a form to English, English will override your original labels even on the German version of your site.
You have following options:
- Create a (duplicated) German translation of the form
- Add the English locale without charset to the extension configuration
typo3LanguageWhitelist
Background: Beginning with v12, TYPO3 uses the locale configured for the site to determine the language.
For English, TYPO3 uses the file named xyz.xlf
, it does not load a file named en.xyz.xlf
, but it does for en_US.xyz.xlf
.
Name | Description |
---|---|
AfterParseFormEvent | Allows to change the translatable items of a form |
FinalizeTypo3LanguagesEvent | Allows to change the available languages |
Setup libretranslate:
docker run -ti --rm -p 5000:5000 -e LT_LOAD_ONLY='en,de' libretranslate/libretranslate
LibreTranslate host:
http://host.docker.internal:5000/
Pull request are welcome!
Please note: I will not include other translation api's than LibreTranslate in this extension.
If you need an other service, you can create your own by implementing TranslationServiceInterface
.