使用ajax表单翻译邮件以登录

时间:2017-03-02 21:21:39

标签: ajax symfony fosuserbundle

我正在使用symfony 3.2,我想用ajax表单登录。除了没有翻译消息外,一切正常。

这是AjaxAuthenticationFailureHandler类

class AjaxAuthenticationFailureHandler extends DefaultAuthenticationFailureHandler
{
/**
 * @var mixed
 */
private $translator;

/**
 * @param \Symfony\Component\HttpKernel\HttpKernelInterface $httpKernel
 * @param \Symfony\Component\Security\Http\HttpUtils        $httpUtils
 * @param array                                             $options
 * @param \Psr\Log\LoggerInterface                          $logger
 * @param mixed                                             $translator
 */
public function __construct(HttpKernelInterface $httpKernel, HttpUtils $httpUtils, array $options, LoggerInterface $logger = null, $translator = null)
{
    parent::__construct($httpKernel, $httpUtils, $options, $logger);

    $this->translator = $translator;
}

/**
* {@inheritDoc}
*/
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
    if ($request->isXmlHttpRequest()) {
        return new Response(json_encode(array(
            'has_error' => true,
            'message'     => $this->translator->trans($exception->getMessage())
        )));
    }

    return parent::onAuthenticationFailure($request, $exception);
}

symfony 4的解决方案:

对于symfony 4,我们可以这样做:

'message' => $this->translator->trans($exception->getMessageKey(), array(), 'security'),

1 个答案:

答案 0 :(得分:1)

尝试将您的翻译行更改为:

$this->translator->trans($exception->getMessage(), array(), 'messages')

然后在Resources / translations文件夹中为每种语言创建翻译文件,即messages.en.yml,messages.fr.yml等......

你的$ exception-> getMessage()应该尝试并返回翻译键以简化事情,例如它应该返回" error.name.missing"然后在yml翻译文件中你有:

error.name.missing: 'The name cannot be missing'