UPDATE: Symfony: Adding messages to the translator dynamically (updated) contains an update to the post below
To add to the translator (eg. from the DB / by user / etc), you need to first create your own translator class or force Symfony to use the base one (otherwise it’ll compile things together and use a read-only one when it comes to accessing your site).
First, in your services.yml file;
translator: public: true alias: 'Symfony\Bundle\FrameworkBundle\Translation\Translator' Symfony\Bundle\FrameworkBundle\Translation\Translator: class: Symfony\Bundle\FrameworkBundle\Translation\Translator arguments: - '@service_container' - '@translator.selector' - '%kernel.default_locale%'
This just tells Symfony to use the base translator, or alternatively you can use your own as follows;
app/config/services.yml
translator: public: true alias: 'YourNamespace\YourTranslatorClassName'
From there you can add a listener or just need to obtain an instance of the Translator on-load, and add in any resources as required – eg;
your-listener / controller / etc;
use Symfony\Component\Translation\Loader\ArrayLoader ... $translator->addLoader('array', new ArrayLoader()); $translator->addResource('array', ["my.word" => "Hello"], $translator->getLocale());
$translator is an instance of “Symfony\Component\Translation\Translator”.
More info;
https://symfony.com/doc/current/components/translation/usage.html