Custom translation servers
With the usage of XLIFF and the freely available Pootle translation server, companies and individuals may easily set up a custom translation server for their extensions.
The event ModifyLanguagePackRemoteBaseUrlEvent can be caught to change the translation server URL, for example:
<?php
declare(strict_types=1);
namespace MyVendor\MyExtension\EventListener;
use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\Core\Http\Uri;
use TYPO3\CMS\Install\Service\Event\ModifyLanguagePackRemoteBaseUrlEvent;
#[AsEventListener(
identifier: 'my-extension/custom-mirror',
)]
final readonly class CustomMirror
{
private const EXTENSION_KEY = 'my_extension';
private const MIRROR_URL = 'https://example.org/typo3-packages/';
public function __invoke(ModifyLanguagePackRemoteBaseUrlEvent $event): void
{
if ($event->getPackageKey() === self::EXTENSION_KEY) {
$event->setBaseUrl(new Uri(self::MIRROR_URL));
}
}
}
In the above example, the URL is changed only for a given extension, but of course it could be changed on a more general basis.
On the custom translation server side, the structure needs to be:
https://example.org/typo3-packages/
`-- <first-letter-of-extension-key>
`-- <second-letter-of-extension-key>
`-- <extension-key>-l10n
|-- <extension-key>-l10n-de.zip
|-- <extension-key>-l10n-fr.zip
`-- <extension-key>-l10n-it.zip
Copied!
hence in our example:
https://example.org/typo3-packages/
`-- m
`-- y
`-- my_extension-l10n
|-- my_extension-l10n-de.zip
|-- my_extension-l10n-fr.zip
`-- my_extension-l10n-it.zip
Copied!