ChangePasswordForm (#694)

erweitert um die Ausgabe des Usernamens und einen Einleitungstext. Anpassung am Theme sind nicht notwendig, da es sich um Bebop-Felder handelt.

git-svn-id: https://svn.libreccm.org/ccm/trunk@1530 8810af33-2d31-482b-a856-94f89814c4df
master
quasi 2012-03-02 17:04:27 +00:00
parent cfff083567
commit 5e60eed0aa
5 changed files with 147 additions and 136 deletions

View File

@ -44,43 +44,44 @@ import com.arsdigita.web.Web;
import com.arsdigita.web.URL;
import com.arsdigita.web.ReturnSignal;
import com.arsdigita.kernel.Kernel;
import com.arsdigita.kernel.Party;
import com.arsdigita.kernel.User;
import com.arsdigita.kernel.UserAuthentication;
import com.arsdigita.kernel.security.RecoveryLoginModule;
import com.arsdigita.mail.Mail;
import com.arsdigita.util.UncheckedWrapperException;
import java.lang.reflect.Array;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
/**
* A Form that allows a user to change their password by entering their old
* password, a new password, and a confirmation of their new password.
* Requires that the user is logged in. Requires that new password differ
* from old and meet strong password requirements. If the user is
* recovering from a lost password (UserContext.isRecovering() is true),
* does not require or display the old password parameter and does not
* require that new password differ from old. Mails the user to notify of
* password change. Redirects user to workspace or return_url if set.
* password, a new password, and a confirmation of their new password. Requires
* that the user is logged in. Requires that new password differ from old and
* meet strong password requirements. If the user is recovering from a lost
* password (UserContext.isRecovering() is true), does not require or display
* the old password parameter and does not require that new password differ from
* old. Mails the user to notify of password change. Redirects user to workspace
* or return_url if set.
*
* @author Sameer Ajmani
**/
*
*/
public class ChangePasswordForm extends Form
implements FormProcessListener,
FormValidationListener {
implements FormProcessListener,
FormValidationListener {
public static final String versionId = "$Id: ChangePasswordForm.java 699 2005-08-12 12:35:18Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/16 18:10:38 $";
private static final Logger s_log =
Logger.getLogger(ChangePasswordForm.class.getName());
Logger.getLogger(ChangePasswordForm.class.getName());
final static String CHANGE_PASSWORD_FORM_NAME = "change-password";
final static String OLD_PASSWORD_PARAM_NAME = "old-password";
final static String NEW_PASSWORD_PARAM_NAME = "new-password";
final static String CONFIRM_PASSWORD_PARAM_NAME = "confirm-password";
final static String RETURN_URL_PARAM_NAME =
LoginHelper.RETURN_URL_PARAM_NAME;
LoginHelper.RETURN_URL_PARAM_NAME;
private UserAuthenticationListener m_listener =
new UserAuthenticationListener();
new UserAuthenticationListener();
private Hidden m_returnURL;
private Hidden m_recovery;
private Label m_oldPasswordLabel;
@ -96,13 +97,14 @@ public class ChangePasswordForm extends Form
super.register(p);
p.addRequestListener(m_listener);
p.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
PageState state = e.getPageState();
boolean visible = !isRecovering();
m_oldPasswordLabel.setVisible(state, visible);
m_oldPassword.setVisible(state, visible);
}
});
public void actionPerformed(ActionEvent e) {
PageState state = e.getPageState();
boolean visible = !isRecovering();
m_oldPasswordLabel.setVisible(state, visible);
m_oldPassword.setVisible(state, visible);
}
});
}
public ChangePasswordForm(Container panel) {
@ -113,8 +115,7 @@ public class ChangePasswordForm extends Form
addProcessListener(this);
// save the recovery credential as a hidden parameter
m_recovery = new Hidden(new StringParameter
(RecoveryLoginModule.getParamName()));
m_recovery = new Hidden(new StringParameter(RecoveryLoginModule.getParamName()));
m_recovery.setPassIn(true);
add(m_recovery);
@ -123,10 +124,28 @@ public class ChangePasswordForm extends Form
m_returnURL.setPassIn(true);
add(m_returnURL);
Party party = Kernel.getContext().getParty();
if (party != null && party instanceof User) {
User user = (User) party;
user.getPersonName().toString();
// Add a describtive text and the user name to the form for user comfort
Label greeting = new Label(
LoginHelper.getMessage("login.changePasswortForm.greeting",
new Object[] { user.getPersonName().toString() } )
);
greeting.setFontWeight(Label.BOLD);
greeting.setClassAttr("greeting");
add(greeting);
}
add(new Label(LoginHelper.getMessage("login.changePasswortForm.introText")));
// old password
m_oldPasswordLabel = new Label
(LoginHelper.getMessage
("login.changePasswordForm.oldPasswordLabel"));
m_oldPasswordLabel = new Label(LoginHelper.getMessage("login.changePasswordForm.oldPasswordLabel"));
add(m_oldPasswordLabel);
m_oldPassword = new Password(OLD_PASSWORD_PARAM_NAME);
// don't use NotNullValidationListener because
@ -134,93 +153,79 @@ public class ChangePasswordForm extends Form
add(m_oldPassword);
// new password
Object[] params = new Object[] {
new Integer(PasswordValidationListener.MIN_LENGTH) };
add(new Label(LoginHelper.getMessage
("login.changePasswordForm.newPasswordLabel", params)));
Object[] params = new Object[]{
new Integer(PasswordValidationListener.MIN_LENGTH)};
add(new Label(LoginHelper.getMessage("login.changePasswordForm.newPasswordLabel", params)));
m_newPassword = new Password(NEW_PASSWORD_PARAM_NAME);
m_newPassword.addValidationListener
(new PasswordValidationListener());
m_newPassword.addValidationListener(new PasswordValidationListener());
add(m_newPassword);
// confirm new password
add(new Label(LoginHelper.getMessage
("login.changePasswordForm.confirmPasswordLabel")));
add(new Label(LoginHelper.getMessage("login.changePasswordForm.confirmPasswordLabel")));
m_confirmPassword = new Password(CONFIRM_PASSWORD_PARAM_NAME);
// don't use PasswordValidationListener to avoid duplicate errors
m_confirmPassword.addValidationListener
(new NotNullValidationListener());
m_confirmPassword.addValidationListener(new NotNullValidationListener());
add(m_confirmPassword);
// submit
add(new Submit(LoginHelper.getMessage
("login.changePasswordForm.submit")),
ColumnPanel.CENTER | ColumnPanel.FULL_WIDTH);
add(new Submit(LoginHelper.getMessage("login.changePasswordForm.submit")),
ColumnPanel.CENTER | ColumnPanel.FULL_WIDTH);
}
public void validate(FormSectionEvent event)
throws FormProcessException {
throws FormProcessException {
PageState state = event.getPageState();
FormData data = event.getFormData();
try {
// get user object
if (!m_listener.isLoggedIn(state)) {
// this error should never appear
data.addError(LoginHelper.localize
("login.changePasswordForm.noUserError",
state.getRequest()));
data.addError(LoginHelper.localize("login.changePasswordForm.noUserError",
state.getRequest()));
return;
}
User user = m_listener.getUser(state);
// get parameter values
String oldPassword = (String)m_oldPassword.getValue(state);
String newPassword = (String)m_newPassword.getValue(state);
String confirmPassword = (String)
m_confirmPassword.getValue(state);
String oldPassword = (String) m_oldPassword.getValue(state);
String newPassword = (String) m_newPassword.getValue(state);
String confirmPassword = (String) m_confirmPassword.getValue(state);
// check old password unless recovering
if (!isRecovering()) {
try {
// The old password can never be null or contain leading or
// trailing slashes.
if (oldPassword == null ||
!oldPassword.trim().equals(oldPassword)) {
data.addError
(OLD_PASSWORD_PARAM_NAME, LoginHelper.localize
("login.changePasswordForm.badPasswordError",
state.getRequest()));
if (oldPassword == null
|| !oldPassword.trim().equals(oldPassword)) {
data.addError(OLD_PASSWORD_PARAM_NAME, LoginHelper.localize("login.changePasswordForm.badPasswordError",
state.getRequest()));
return;
}
// TODO: avoid loading UserAuthentication in both
// validate() and process() stages
UserAuthentication auth =
UserAuthentication.retrieveForUser(user);
UserAuthentication.retrieveForUser(user);
if (!auth.isValidPassword(oldPassword)) {
data.addError
(OLD_PASSWORD_PARAM_NAME, LoginHelper.localize
("login.changePasswordForm.badPasswordError",
state.getRequest()));
data.addError(OLD_PASSWORD_PARAM_NAME, LoginHelper.localize("login.changePasswordForm.badPasswordError",
state.getRequest()));
return;
}
} catch (DataObjectNotFoundException e) {
throw new UncheckedWrapperException
("Could not get UserAuthentication", e);
throw new UncheckedWrapperException("Could not get UserAuthentication", e);
}
}
// check new password
if (newPassword.equals(oldPassword)) {
data.addError(NEW_PASSWORD_PARAM_NAME, LoginHelper.localize
("login.changePasswordForm.mustDifferError",
state.getRequest()));
data.addError(NEW_PASSWORD_PARAM_NAME, LoginHelper.localize("login.changePasswordForm.mustDifferError",
state.getRequest()));
return;
}
if (!newPassword.equals(confirmPassword)) {
data.addError(CONFIRM_PASSWORD_PARAM_NAME, LoginHelper.localize
("login.changePasswordForm.mustMatchError",
state.getRequest()));
data.addError(CONFIRM_PASSWORD_PARAM_NAME, LoginHelper.localize("login.changePasswordForm.mustMatchError",
state.getRequest()));
return;
}
} finally {
@ -234,16 +239,15 @@ public class ChangePasswordForm extends Form
}
public void process(FormSectionEvent event)
throws FormProcessException {
throws FormProcessException {
PageState state = event.getPageState();
FormData data = event.getFormData();
// get user object
if (!m_listener.isLoggedIn(state)) {
// this error should never appear (checked in validate)
data.addError(LoginHelper.localize
("login.changePasswordForm.noUserError",
state.getRequest()));
data.addError(LoginHelper.localize("login.changePasswordForm.noUserError",
state.getRequest()));
return;
}
User user = m_listener.getUser(state);
@ -251,14 +255,13 @@ public class ChangePasswordForm extends Form
// set new password
try {
UserAuthentication auth =
UserAuthentication.retrieveForUser(user);
String newPassword = (String)m_newPassword.getValue(state);
UserAuthentication.retrieveForUser(user);
String newPassword = (String) m_newPassword.getValue(state);
auth.setPassword(newPassword);
s_log.debug("committing password change");
auth.save();
} catch (DataObjectNotFoundException e) {
throw new UncheckedWrapperException
("Could not get UserAuthentication", e);
throw new UncheckedWrapperException("Could not get UserAuthentication", e);
}
// mail report to user
@ -268,17 +271,17 @@ public class ChangePasswordForm extends Form
HttpServletRequest req = state.getRequest();
String to =
user.getPrimaryEmail().toString();
user.getPrimaryEmail().toString();
String from =
Kernel.getSecurityConfig().getAdminContactEmail();
Kernel.getSecurityConfig().getAdminContactEmail();
String name =
user.getPersonName().getGivenName();
user.getPersonName().getGivenName();
String subject =
LoginHelper.localize("login.changePasswordForm.mailSubject", req);
LoginHelper.localize("login.changePasswordForm.mailSubject", req);
String body =
LoginHelper.localize("login.changePasswordForm.mailBody",
new Object[] { name },
req);
LoginHelper.localize("login.changePasswordForm.mailBody",
new Object[]{name},
req);
// try to send the message, but don't throw the exception
// if it fails so that the password change is comitted
@ -290,9 +293,9 @@ public class ChangePasswordForm extends Form
s_log.error("Could not notify user of password change", e);
}
} else {
s_log.debug("Could not notify user of password change: " +
"null email, user ID: " +
user.getID());
s_log.debug("Could not notify user of password change: "
+ "null email, user ID: "
+ user.getID());
}
final HttpServletRequest req = state.getRequest();

View File

@ -60,3 +60,5 @@ login.error.badAnswer=Incorrect answer
login.error.badEmail=Unrecognized email address
login.error.bannedEmail=User cannot currently access system
login.error.loginFail=Login failed
login.changePasswortForm.greeting=Welcome {0}
login.changePasswortForm.introText=To change your passwort please fill out this form.

View File

@ -1,10 +1,10 @@
login.userEditPage.title=Profil bearbeiten
login.userEditPage.changePasswordLink=Passwort \u00E4ndern
login.workspacePage.title=Ihr pers\u00F6nlicher Bereich
login.userEditPage.changePasswordLink=Passwort \u00e4ndern
login.workspacePage.title=Ihr pers\u00f6nlicher Bereich
login.explainCookiesPage.title=E-Mail Adresse und Passwort werden gesichert
login.userInfo.logoutLink=Abmelden
login.userInfo.editProfileLink=Profil bearbeiten
login.userInfo.changePasswordLink=Passwort \u00E4ndern
login.userInfo.changePasswordLink=Passwort \u00e4ndern
login.userRegistrationForm.title=Anmelden
login.userRegistrationForm.email=Ihre E-Mail Adresse\:
login.userRegistrationForm.screenName=Ihr Benutzername\:
@ -14,49 +14,51 @@ login.userRegistrationForm.explainCookieLink=(Hilfe)
login.userRegistrationForm.forgotPasswordLink=Passwort vergessen?
login.userRegistrationForm.newUserRegister=Neue Benutzer registrieren sich hier
login.userNewForm.title=Registrieren
login.userNewForm.aboutYouSectionHeader=<h3>\u00DCber mich</h3>
login.userNewForm.aboutYouSectionHeader=<h3>\u00dcber mich</h3>
login.userNewForm.securitySectionHeader=<h3>Sicherheit</h3>
login.userNewForm.securityBlurb=Wie ben\u00F6tigen ein Passwort, um Ihre Identit\u00E4t und Beitr\u00E4ge zu Foren und anderen Aktivit\u00E4ten zu sch\u00FCtzen.
login.userNewForm.passwordBlurb=W\u00E4hlen Sie ein Passwort aus Gru\u00DFbuchstaben, Kleinbuchstaben, Zahlen und anderen Zeichen. Wenn sie es vergessen, unterst\u00FCtzt Sie der Server bei der Festlegung eines neuen.
login.userNewForm.questionBlurb=Wir ben\u00F6tigen eine individuelle Frage und Antwort um sicher zu gehen, dass nur Sie das Passwort \u00E4ndern k\u00F6nnen.
login.userNewForm.securityBlurb=Wie ben\u00f6tigen ein Passwort, um Ihre Identit\u00e4t und Beitr\u00e4ge zu Foren und anderen Aktivit\u00e4ten zu sch\u00fctzen.
login.userNewForm.passwordBlurb=W\u00e4hlen Sie ein Passwort aus Gru\u00dfbuchstaben, Kleinbuchstaben, Zahlen und anderen Zeichen. Wenn sie es vergessen, unterst\u00fctzt Sie der Server bei der Festlegung eines neuen.
login.userNewForm.questionBlurb=Wir ben\u00f6tigen eine individuelle Frage und Antwort um sicher zu gehen, dass nur Sie das Passwort \u00e4ndern k\u00f6nnen.
login.changePasswordForm.oldPasswordLabel=Altes Passwort\:
login.changePasswordForm.newPasswordLabel=Neues Passwort (mindestens {0} Zeichen, keine Leertaste)\:
login.changePasswordForm.confirmPasswordLabel=Passwort best\u00E4tigen\:
login.changePasswordForm.submit=Ausf\u00FChren
login.changePasswordForm.confirmPasswordLabel=Passwort best\u00e4tigen\:
login.changePasswordForm.submit=Ausf\u00fchren
login.changePasswordForm.noUserError=Benutzer ist nicht angemeldet
login.changePasswordForm.badPasswordError=Falsches Passwort
login.changePasswordForm.mustDifferError=Das neue Passwort muss sich vom bisherigen unterscheiden
login.changePasswordForm.mustMatchError=Die neuen Passw\u00F6rter m\u00FCssen gleich sein
login.changePasswordForm.mailSubject=Ihr Passwort wurde ge\u00E4ndert.
login.changePasswordForm.mailBody=Hallo {0},\n\nIhr Passwort wurde erfolgreich ge\u00E4ndert.\nWenn Sie Ihr Passwort nicht \u00E4ndern wollten,\nmelden Sie bitte diese Mail an uns.
login.changePasswordPage.title=Passwort \u00C4nderung
login.recoverPassword.mailSubject=\u00C4ndern Sie das Passwort
login.recoverPassword.mailBody=Hallo {0},\n\nKlicken Sie auf diese URL oder kopieren Sie sie in Ihren Browser, um Ihr Passwort zu \u00E4ndern\:\n{1}
login.changePasswordForm.mustMatchError=Die neuen Passw\u00f6rter m\u00fcssen gleich sein
login.changePasswordForm.mailSubject=Ihr Passwort wurde ge\u00e4ndert.
login.changePasswordForm.mailBody=Hallo {0},\n\nIhr Passwort wurde erfolgreich ge\u00e4ndert.\nWenn Sie Ihr Passwort nicht \u00e4ndern wollten,\nmelden Sie bitte diese Mail an uns.
login.changePasswordPage.title=Passwort \u00c4nderung
login.recoverPassword.mailSubject=\u00c4ndern Sie das Passwort
login.recoverPassword.mailBody=Hallo {0},\n\nKlicken Sie auf diese URL oder kopieren Sie sie in Ihren Browser, um Ihr Passwort zu \u00e4ndern\:\n{1}
login.recoverPasswordPage.title=Passwort holen
login.loginExpiredPage.title=Anmeldung abgelaufen
login.loginExpiredPage.before=Der Anmeldebildschirm ist nicht mehr g\u00FCltig
login.loginExpiredPage.before=Der Anmeldebildschirm ist nicht mehr g\u00fcltig
login.loginExpiredPage.link=Anmeldung
login.loginExpiredPage.after= erneut.
login.passwordValidation.minLengthError=Passwort muss aus mindestens {0} Zeichen bestehen
login.passwordValidation.whitespaceError=Das Passwort darf kein Leerzeichen enthalten
login.passwordValidation.minTypesError=Das Passwort muss aus {0} dieser 4 Typen gestehen\: Gro\u00DFbuchstaben, Kleinbuchstaben, Ziffern, andere Zeichen
login.submit=Ausf\u00FChren
login.passwordValidation.minTypesError=Das Passwort muss aus {0} dieser 4 Typen gestehen\: Gro\u00dfbuchstaben, Kleinbuchstaben, Ziffern, andere Zeichen
login.submit=Ausf\u00fchren
login.primaryEmail=E-Mail Adresse\:
login.additionalEmail=Weitere E-Mail\:
login.firstName=Vorname\:
login.lastName=Nachname\:
login.password=Passwort (mindestens {0} Zeichen, kein Leerzeichen)\:
login.passwordConfirm=Passwort best\u00E4tigen\:
login.passwordConfirm=Passwort best\u00e4tigen\:
login.passwordQuestion=Frage\:
login.passwordAnswer=Antwort\:
login.url=URL der pers\u00F6nlichen Homepage\:
login.url=URL der pers\u00f6nlichen Homepage\:
login.screenName=Benutzername\:
login.bio=Biographie\:
login.error.duplicateScreenName=Ein anderer Benutzer verwendet diesen Namen
login.error.duplicateEmail=Ein anderer Nutzer verwendet diese E-Mail Adresse
login.error.mismatchPassword=Die neuen Passw\u00F6rter m\u00FCssen gleich sein
login.error.mismatchPassword=Die neuen Passw\u00f6rter m\u00fcssen gleich sein
login.error.badPassword=Falsches Passwort
login.error.badAnswer=Falsche Antwort
login.error.badEmail=Ung\u00FCltige E-Mail Adresse
login.error.badEmail=Ung\u00fcltige E-Mail Adresse
login.error.bannedEmail=Benutzer kann zur Zeit das System nicht nutzen
login.error.loginFail=Anmeldung nicht erfolgreich
login.changePasswortForm.greeting=Willkommen {0}
login.changePasswortForm.introText=Um ihr Passwort zu \u00e4ndern, f\u00fcllen sie bitte das folgende Formular aus.

View File

@ -60,3 +60,5 @@ login.error.badAnswer=Incorrect answer
login.error.badEmail=Unrecognized email address
login.error.bannedEmail=User cannot currently access system
login.error.loginFail=Login failed
login.changePasswortForm.greeting=Welcome {0}
login.changePasswortForm.introText=To change your passwort please fill out this form.

View File

@ -2,7 +2,7 @@ login.userEditPage.title=Modifier ce profil
login.userEditPage.changePasswordLink=Modifier le mot de passe
login.workspacePage.title=Votre espace de travail
login.explainCookiesPage.title=Enregistrement de l'adresse de messagerie et du mot de passe
login.userInfo.logoutLink=Déconnexion
login.userInfo.logoutLink=D\u00e9connexion
login.userInfo.editProfileLink=Modifier ce profil
login.userInfo.changePasswordLink=Modifier le mot de passe
login.userRegistrationForm.title=Se connecter
@ -11,49 +11,51 @@ login.userRegistrationForm.screenName=Votre pseudonyme
login.userRegistrationForm.password=Votre mot de passe
login.userRegistrationForm.cookieOption=Retenir ce mot de passe?
login.userRegistrationForm.explainCookieLink=(aide)
login.userRegistrationForm.forgotPasswordLink=Vous avez oublié votre mot de passe?
login.userNewForm.title=Créer votre compte
login.userRegistrationForm.forgotPasswordLink=Vous avez oubli\u00e9 votre mot de passe?
login.userNewForm.title=Cr\u00e9er votre compte
login.userNewForm.aboutYouSectionHeader=<h3>A propos de vous</h3>
login.userNewForm.securitySectionHeader=<h3>Securité</h3>
login.userNewForm.securityBlurb=Merci de nous fournir un mot de passe afin que nous puissions protéger votre indentité lorsque vous participez aux Quiz, aux forum de discussions et aux autres activités communes sur notre site.
login.userNewForm.passwordBlurb=Choisissez un mot de passe qui contienne un mélange de majuscules, de minuscules, de chiffres et d'autres caractères. Si vous oubliez votre mot de passe, notre serveur vous aidera à le remplacer par un nouveau
login.userNewForm.questionBlurb=Merci de nous indiquer une question (et sa réponse) à laquelle vous seul pouvez répondre pour que nous puission nous assurer que vous serez le seul à pouvoir changer votre mot de passe
login.userNewForm.securitySectionHeader=<h3>Securit\u00e9</h3>
login.userNewForm.securityBlurb=Merci de nous fournir un mot de passe afin que nous puissions prot\u00e9ger votre indentit\u00e9 lorsque vous participez aux Quiz, aux forum de discussions et aux autres activit\u00e9s communes sur notre site.
login.userNewForm.passwordBlurb=Choisissez un mot de passe qui contienne un m\u00e9lange de majuscules, de minuscules, de chiffres et d'autres caract\u00e8res. Si vous oubliez votre mot de passe, notre serveur vous aidera \u00e0 le remplacer par un nouveau
login.userNewForm.questionBlurb=Merci de nous indiquer une question (et sa r\u00e9ponse) \u00e0 laquelle vous seul pouvez r\u00e9pondre pour que nous puission nous assurer que vous serez le seul \u00e0 pouvoir changer votre mot de passe
login.changePasswordForm.oldPasswordLabel=Ancien mot de passe :
login.changePasswordForm.newPasswordLabel=Nouveau mot de passe (au moins {0} caractère et pas d'espace):
login.changePasswordForm.newPasswordLabel=Nouveau mot de passe (au moins {0} caract\u00e8re et pas d'espace):
login.changePasswordForm.confirmPasswordLabel=Confirmation du nouveau mot de passe
login.changePasswordForm.submit=Soumettre
login.changePasswordForm.noUserError=L'utilisateur n'est pas connecté
login.changePasswordForm.badPasswordError=Mot de passe erroné
login.changePasswordForm.mustDifferError=Le nouveau mot de passe doit être différent de l'ancien
login.changePasswordForm.mustMatchError=Le nouveau mot de passe doit être identique dans la zone de confirmation
login.changePasswordForm.mailSubject=Votre mot de passe a été modifié
login.changePasswordForm.mailBody=Cher {0}, \n\n Votre mot de passe a été modifié avec succès.\nSi vous n'avez pas souhaité changer votre mot de passe,\nmerci de répondre à ce message en faisant part de ce problème.
login.changePasswordForm.noUserError=L'utilisateur n'est pas connect\u00e9
login.changePasswordForm.badPasswordError=Mot de passe erron\u00e9
login.changePasswordForm.mustDifferError=Le nouveau mot de passe doit \u00eatre diff\u00e9rent de l'ancien
login.changePasswordForm.mustMatchError=Le nouveau mot de passe doit \u00eatre identique dans la zone de confirmation
login.changePasswordForm.mailSubject=Votre mot de passe a \u00e9t\u00e9 modifi\u00e9
login.changePasswordForm.mailBody=Cher {0}, \n\n Votre mot de passe a \u00e9t\u00e9 modifi\u00e9 avec succ\u00e8s.\nSi vous n'avez pas souhait\u00e9 changer votre mot de passe,\nmerci de r\u00e9pondre \u00e0 ce message en faisant part de ce probl\u00e8me.
login.changePasswordPage.title=Modifier le mot de passe
login.recoverPassword.mailSubject=Modifier votre mot de passe
login.recoverPassword.mailBody=Cher {0},\n\nCliquer sur cet URL ou recopiez le dans la barre d'adresse de votre navigateur pour modifier votre mot de passe:\n{1}
login.recoverPasswordPage.title=Récupérer le mot de passe
login.loginExpiredPage.title=Votre connexion a expiré
login.loginExpiredPage.before=La page de connexion a expiré. Merci\u0020
login.recoverPasswordPage.title=R\u00e9cup\u00e9rer le mot de passe
login.loginExpiredPage.title=Votre connexion a expir\u00e9
login.loginExpiredPage.before=La page de connexion a expir\u00e9. Merci\u0020
login.loginExpiredPage.link=de vous connecter
login.loginExpiredPage.after=\u0020à nouveau
login.passwordValidation.minLengthError=Le mot de passe doit faire au minimum {0} caractères de long
login.loginExpiredPage.after=\u0020\u00e0 nouveau
login.passwordValidation.minLengthError=Le mot de passe doit faire au minimum {0} caract\u00e8res de long
login.passwordValidation.whitespaceError=Le mot de passe ne doit pas contenir d'espace
login.passwordValidation.minTypesError=Le mot de passe doit contenir {0} de ces 4 types de caractères : majuscule, minuscule, chiffre ou autre symbole
login.passwordValidation.minTypesError=Le mot de passe doit contenir {0} de ces 4 types de caract\u00e8res : majuscule, minuscule, chiffre ou autre symbole
login.submit=Soumettre
login.primaryEmail=Adresse de messagerie:
login.additionalEmail=Adresse de messagerie supplémentaire
login.firstName=Prénom:
login.additionalEmail=Adresse de messagerie suppl\u00e9mentaire
login.firstName=Pr\u00e9nom:
login.lastName=Nom:
login.password=Mot de passe (au moins {0} caractère et pas d'espace):
login.password=Mot de passe (au moins {0} caract\u00e8re et pas d'espace):
login.passwordConfirm=Confirmation du mot de passe
login.passwordQuestion=Question:
login.passwordAnswer=Réponse:
login.passwordAnswer=R\u00e9ponse:
login.url=URL de votre site web personnel
login.screenName=Votre pseudonyme:
login.bio=Biographie:
login.error.duplicateScreenName=Un autre utilisateur utilise déjà ce pseudonyme
login.error.duplicateEmail=Un autre utilisateur nous a déjà donner cette adresse de messagerie
login.error.mismatchPassword=Le nouveau mot de passe doit être identique dans la zone de confirmation
login.error.badPassword=Mot de passe erroné
login.error.badAnswer=Réponse erronée
login.error.duplicateScreenName=Un autre utilisateur utilise d\u00e9j\u00e0 ce pseudonyme
login.error.duplicateEmail=Un autre utilisateur nous a d\u00e9j\u00e0 donner cette adresse de messagerie
login.error.mismatchPassword=Le nouveau mot de passe doit \u00eatre identique dans la zone de confirmation
login.error.badPassword=Mot de passe erron\u00e9
login.error.badAnswer=R\u00e9ponse erron\u00e9e
login.error.badEmail=Cette adresse de messagerie est inconnue
login.changePasswortForm.greeting=
login.changePasswortForm.introText=