在 Symfony 控制器上获取翻译文本

Getting the translation text on Symfony controller

我在位置 <My-Bundle>/Resources/translations 上有一个名为 messages.en.yml 的翻译文件,如下所示:

company:
    messages:
        schedule:
            success:  Schedule saved successfully
            failed:   Something went wrong on saving schedule

现在我需要在此处按键调用此消息:

$this->get('session')->getFlashBag()->add(
    'success',
    '%company.messages.schedule.success%'
);

我尝试了很多方法,但无法解决这个问题。

可惜无法翻译flash包中的一个关键翻译...

您可以创建具有依赖项的自定义服务

  • 译者
  • 会话

然后在将消息添加到 flashBag 之前自己执行翻译

use Symfony\Component\HttpFoundation\Session\Flash\FlashBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Translation\Translator;

class FlashBagTranslator
{
    /** @var Translator $translator */
    private $translator;

    /** @var FlashBag $flashBag */
    private $flashBag;

    public function __construct(Translator $translator, Session $session)
    {
        $this->translator = $translator;
        $this->flashBag = $session->getFlashBag();
    }

    public function addMessage($type, $translationKey, array $parameters = [], $domain = null, $locale = null)
    {
        $message = $this->translator->trans($translationKey, $parameters, $domain, $locale);
        if ($message === $translationKey) {
            // Your translation isn't findable, do something :)
            return false;
        }

        $this->flashBag->add($type, $message);
        return true;
    }
}

有点失望,不是吗?

试试这个

$this->get('session')->getFlashBag()->add(
'success',
$this->get('translator')->trans('company.messages.schedule.success')
);

另外,需要在配置中启用:

framework:
    default_locale: 'en'
    translator:
        fallbacks: ['en']

查看官方文档:Symfony Basic Translation