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,26 +44,29 @@ import com.arsdigita.web.Web;
import com.arsdigita.web.URL; import com.arsdigita.web.URL;
import com.arsdigita.web.ReturnSignal; import com.arsdigita.web.ReturnSignal;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
import com.arsdigita.kernel.Party;
import com.arsdigita.kernel.User; import com.arsdigita.kernel.User;
import com.arsdigita.kernel.UserAuthentication; import com.arsdigita.kernel.UserAuthentication;
import com.arsdigita.kernel.security.RecoveryLoginModule; import com.arsdigita.kernel.security.RecoveryLoginModule;
import com.arsdigita.mail.Mail; import com.arsdigita.mail.Mail;
import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.util.UncheckedWrapperException;
import java.lang.reflect.Array;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
* A Form that allows a user to change their password by entering their old * 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. * password, a new password, and a confirmation of their new password. Requires
* Requires that the user is logged in. Requires that new password differ * that the user is logged in. Requires that new password differ from old and
* from old and meet strong password requirements. If the user is * meet strong password requirements. If the user is recovering from a lost
* recovering from a lost password (UserContext.isRecovering() is true), * password (UserContext.isRecovering() is true), does not require or display
* does not require or display the old password parameter and does not * the old password parameter and does not require that new password differ from
* require that new password differ from old. Mails the user to notify of * old. Mails the user to notify of password change. Redirects user to workspace
* password change. Redirects user to workspace or return_url if set. * or return_url if set.
* *
* @author Sameer Ajmani * @author Sameer Ajmani
**/ *
*/
public class ChangePasswordForm extends Form public class ChangePasswordForm extends Form
implements FormProcessListener, implements FormProcessListener,
FormValidationListener { FormValidationListener {
@ -71,14 +74,12 @@ public class ChangePasswordForm extends Form
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 $"; 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 = 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 CHANGE_PASSWORD_FORM_NAME = "change-password";
final static String OLD_PASSWORD_PARAM_NAME = "old-password"; final static String OLD_PASSWORD_PARAM_NAME = "old-password";
final static String NEW_PASSWORD_PARAM_NAME = "new-password"; final static String NEW_PASSWORD_PARAM_NAME = "new-password";
final static String CONFIRM_PASSWORD_PARAM_NAME = "confirm-password"; final static String CONFIRM_PASSWORD_PARAM_NAME = "confirm-password";
final static String RETURN_URL_PARAM_NAME = final static String RETURN_URL_PARAM_NAME =
LoginHelper.RETURN_URL_PARAM_NAME; LoginHelper.RETURN_URL_PARAM_NAME;
private UserAuthenticationListener m_listener = private UserAuthenticationListener m_listener =
new UserAuthenticationListener(); new UserAuthenticationListener();
private Hidden m_returnURL; private Hidden m_returnURL;
@ -96,6 +97,7 @@ public class ChangePasswordForm extends Form
super.register(p); super.register(p);
p.addRequestListener(m_listener); p.addRequestListener(m_listener);
p.addActionListener(new ActionListener() { p.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
PageState state = e.getPageState(); PageState state = e.getPageState();
boolean visible = !isRecovering(); boolean visible = !isRecovering();
@ -113,8 +115,7 @@ public class ChangePasswordForm extends Form
addProcessListener(this); addProcessListener(this);
// save the recovery credential as a hidden parameter // save the recovery credential as a hidden parameter
m_recovery = new Hidden(new StringParameter m_recovery = new Hidden(new StringParameter(RecoveryLoginModule.getParamName()));
(RecoveryLoginModule.getParamName()));
m_recovery.setPassIn(true); m_recovery.setPassIn(true);
add(m_recovery); add(m_recovery);
@ -123,10 +124,28 @@ public class ChangePasswordForm extends Form
m_returnURL.setPassIn(true); m_returnURL.setPassIn(true);
add(m_returnURL); 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 // old password
m_oldPasswordLabel = new Label m_oldPasswordLabel = new Label(LoginHelper.getMessage("login.changePasswordForm.oldPasswordLabel"));
(LoginHelper.getMessage
("login.changePasswordForm.oldPasswordLabel"));
add(m_oldPasswordLabel); add(m_oldPasswordLabel);
m_oldPassword = new Password(OLD_PASSWORD_PARAM_NAME); m_oldPassword = new Password(OLD_PASSWORD_PARAM_NAME);
// don't use NotNullValidationListener because // don't use NotNullValidationListener because
@ -136,25 +155,20 @@ public class ChangePasswordForm extends Form
// new password // new password
Object[] params = new Object[]{ Object[] params = new Object[]{
new Integer(PasswordValidationListener.MIN_LENGTH)}; new Integer(PasswordValidationListener.MIN_LENGTH)};
add(new Label(LoginHelper.getMessage add(new Label(LoginHelper.getMessage("login.changePasswordForm.newPasswordLabel", params)));
("login.changePasswordForm.newPasswordLabel", params)));
m_newPassword = new Password(NEW_PASSWORD_PARAM_NAME); m_newPassword = new Password(NEW_PASSWORD_PARAM_NAME);
m_newPassword.addValidationListener m_newPassword.addValidationListener(new PasswordValidationListener());
(new PasswordValidationListener());
add(m_newPassword); add(m_newPassword);
// confirm new password // confirm new password
add(new Label(LoginHelper.getMessage add(new Label(LoginHelper.getMessage("login.changePasswordForm.confirmPasswordLabel")));
("login.changePasswordForm.confirmPasswordLabel")));
m_confirmPassword = new Password(CONFIRM_PASSWORD_PARAM_NAME); m_confirmPassword = new Password(CONFIRM_PASSWORD_PARAM_NAME);
// don't use PasswordValidationListener to avoid duplicate errors // don't use PasswordValidationListener to avoid duplicate errors
m_confirmPassword.addValidationListener m_confirmPassword.addValidationListener(new NotNullValidationListener());
(new NotNullValidationListener());
add(m_confirmPassword); add(m_confirmPassword);
// submit // submit
add(new Submit(LoginHelper.getMessage add(new Submit(LoginHelper.getMessage("login.changePasswordForm.submit")),
("login.changePasswordForm.submit")),
ColumnPanel.CENTER | ColumnPanel.FULL_WIDTH); ColumnPanel.CENTER | ColumnPanel.FULL_WIDTH);
} }
@ -166,8 +180,7 @@ public class ChangePasswordForm extends Form
// get user object // get user object
if (!m_listener.isLoggedIn(state)) { if (!m_listener.isLoggedIn(state)) {
// this error should never appear // this error should never appear
data.addError(LoginHelper.localize data.addError(LoginHelper.localize("login.changePasswordForm.noUserError",
("login.changePasswordForm.noUserError",
state.getRequest())); state.getRequest()));
return; return;
} }
@ -176,19 +189,16 @@ public class ChangePasswordForm extends Form
// get parameter values // get parameter values
String oldPassword = (String) m_oldPassword.getValue(state); String oldPassword = (String) m_oldPassword.getValue(state);
String newPassword = (String) m_newPassword.getValue(state); String newPassword = (String) m_newPassword.getValue(state);
String confirmPassword = (String) String confirmPassword = (String) m_confirmPassword.getValue(state);
m_confirmPassword.getValue(state);
// check old password unless recovering // check old password unless recovering
if (!isRecovering()) { if (!isRecovering()) {
try { try {
// The old password can never be null or contain leading or // The old password can never be null or contain leading or
// trailing slashes. // trailing slashes.
if (oldPassword == null || if (oldPassword == null
!oldPassword.trim().equals(oldPassword)) { || !oldPassword.trim().equals(oldPassword)) {
data.addError data.addError(OLD_PASSWORD_PARAM_NAME, LoginHelper.localize("login.changePasswordForm.badPasswordError",
(OLD_PASSWORD_PARAM_NAME, LoginHelper.localize
("login.changePasswordForm.badPasswordError",
state.getRequest())); state.getRequest()));
return; return;
} }
@ -198,28 +208,23 @@ public class ChangePasswordForm extends Form
UserAuthentication auth = UserAuthentication auth =
UserAuthentication.retrieveForUser(user); UserAuthentication.retrieveForUser(user);
if (!auth.isValidPassword(oldPassword)) { if (!auth.isValidPassword(oldPassword)) {
data.addError data.addError(OLD_PASSWORD_PARAM_NAME, LoginHelper.localize("login.changePasswordForm.badPasswordError",
(OLD_PASSWORD_PARAM_NAME, LoginHelper.localize
("login.changePasswordForm.badPasswordError",
state.getRequest())); state.getRequest()));
return; return;
} }
} catch (DataObjectNotFoundException e) { } catch (DataObjectNotFoundException e) {
throw new UncheckedWrapperException throw new UncheckedWrapperException("Could not get UserAuthentication", e);
("Could not get UserAuthentication", e);
} }
} }
// check new password // check new password
if (newPassword.equals(oldPassword)) { if (newPassword.equals(oldPassword)) {
data.addError(NEW_PASSWORD_PARAM_NAME, LoginHelper.localize data.addError(NEW_PASSWORD_PARAM_NAME, LoginHelper.localize("login.changePasswordForm.mustDifferError",
("login.changePasswordForm.mustDifferError",
state.getRequest())); state.getRequest()));
return; return;
} }
if (!newPassword.equals(confirmPassword)) { if (!newPassword.equals(confirmPassword)) {
data.addError(CONFIRM_PASSWORD_PARAM_NAME, LoginHelper.localize data.addError(CONFIRM_PASSWORD_PARAM_NAME, LoginHelper.localize("login.changePasswordForm.mustMatchError",
("login.changePasswordForm.mustMatchError",
state.getRequest())); state.getRequest()));
return; return;
} }
@ -241,8 +246,7 @@ public class ChangePasswordForm extends Form
// get user object // get user object
if (!m_listener.isLoggedIn(state)) { if (!m_listener.isLoggedIn(state)) {
// this error should never appear (checked in validate) // this error should never appear (checked in validate)
data.addError(LoginHelper.localize data.addError(LoginHelper.localize("login.changePasswordForm.noUserError",
("login.changePasswordForm.noUserError",
state.getRequest())); state.getRequest()));
return; return;
} }
@ -257,8 +261,7 @@ public class ChangePasswordForm extends Form
s_log.debug("committing password change"); s_log.debug("committing password change");
auth.save(); auth.save();
} catch (DataObjectNotFoundException e) { } catch (DataObjectNotFoundException e) {
throw new UncheckedWrapperException throw new UncheckedWrapperException("Could not get UserAuthentication", e);
("Could not get UserAuthentication", e);
} }
// mail report to user // mail report to user
@ -290,9 +293,9 @@ public class ChangePasswordForm extends Form
s_log.error("Could not notify user of password change", e); s_log.error("Could not notify user of password change", e);
} }
} else { } else {
s_log.debug("Could not notify user of password change: " + s_log.debug("Could not notify user of password change: "
"null email, user ID: " + + "null email, user ID: "
user.getID()); + user.getID());
} }
final HttpServletRequest req = state.getRequest(); final HttpServletRequest req = state.getRequest();

