2014-05-10 74 views
8

如果出現登錄錯誤,我想自定義錯誤消息('Bad credentials')。 我這樣做,但不工作。 這是模板登錄:Symfony2 - 如何翻譯來自FOSUserBundle的「Bad credentials」登錄錯誤消息?

{% 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." 

但始終我有Bad憑證錯誤消息

+0

可能重複(http://stackoverflow.com/questions/9201849/customize-authentication-login-symfony2 - 消息) – qooplmao

回答

1

您使用的是錯誤的翻譯域

FOSUserBundle使用FOSUserBundle而不是messages。看看默認的template

內包翻譯文件存儲在:

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

解決方案:

翻譯文件重命名爲FOSUserBundle.<locale>.<format>。之後清除緩存以解決此問題。

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

+1

**你的回答不正確**。 'FOSUserBundle'是模板的默認翻譯域,用於呈現通過** ['trans_default_domain']設置的表單...(https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/views/Security/ login.html.twig#L3)**應用於'error | trans' - > ** [here](https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/views/Security/login.html.twig#L7)** ... – nifr

+0

這是正確的,有點。如果你正在擴展FOSUserBundle的基本模板,那麼這個域名(正如@nifr正確指出的那樣)是'FOSUserBundle',否則它只會是消息(或者你已經設置的,如果你有其他設置的話)。 – qooplmao

+0

Jeah基本上 - 你提到的[[question_](http://stackoverflow.com/questions/9201849/customize-authentication-login-symfony2-messages)覆蓋/顯式設置翻譯域爲'messages' ...如果你想保持你的翻譯很好地組織起來......這實際上是域的目的:) – nifr

0

只是信息我不使用FosUserBundle和我跟隨每一個步驟,但同樣的信息錯誤壞證書

+0

你可以請你編輯你的標題,因爲它指的是FOSUserBundle ... –

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 

我希望這將有助於

0

你需要像:

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

而不是:

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

它爲我工作。

0

消息「Bad Credentials」錯過了一個點。 它可能是「Bad Credentials」。

你只能在你的包覆蓋這一行的翻譯翻譯文件

不要忘記添加翻譯域

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

或全球

{% trans_default_domain 'FOSUserBundle' %} 

注:此解決方案使用FOSuserBundle進行測試,因爲人們要求他說他沒有使用它。

4

問題是,錯誤消息有點(。)在字符串的末尾。

可以更正該用樹枝調整濾波器:

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

更改代碼MyBundle /資源wroted /譯/ messages.en.yml這樣;

Bad credentials.: "Invalid user/password" 

不:下login:寫不使用它直接

[自定義驗證 - 登錄Symfony2的消息]的