Symfony2 - 如何翻译来自FOSUserBundle的“错误凭据”登录错误消息?

时间:2014-05-10 09:53:01

标签: symfony fosuserbundle

如果出现登录错误,我想自定义错误消息('凭据错误')。 我这样做但不起作用。 这是模板登录:

{% if error %}
<div>{{ error.message|trans }}</div>
{% endif %}<form action="{{ path('login_check') }}" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />

<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
<input type="hidden" name="_target_path" value="/account" />
<input type="submit" name="login" />

文件config.yml我有这个:

framework:
#esi:             ~
translator:      { fallback: "%locale%" }

在parametre.yml我有这个:

locale: en

我在MyBundle / Resources / translations / messages.en.ymy:

目录中添加了该文件
security:
login:
    username: "Username:"
    password: "Password:"
    submit: Login
    forgot_username: "Forgot username"
    forgot_password: "Forgot password"
    registration: register
    # Security
    "Bad credentials": "Your user name or password are incorrect."

但我总是有错误的凭据错误消息

7 个答案:

答案 0 :(得分:5)

问题是错误消息在字符串末尾有点(。)

您可以使用树枝修剪滤镜来纠正此问题:

{{ error|trim('.')|trans({}, 'FOSUserBundle') }}

答案 1 :(得分:4)

在我的登录表单中,我有:

{# Error login form #}
{% if error %}
    <div class="alert alert-danger">
        <strong>{% trans %}login.error{% endtrans %}!</strong> {{ error.messageKey|trans({}, 'messages') }}
        </div>
{% endif %}

此处“消息”很重要,因为它指的是您的翻译域,或者您更喜欢翻译文件的名称。就我而言:messages.en.yml

使用fosuserbundle 1.3.5,你必须把它放在你的message.yml

"Invalid credentials." : Bad email/password combination

我希望这会有所帮助

答案 2 :(得分:2)

Bad Credentials错误不是任何父组(security.login或域名)的一部分。

要翻译它,您需要将键/值对添加到常规messages.<locale>.<format>文件中,如此...

Acme/DemoBundle/Resources/translations/messages.en.yml

"Bad Credentials": Incorrect username and/or password

// Other stuff
acme_demo:
    form:
        cats: Cats

仅供参考......

这个答案(差不多)可以在以下任何一个中找到:

Customize Authentication - Login Symfony2 Messages

Recommended way of translating authentication errors in symfony2

Translate error message of login form

答案 3 :(得分:1)

您使用了错误的翻译域

FOSUserBundle使用FOSUserBundle代替messages。请查看默认 template

捆绑包内的翻译文件存储在:

<bundle>/Resources/translations/<translationDomain>.<locale>.<format>

<强>溶液

将翻译文件重命名为FOSUserBundle.<locale>.<format>。然后清除缓存以解决此问题。

答案 4 :(得分:0)

只是信息我没有使用FosUserBundle而且我按照每一步但是相同的消息错误不良凭据

答案 5 :(得分:0)

你需要喜欢:

<div>{{ error|trans }}</div>

而不是:

<div>{{ error.message|trans }}</div>

它对我有用。

答案 6 :(得分:0)

消息“Bad Credentials”错过了一个点。 它可能是“坏证书”。

您只能在捆绑

下翻译此行,才能覆盖翻译文件

不要忘记添加翻译域

{{ error|trans({}, 'FOSUserBundle') }}

或全球

{% trans_default_domain 'FOSUserBundle' %}

注意:此解决方案使用FOSuserBundle进行测试,因为hwo问他说他没有使用它。