View File

@ -60,3 +60,5 @@ login.error.badAnswer=Incorrect answer
login.error.badEmail=Unrecognized email address login.error.badEmail=Unrecognized email address
login.error.bannedEmail=User cannot currently access system login.error.bannedEmail=User cannot currently access system
login.error.loginFail=Login failed 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.title=Profil bearbeiten
login.userEditPage.changePasswordLink=Passwort \u00E4ndern login.userEditPage.changePasswordLink=Passwort \u00e4ndern
login.workspacePage.title=Ihr pers\u00F6nlicher Bereich login.workspacePage.title=Ihr pers\u00f6nlicher Bereich
login.explainCookiesPage.title=E-Mail Adresse und Passwort werden gesichert login.explainCookiesPage.title=E-Mail Adresse und Passwort werden gesichert
login.userInfo.logoutLink=Abmelden login.userInfo.logoutLink=Abmelden
login.userInfo.editProfileLink=Profil bearbeiten login.userInfo.editProfileLink=Profil bearbeiten
login.userInfo.changePasswordLink=Passwort \u00E4ndern login.userInfo.changePasswordLink=Passwort \u00e4ndern
login.userRegistrationForm.title=Anmelden login.userRegistrationForm.title=Anmelden
login.userRegistrationForm.email=Ihre E-Mail Adresse\: login.userRegistrationForm.email=Ihre E-Mail Adresse\:
login.userRegistrationForm.screenName=Ihr Benutzername\: login.userRegistrationForm.screenName=Ihr Benutzername\:
@ -14,49 +14,51 @@ login.userRegistrationForm.explainCookieLink=(Hilfe)
login.userRegistrationForm.forgotPasswordLink=Passwort vergessen? login.userRegistrationForm.forgotPasswordLink=Passwort vergessen?
login.userRegistrationForm.newUserRegister=Neue Benutzer registrieren sich hier login.userRegistrationForm.newUserRegister=Neue Benutzer registrieren sich hier
login.userNewForm.title=Registrieren 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.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.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.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.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.oldPasswordLabel=Altes Passwort\:
login.changePasswordForm.newPasswordLabel=Neues Passwort (mindestens {0} Zeichen, keine Leertaste)\: login.changePasswordForm.newPasswordLabel=Neues Passwort (mindestens {0} Zeichen, keine Leertaste)\:
login.changePasswordForm.confirmPasswordLabel=Passwort best\u00E4tigen\: login.changePasswordForm.confirmPasswordLabel=Passwort best\u00e4tigen\:
login.changePasswordForm.submit=Ausf\u00FChren login.changePasswordForm.submit=Ausf\u00fchren
login.changePasswordForm.noUserError=Benutzer ist nicht angemeldet login.changePasswordForm.noUserError=Benutzer ist nicht angemeldet
login.changePasswordForm.badPasswordError=Falsches Passwort login.changePasswordForm.badPasswordError=Falsches Passwort
login.changePasswordForm.mustDifferError=Das neue Passwort muss sich vom bisherigen unterscheiden login.changePasswordForm.mustDifferError=Das neue Passwort muss sich vom bisherigen unterscheiden
login.changePasswordForm.mustMatchError=Die neuen Passw\u00F6rter m\u00FCssen gleich sein login.changePasswordForm.mustMatchError=Die neuen Passw\u00f6rter m\u00fcssen gleich sein
login.changePasswordForm.mailSubject=Ihr Passwort wurde ge\u00E4ndert. 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.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.changePasswordPage.title=Passwort \u00c4nderung
login.recoverPassword.mailSubject=\u00C4ndern Sie das Passwort 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.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.recoverPasswordPage.title=Passwort holen
login.loginExpiredPage.title=Anmeldung abgelaufen 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.link=Anmeldung
login.loginExpiredPage.after= erneut. login.loginExpiredPage.after= erneut.
login.passwordValidation.minLengthError=Passwort muss aus mindestens {0} Zeichen bestehen login.passwordValidation.minLengthError=Passwort muss aus mindestens {0} Zeichen bestehen
login.passwordValidation.whitespaceError=Das Passwort darf kein Leerzeichen enthalten 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.passwordValidation.minTypesError=Das Passwort muss aus {0} dieser 4 Typen gestehen\: Gro\u00dfbuchstaben, Kleinbuchstaben, Ziffern, andere Zeichen
login.submit=Ausf\u00FChren login.submit=Ausf\u00fchren
login.primaryEmail=E-Mail Adresse\: login.primaryEmail=E-Mail Adresse\:
login.additionalEmail=Weitere E-Mail\: login.additionalEmail=Weitere E-Mail\:
login.firstName=Vorname\: login.firstName=Vorname\:
login.lastName=Nachname\: login.lastName=Nachname\:
login.password=Passwort (mindestens {0} Zeichen, kein Leerzeichen)\: login.password=Passwort (mindestens {0} Zeichen, kein Leerzeichen)\:
login.passwordConfirm=Passwort best\u00E4tigen\: login.passwordConfirm=Passwort best\u00e4tigen\:
login.passwordQuestion=Frage\: login.passwordQuestion=Frage\:
login.passwordAnswer=Antwort\: login.passwordAnswer=Antwort\:
login.url=URL der pers\u00F6nlichen Homepage\: login.url=URL der pers\u00f6nlichen Homepage\:
login.screenName=Benutzername\: login.screenName=Benutzername\:
login.bio=Biographie\: login.bio=Biographie\:
login.error.duplicateScreenName=Ein anderer Benutzer verwendet diesen Namen login.error.duplicateScreenName=Ein anderer Benutzer verwendet diesen Namen
login.error.duplicateEmail=Ein anderer Nutzer verwendet diese E-Mail Adresse 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.badPassword=Falsches Passwort
login.error.badAnswer=Falsche Antwort 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.bannedEmail=Benutzer kann zur Zeit das System nicht nutzen
login.error.loginFail=Anmeldung nicht erfolgreich 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.badEmail=Unrecognized email address
login.error.bannedEmail=User cannot currently access system login.error.bannedEmail=User cannot currently access system
login.error.loginFail=Login failed 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.userEditPage.changePasswordLink=Modifier le mot de passe
login.workspacePage.title=Votre espace de travail login.workspacePage.title=Votre espace de travail
login.explainCookiesPage.title=Enregistrement de l'adresse de messagerie et du mot de passe 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.editProfileLink=Modifier ce profil
login.userInfo.changePasswordLink=Modifier le mot de passe login.userInfo.changePasswordLink=Modifier le mot de passe
login.userRegistrationForm.title=Se connecter login.userRegistrationForm.title=Se connecter
@ -11,49 +11,51 @@ login.userRegistrationForm.screenName=Votre pseudonyme
login.userRegistrationForm.password=Votre mot de passe login.userRegistrationForm.password=Votre mot de passe
login.userRegistrationForm.cookieOption=Retenir ce mot de passe? login.userRegistrationForm.cookieOption=Retenir ce mot de passe?
login.userRegistrationForm.explainCookieLink=(aide) login.userRegistrationForm.explainCookieLink=(aide)
login.userRegistrationForm.forgotPasswordLink=Vous avez oublié votre mot de passe? login.userRegistrationForm.forgotPasswordLink=Vous avez oubli\u00e9 votre mot de passe?
login.userNewForm.title=Créer votre compte login.userNewForm.title=Cr\u00e9er votre compte
login.userNewForm.aboutYouSectionHeader=<h3>A propos de vous</h3> login.userNewForm.aboutYouSectionHeader=<h3>A propos de vous</h3>
login.userNewForm.securitySectionHeader=<h3>Securité</h3> login.userNewForm.securitySectionHeader=<h3>Securit\u00e9</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.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é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.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é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.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.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.confirmPasswordLabel=Confirmation du nouveau mot de passe
login.changePasswordForm.submit=Soumettre login.changePasswordForm.submit=Soumettre
login.changePasswordForm.noUserError=L'utilisateur n'est pas connecté login.changePasswordForm.noUserError=L'utilisateur n'est pas connect\u00e9
login.changePasswordForm.badPasswordError=Mot de passe erroné login.changePasswordForm.badPasswordError=Mot de passe erron\u00e9
login.changePasswordForm.mustDifferError=Le nouveau mot de passe doit être différent de l'ancien login.changePasswordForm.mustDifferError=Le nouveau mot de passe doit \u00eatre diff\u00e9rent de l'ancien
login.changePasswordForm.mustMatchError=Le nouveau mot de passe doit être identique dans la zone de confirmation login.changePasswordForm.mustMatchError=Le nouveau mot de passe doit \u00eatre identique dans la zone de confirmation
login.changePasswordForm.mailSubject=Votre mot de passe a été modifié login.changePasswordForm.mailSubject=Votre mot de passe a \u00e9t\u00e9 modifi\u00e9
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.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.changePasswordPage.title=Modifier le mot de passe
login.recoverPassword.mailSubject=Modifier votre 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.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.recoverPasswordPage.title=R\u00e9cup\u00e9rer le mot de passe
login.loginExpiredPage.title=Votre connexion a expiré login.loginExpiredPage.title=Votre connexion a expir\u00e9
login.loginExpiredPage.before=La page de connexion a expiré. Merci\u0020 login.loginExpiredPage.before=La page de connexion a expir\u00e9. Merci\u0020
login.loginExpiredPage.link=de vous connecter login.loginExpiredPage.link=de vous connecter
login.loginExpiredPage.after=\u0020à nouveau login.loginExpiredPage.after=\u0020\u00e0 nouveau
login.passwordValidation.minLengthError=Le mot de passe doit faire au minimum {0} caractères de long 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.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.submit=Soumettre
login.primaryEmail=Adresse de messagerie: login.primaryEmail=Adresse de messagerie:
login.additionalEmail=Adresse de messagerie supplémentaire login.additionalEmail=Adresse de messagerie suppl\u00e9mentaire
login.firstName=Prénom: login.firstName=Pr\u00e9nom:
login.lastName=Nom: 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.passwordConfirm=Confirmation du mot de passe
login.passwordQuestion=Question: login.passwordQuestion=Question:
login.passwordAnswer=Réponse: login.passwordAnswer=R\u00e9ponse:
login.url=URL de votre site web personnel login.url=URL de votre site web personnel
login.screenName=Votre pseudonyme: login.screenName=Votre pseudonyme:
login.bio=Biographie: login.bio=Biographie:
login.error.duplicateScreenName=Un autre utilisateur utilise déjà ce pseudonyme login.error.duplicateScreenName=Un autre utilisateur utilise d\u00e9j\u00e0 ce pseudonyme
login.error.duplicateEmail=Un autre utilisateur nous a déjà donner cette adresse de messagerie 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 être identique dans la zone de confirmation login.error.mismatchPassword=Le nouveau mot de passe doit \u00eatre identique dans la zone de confirmation
login.error.badPassword=Mot de passe erroné login.error.badPassword=Mot de passe erron\u00e9
login.error.badAnswer=Réponse erronée login.error.badAnswer=R\u00e9ponse erron\u00e9e
login.error.badEmail=Cette adresse de messagerie est inconnue login.error.badEmail=Cette adresse de messagerie est inconnue
login.changePasswortForm.greeting=
login.changePasswortForm.introText=