diff --git a/ccm-core/src/com/arsdigita/ui/login/ChangePasswordForm.java b/ccm-core/src/com/arsdigita/ui/login/ChangePasswordForm.java index 765a6f0b9..371eef079 100755 --- a/ccm-core/src/com/arsdigita/ui/login/ChangePasswordForm.java +++ b/ccm-core/src/com/arsdigita/ui/login/ChangePasswordForm.java @@ -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(); diff --git a/ccm-core/src/com/arsdigita/ui/login/LoginResources.properties b/ccm-core/src/com/arsdigita/ui/login/LoginResources.properties index d20483565..3210ba731 100644 --- a/ccm-core/src/com/arsdigita/ui/login/LoginResources.properties +++ b/ccm-core/src/com/arsdigita/ui/login/LoginResources.properties @@ -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. diff --git a/ccm-core/src/com/arsdigita/ui/login/LoginResources_de.properties b/ccm-core/src/com/arsdigita/ui/login/LoginResources_de.properties index 90b614e57..935591644 100644 --- a/ccm-core/src/com/arsdigita/ui/login/LoginResources_de.properties +++ b/ccm-core/src/com/arsdigita/ui/login/LoginResources_de.properties @@ -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=

\u00DCber mich

+login.userNewForm.aboutYouSectionHeader=

\u00dcber mich

login.userNewForm.securitySectionHeader=

Sicherheit

-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. diff --git a/ccm-core/src/com/arsdigita/ui/login/LoginResources_en.properties b/ccm-core/src/com/arsdigita/ui/login/LoginResources_en.properties index fcaf26bb1..f839f050c 100644 --- a/ccm-core/src/com/arsdigita/ui/login/LoginResources_en.properties +++ b/ccm-core/src/com/arsdigita/ui/login/LoginResources_en.properties @@ -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. diff --git a/ccm-core/src/com/arsdigita/ui/login/LoginResources_fr.properties b/ccm-core/src/com/arsdigita/ui/login/LoginResources_fr.properties index f88cbb92a..f114db047 100755 --- a/ccm-core/src/com/arsdigita/ui/login/LoginResources_fr.properties +++ b/ccm-core/src/com/arsdigita/ui/login/LoginResources_fr.properties @@ -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=

A propos de vous

-login.userNewForm.securitySectionHeader=

Securité

-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=

Securit\u00e9

+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=