在 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
我在位置 <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