翻译消息使用 ajax 形式登录

Translate messages using ajax form to login

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

这是 AjaxAuthenticationFailureHandler class

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'),

尝试将翻译行更改为:

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

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

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

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