Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Symfony控制器上获取翻译文本_Symfony_Symfony 2.1 - Fatal编程技术网

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

在Symfony控制器上获取翻译文本,symfony,symfony-2.1,Symfony,Symfony 2.1,我在/Resources/translations位置上有一个名为messages.en.yml的翻译文件,如下所示: company: messages: schedule: success: Schedule saved successfully failed: Something went wrong on saving schedule 现在,我需要按此处的键调用此消息: $this->get('ses

我在
/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;
    }
}

有点失望,不是吗

不幸的是,不可能翻译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']
查看官方文档:

试试这个

$this->get('session')->getFlashBag()->add(
'success',
$this->get('translator')->trans('company.messages.schedule.success')
);
此外,需要在配置中启用:

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

检查官方文件:

不,它不工作。它返回company.messages.schedule.successno它不工作。它返回company.messages.schedule.successyes。我认为是这样。但是我没有任何关于如何在FlashBag上添加翻译的参考资料。我会在我的答案中添加一些代码,让我花几分钟:)@nifCody你没有验证答案:/yes。我认为是这样。但是我没有任何关于如何在FlashBag上添加翻译的参考资料。我会在我的答案中添加一些代码,让我花几分钟:)@nifCody你没有验证答案:/mable duplicate of mable duplicate of the