翻译消息使用 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'
我正在使用 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'