From 02a4cb04321cdbe1514d63230f7c5a0566a7d29d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Beno=C3=AEt=20Pin?= <benoit.pin@gmail.com> Date: Sun, 19 Jan 2014 10:55:24 +0100 Subject: [PATCH] =?utf8?q?Il=20est=20maintenant=20possible=20d=E2=80=99ent?= =?utf8?q?rer=20son=20adresse=20email=20pour=20la=20r=C3=A9initialisation?= =?utf8?q?=20de=20mot=20de=20passe.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- RegistrationTool.py | 11 ++ locales/en/LC_MESSAGES/plinn.mo | Bin 2348 -> 2348 bytes locales/en/LC_MESSAGES/plinn.po | 123 +++++++++----- locales/fr/LC_MESSAGES/plinn.mo | Bin 40619 -> 41715 bytes locales/fr/LC_MESSAGES/plinn.po | 151 ++++++++++++------ locales/plinn.pot | 124 +++++++++----- skins/custom_generic/login_form.pt | 4 +- .../request_password_reset_template.pt | 5 +- 8 files changed, 291 insertions(+), 127 deletions(-) diff --git a/RegistrationTool.py b/RegistrationTool.py index 1417f30..bddd44b 100644 --- a/RegistrationTool.py +++ b/RegistrationTool.py @@ -32,8 +32,10 @@ from AccessControl.Permission import Permission from BTrees.OOBTree import OOBTree from Products.CMFCore.permissions import ManagePortal, AddPortalMember from Products.CMFCore.exceptions import AccessControl_Unauthorized +from Products.CMFDefault.exceptions import EmailAddressInvalid from Products.CMFCore.utils import getToolByName from Products.CMFCore.utils import getUtilityByInterfaceName +from Products.CMFDefault.utils import checkEmailAddress from Products.GroupUserFolder.GroupsToolPermissions import ManageGroups from Products.Plinn.utils import Message as _ from Products.Plinn.utils import translate @@ -200,6 +202,15 @@ class RegistrationTool(BaseRegistrationTool) : self.clearExpiredPasswordResetRequests() mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool') member = mtool.getMemberById(userid) + if not member : + try : + checkEmailAddress(userid) + member = mtool.searchMembers('email', userid) + if member : + userid = member[0]['username'] + member = mtool.getMemberById(userid) + except EmailAddressInvalid : + pass if member : uuid = str(uuid4()) while self._passwordResetRequests.has_key(uuid) : diff --git a/locales/en/LC_MESSAGES/plinn.mo b/locales/en/LC_MESSAGES/plinn.mo index 5be7fed0759d868a854f1dfb9bf07487e716e388..1dd78a1639100546fb358d4e6092ba86186bc007 100644 GIT binary patch delta 37 scmZ1@v_@!yGn+(kX`X^tVxEGbrGlY>m5HU5sgZ(_fuYIfXts+?0LqsN9smFU delta 37 scmZ1@v_@!yGn+(6MyY~dewl)ig@U26m4T&|k*R`_fuZr{Xts+?0L)+tF#rGn diff --git a/locales/en/LC_MESSAGES/plinn.po b/locales/en/LC_MESSAGES/plinn.po index 8a1cd66..df0b49d 100644 --- a/locales/en/LC_MESSAGES/plinn.po +++ b/locales/en/LC_MESSAGES/plinn.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Plinn 2.0\n" -"POT-Creation-Date: Thu Nov 28 13:09:25 2013\n" +"POT-Creation-Date: Sun Jan 19 10:49:52 2014\n" "PO-Revision-Date: 2013-11-28 13:12+0100\n" "Last-Translator: Benoît PIN\n" "Language-Team: CRI http://cri.ensmp.fr\n" @@ -20,31 +20,31 @@ msgstr "" msgid "Object deleted" msgstr "" -#: n/Folder.py:162 +#: n/Folder.py:164 msgid "Please rename each listed object." msgstr "" -#: n/RegistrationTool.py:217 +#: n/RegistrationTool.py:228 msgid "How to reset your password on the %s website" msgstr "" -#: n/RegistrationTool.py:232 +#: n/RegistrationTool.py:243 msgid "Unknown user name. Please retry." msgstr "" -#: n/RegistrationTool.py:247 +#: n/RegistrationTool.py:258 msgid "Invalid reset password request." msgstr "" -#: n/RegistrationTool.py:253 +#: n/RegistrationTool.py:264 msgid "Your reset password request has expired. You can ask a new one." msgstr "" -#: n/RegistrationTool.py:262 +#: n/RegistrationTool.py:273 msgid "Password successfully reset." msgstr "" -#: n/RegistrationTool.py:264 +#: n/RegistrationTool.py:275 msgid "\"%s\" username not found." msgstr "" @@ -143,8 +143,21 @@ msgstr "" msgid "search between %s and %s" msgstr "" +#: n/skins/content/folder_factories.pt:18 n/skins/generic/gruf_macros.pt:256 +#: n/skins/generic/gruf_macros.pt:378 n/skins/generic/last_member_logs.pt:23 +#: n/skins/generic/pending_members.pt:13 +msgid "Name" +msgstr "" + +#: n/skins/content/folder_factories.pt:34 +#: n/skins/content/topic_edit_template.pt:51 +#: n/skins/generic/gruf_macros.pt:288 n/skins/generic/gruf_macros.pt:327 +msgid "Add" +msgstr "" + #: n/skins/content/folder_notifications_template.pt:23 #: n/skins/content/topic_edit_template.pt:26 +#: n/skins/custom_content/document_edit_template.pt:23 #: n/skins/custom_content/event_edit_template.pt:135 #: n/skins/generic/search_results_template.pt:87 msgid "Save" @@ -191,11 +204,6 @@ msgstr "" msgid "Type:" msgstr "" -#: n/skins/content/topic_edit_template.pt:51 -#: n/skins/generic/gruf_macros.pt:288 n/skins/generic/gruf_macros.pt:327 -msgid "Add" -msgstr "" - #: n/skins/control/restore_revision.py:9 msgid "%(type)s restored." msgstr "" @@ -380,27 +388,29 @@ msgstr "" msgid "%d item moved down.%d items moved down." msgstr "" -#: n/skins/custom_control/folder_rename_control.py:13 +#: n/skins/custom_control/folder_rename_control.py:24 +#: n/skins/custom_control/folder_rename_control.py:42 msgid "Item renamed." msgstr "" -#: n/skins/custom_control/folder_rename_control.py:15 +#: n/skins/custom_control/folder_rename_control.py:26 +#: n/skins/custom_control/folder_rename_control.py:44 msgid "Items renamed." msgstr "" -#: n/skins/custom_control/folder_rename_control.py:18 +#: n/skins/custom_control/folder_rename_control.py:29 msgid "This item has not been renamed: \"%s\"" msgstr "" -#: n/skins/custom_control/folder_rename_control.py:21 +#: n/skins/custom_control/folder_rename_control.py:32 msgid "These items have not been renamed: %s" msgstr "" -#: n/skins/custom_control/folder_rename_control.py:24 +#: n/skins/custom_control/folder_rename_control.py:35 msgid "Rename failed." msgstr "" -#: n/skins/custom_control/folder_rename_control.py:26 +#: n/skins/custom_control/folder_rename_control.py:39 msgid "Nothing to change." msgstr "" @@ -433,6 +443,14 @@ msgstr "" msgid "Bottom" msgstr "" +#: n/skins/custom_generic/folder_rename_template.pt:6 +msgid "Rename Items" +msgstr "" + +#: n/skins/custom_generic/folder_rename_template.pt:16 +msgid "URL" +msgstr "" + #: n/skins/custom_generic/logged_in.py:28 #: n/skins/custom_generic/logged_in_template.pt:9 msgid "Login failure" @@ -491,6 +509,50 @@ msgstr "" msgid "Change password" msgstr "" +#: n/skins/custom_generic/login_form.pt:11 +msgid "Log in" +msgstr "" + +#. Default: "Login" +#: n/skins/custom_generic/login_form.pt:22 +msgid "user_name" +msgstr "" + +#: n/skins/custom_generic/login_form.pt:28 n/skins/generic/gruf_macros.pt:268 +#: n/skins/generic/gruf_macros.pt:390 +#: n/skins/generic/password_reset_template.pt:28 +msgid "Password" +msgstr "" + +#: n/skins/custom_generic/login_form.pt:37 +msgid "Remember my name." +msgstr "" + +#: n/skins/custom_generic/login_form.pt:43 +#: n/skins/generic/password_reset_form.py:26 +msgid " Login " +msgstr "" + +#: n/skins/custom_generic/login_form.pt:49 +msgid "Forgot your login or password?" +msgstr "" + +#: n/skins/custom_generic/login_form.pt:51 +msgid "" +"Having trouble logging in? Make sure to enable cookies in your web browser." +msgstr "" + +#: n/skins/custom_generic/login_form.pt:55 +msgid "Don't forget to logout or exit your browser when you're done." +msgstr "" + +#: n/skins/custom_generic/login_form.pt:58 +msgid "" +"Setting the 'Remember my name' option will set a cookie with your username, " +"so that when you next log in, your user name will already be filled in for " +"you." +msgstr "" + #: n/skins/custom_generic/mail_password_template.py:30 msgid "${portal_title}: Membership reminder" msgstr "" @@ -847,21 +909,10 @@ msgstr "" msgid "Login" msgstr "" -#: n/skins/generic/gruf_macros.pt:256 n/skins/generic/gruf_macros.pt:378 -#: n/skins/generic/last_member_logs.pt:23 -#: n/skins/generic/pending_members.pt:13 -msgid "Name" -msgstr "" - #: n/skins/generic/gruf_macros.pt:262 n/skins/generic/gruf_macros.pt:384 msgid "Given Name" msgstr "" -#: n/skins/generic/gruf_macros.pt:268 n/skins/generic/gruf_macros.pt:390 -#: n/skins/generic/password_reset_template.pt:28 -msgid "Password" -msgstr "" - #: n/skins/generic/gruf_macros.pt:274 n/skins/generic/gruf_macros.pt:396 #: n/skins/generic/password_reset_template.pt:34 msgid "Confirm" @@ -1039,10 +1090,6 @@ msgstr "" msgid "Exit boxes editing" msgstr "" -#: n/skins/generic/password_reset_form.py:26 -msgid " Login " -msgstr "" - #: n/skins/generic/password_reset_mail.py:4 msgid "Hi %(fullName)s," msgstr "" @@ -1162,18 +1209,18 @@ msgstr "" #: n/skins/generic/request_password_reset_template.pt:12 msgid "" -"Enter your username below and click on the \"Send\" button. You will receive " -"an email with a link to reset your password." +"Enter your email or your username below and click on the \"Send\" button. " +"You will receive an email with a link to reset your password." msgstr "" -#: n/skins/generic/request_password_reset_template.pt:18 +#: n/skins/generic/request_password_reset_template.pt:19 msgid "" "If this will not work for you (for example, if you forget your username or " "didn't enter your email address) send email to ${admin_email}." msgstr "" #. Default: "Send" -#: n/skins/generic/request_password_reset_template.pt:25 +#: n/skins/generic/request_password_reset_template.pt:26 msgid " Send " msgstr "" diff --git a/locales/fr/LC_MESSAGES/plinn.mo b/locales/fr/LC_MESSAGES/plinn.mo index d2398329c4a8af0982c3a1f574ed8d2ad8e9c9bf..8ed1dc2509122ea9e855362c624425fd22a7f45d 100644 GIT binary patch delta 13950 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 N0N?H`ZM81rzW@WaWRm~@ delta 12889 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 Ok#pVs=T2NX;Qs)z_5z^* diff --git a/locales/fr/LC_MESSAGES/plinn.po b/locales/fr/LC_MESSAGES/plinn.po index 21249ec..fe1b82d 100755 --- a/locales/fr/LC_MESSAGES/plinn.po +++ b/locales/fr/LC_MESSAGES/plinn.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: Plinn 2.0\n" -"POT-Creation-Date: Thu Nov 28 13:09:25 2013\n" -"PO-Revision-Date: 2013-08-02 10:29+0200\n" +"POT-Creation-Date: Sun Jan 19 10:49:52 2014\n" +"PO-Revision-Date: 2014-01-19 10:51+0100\n" "Last-Translator: Benoît PIN\n" "Language-Team: CRI http://cri.ensmp.fr\n" "Language: \n" @@ -20,33 +20,33 @@ msgstr "" msgid "Object deleted" msgstr "Objet supprimé" -#: n/Folder.py:162 +#: n/Folder.py:164 msgid "Please rename each listed object." msgstr "Veuillez renommer tous les éléments listés." -#: n/RegistrationTool.py:217 +#: n/RegistrationTool.py:228 msgid "How to reset your password on the %s website" msgstr "Comment réinitialiser votre mot de passe sur le site %s" -#: n/RegistrationTool.py:232 +#: n/RegistrationTool.py:243 msgid "Unknown user name. Please retry." msgstr "Nom d'utilisateur inconnu. Veuillez réessayer." -#: n/RegistrationTool.py:247 +#: n/RegistrationTool.py:258 msgid "Invalid reset password request." msgstr "Demande de réinitialisation de mot de passe invalide." -#: n/RegistrationTool.py:253 +#: n/RegistrationTool.py:264 msgid "Your reset password request has expired. You can ask a new one." msgstr "" "Votre demande de réinitialisation de mot de passe a expiré. Vous pouvez en " "demander une nouvelle." -#: n/RegistrationTool.py:262 +#: n/RegistrationTool.py:273 msgid "Password successfully reset." msgstr "Mot de passe correctement réinitialisé." -#: n/RegistrationTool.py:264 +#: n/RegistrationTool.py:275 msgid "\"%s\" username not found." msgstr "Nom : « %s » non trouvé." @@ -68,9 +68,8 @@ msgid "" "the community.\n" msgstr "" "\n" -"Vous venez d'être inscrit en tant que membre du portail " -"« %(portal_title)s », ce qui vous permet de participer à la rédaction des " -"contenus.\n" +"Vous venez d'être inscrit en tant que membre du portail « %(portal_title)" +"s », ce qui vous permet de participer à la rédaction des contenus.\n" #: n/profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:43 #: n/profiles/photo/workflows/member_workflow/scripts/sendNotificationEmail.py:43 @@ -151,8 +150,21 @@ msgstr "recherche depuis le %s jusqu'à la fin du monde" msgid "search between %s and %s" msgstr "recherche entre le %s et le %s" +#: n/skins/content/folder_factories.pt:18 n/skins/generic/gruf_macros.pt:256 +#: n/skins/generic/gruf_macros.pt:378 n/skins/generic/last_member_logs.pt:23 +#: n/skins/generic/pending_members.pt:13 +msgid "Name" +msgstr "Nom" + +#: n/skins/content/folder_factories.pt:34 +#: n/skins/content/topic_edit_template.pt:51 +#: n/skins/generic/gruf_macros.pt:288 n/skins/generic/gruf_macros.pt:327 +msgid "Add" +msgstr "Ajouter" + #: n/skins/content/folder_notifications_template.pt:23 #: n/skins/content/topic_edit_template.pt:26 +#: n/skins/custom_content/document_edit_template.pt:23 #: n/skins/custom_content/event_edit_template.pt:135 #: n/skins/generic/search_results_template.pt:87 msgid "Save" @@ -199,11 +211,6 @@ msgstr "Nom :" msgid "Type:" msgstr "Type :" -#: n/skins/content/topic_edit_template.pt:51 -#: n/skins/generic/gruf_macros.pt:288 n/skins/generic/gruf_macros.pt:327 -msgid "Add" -msgstr "Ajouter" - #: n/skins/control/restore_revision.py:9 msgid "%(type)s restored." msgstr "%(type)s restauré." @@ -390,27 +397,29 @@ msgstr "%d élément déplacé en bas.%d éléments déplacés en bas." msgid "%d item moved down.%d items moved down." msgstr "%d élément déplacé vers le bas.%d éléments déplacés vers le bas." -#: n/skins/custom_control/folder_rename_control.py:13 +#: n/skins/custom_control/folder_rename_control.py:24 +#: n/skins/custom_control/folder_rename_control.py:42 msgid "Item renamed." msgstr "Ãlément renommé." -#: n/skins/custom_control/folder_rename_control.py:15 +#: n/skins/custom_control/folder_rename_control.py:26 +#: n/skins/custom_control/folder_rename_control.py:44 msgid "Items renamed." msgstr "Ãléments renommés." -#: n/skins/custom_control/folder_rename_control.py:18 +#: n/skins/custom_control/folder_rename_control.py:29 msgid "This item has not been renamed: \"%s\"" msgstr "Cet élément n'a pas été renommé : \"%s\"" -#: n/skins/custom_control/folder_rename_control.py:21 +#: n/skins/custom_control/folder_rename_control.py:32 msgid "These items have not been renamed: %s" msgstr "Ces éléments n'ont pas été renommés : %s" -#: n/skins/custom_control/folder_rename_control.py:24 +#: n/skins/custom_control/folder_rename_control.py:35 msgid "Rename failed." msgstr "Renommage échoué." -#: n/skins/custom_control/folder_rename_control.py:26 +#: n/skins/custom_control/folder_rename_control.py:39 msgid "Nothing to change." msgstr "Aucun changement." @@ -443,6 +452,14 @@ msgstr "Premier" msgid "Bottom" msgstr "Dernier" +#: n/skins/custom_generic/folder_rename_template.pt:6 +msgid "Rename Items" +msgstr "Renommer des éléments" + +#: n/skins/custom_generic/folder_rename_template.pt:16 +msgid "URL" +msgstr "URL" + #: n/skins/custom_generic/logged_in.py:28 #: n/skins/custom_generic/logged_in_template.pt:9 msgid "Login failure" @@ -510,6 +527,57 @@ msgstr "Confirmation" msgid "Change password" msgstr "Changer le mot de passe" +#: n/skins/custom_generic/login_form.pt:11 +msgid "Log in" +msgstr "Connexion" + +#. Default: "Login" +#: n/skins/custom_generic/login_form.pt:22 +msgid "user_name" +msgstr "Login" + +#: n/skins/custom_generic/login_form.pt:28 n/skins/generic/gruf_macros.pt:268 +#: n/skins/generic/gruf_macros.pt:390 +#: n/skins/generic/password_reset_template.pt:28 +msgid "Password" +msgstr "Mot de passe" + +#: n/skins/custom_generic/login_form.pt:37 +msgid "Remember my name." +msgstr "Se souvenir de mon login." + +#: n/skins/custom_generic/login_form.pt:43 +#: n/skins/generic/password_reset_form.py:26 +msgid " Login " +msgstr "Connexion" + +#: n/skins/custom_generic/login_form.pt:49 +msgid "Forgot your login or password?" +msgstr "Login ou mot de passe oublié ?" + +#: n/skins/custom_generic/login_form.pt:51 +msgid "" +"Having trouble logging in? Make sure to enable cookies in your web browser." +msgstr "" +"Vous rencontrez des difficultés pour la connexion ? Vérifiez que votre " +"navigateur accepte les cookies." + +#: n/skins/custom_generic/login_form.pt:55 +msgid "Don't forget to logout or exit your browser when you're done." +msgstr "" +"N'oubliez pas de vous déconnecter ou de fermer votre navigateur à la fin de " +"la session." + +#: n/skins/custom_generic/login_form.pt:58 +msgid "" +"Setting the 'Remember my name' option will set a cookie with your username, " +"so that when you next log in, your user name will already be filled in for " +"you." +msgstr "" +"L'option « Se souvenir de mon login » permet de le sauvegarder dans un " +"cookie : vous nâaurez pas à le saisir de nouveau lors de votre prochaine " +"visite." + #: n/skins/custom_generic/mail_password_template.py:30 msgid "${portal_title}: Membership reminder" msgstr "${portal_title} : rappel du mot de passe" @@ -892,21 +960,10 @@ msgstr "Nouveau membre" msgid "Login" msgstr "Login" -#: n/skins/generic/gruf_macros.pt:256 n/skins/generic/gruf_macros.pt:378 -#: n/skins/generic/last_member_logs.pt:23 -#: n/skins/generic/pending_members.pt:13 -msgid "Name" -msgstr "Nom" - #: n/skins/generic/gruf_macros.pt:262 n/skins/generic/gruf_macros.pt:384 msgid "Given Name" msgstr "Prénom" -#: n/skins/generic/gruf_macros.pt:268 n/skins/generic/gruf_macros.pt:390 -#: n/skins/generic/password_reset_template.pt:28 -msgid "Password" -msgstr "Mot de passe" - #: n/skins/generic/gruf_macros.pt:274 n/skins/generic/gruf_macros.pt:396 #: n/skins/generic/password_reset_template.pt:34 msgid "Confirm" @@ -1084,10 +1141,6 @@ msgstr "Coller" msgid "Exit boxes editing" msgstr "Quitter l'édition des boîtes" -#: n/skins/generic/password_reset_form.py:26 -msgid " Login " -msgstr "Connexion" - #: n/skins/generic/password_reset_mail.py:4 msgid "Hi %(fullName)s," msgstr "Bonjour %(fullName)s," @@ -1217,13 +1270,11 @@ msgstr "Réinitialisation de mot de passe" #: n/skins/generic/request_password_reset_template.pt:12 msgid "" -"Enter your username below and click on the \"Send\" button. You will receive " -"an email with a link to reset your password." -msgstr "" -"Entrez votre login ci-dessous et cliquez sur « Envoyer ». Vous recevrez un " -"email contenant un lien pour réinitialiser votre mot de passe." +"Enter your email or your username below and click on the \"Send\" button. " +"You will receive an email with a link to reset your password." +msgstr "Entrez votre email ou votre login ci-dessous et cliquez sur « Envoyer ». Vous recevrez un email contenant un lien pour réinitialiser votre mot de passe." -#: n/skins/generic/request_password_reset_template.pt:18 +#: n/skins/generic/request_password_reset_template.pt:19 msgid "" "If this will not work for you (for example, if you forget your username or " "didn't enter your email address) send email to ${admin_email}." @@ -1233,7 +1284,7 @@ msgstr "" "un email à ${admin_email}." #. Default: "Send" -#: n/skins/generic/request_password_reset_template.pt:25 +#: n/skins/generic/request_password_reset_template.pt:26 msgid " Send " msgstr " Envoyer " @@ -2291,6 +2342,16 @@ msgstr "Ceci est la page d'accueil par défaut." msgid "Huge Folder" msgstr "Dossier" +#~ msgid "" +#~ "Enter your username below and click on the \"Send\" button. You will " +#~ "receive an email with a link to reset your password." +#~ msgstr "" +#~ "Entrez votre login ci-dessous et cliquez sur « Envoyer ». Vous recevrez " +#~ "un email contenant un lien pour réinitialiser votre mot de passe." + +#~ msgid "Forgot your password?" +#~ msgstr "Mot de passe oublié ?" + #~ msgid "Structured text" #~ msgstr "Texte structuré" diff --git a/locales/plinn.pot b/locales/plinn.pot index c4bfcfb..6a60223 100644 --- a/locales/plinn.pot +++ b/locales/plinn.pot @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: 2.0 beta 1\n" -"POT-Creation-Date: Thu Nov 28 13:09:25 2013\n" +"POT-Creation-Date: Sun Jan 19 10:49:52 2014\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: Zope 3 Developers <zope-dev@zope.org>\n" @@ -27,31 +27,31 @@ msgstr "" msgid "Object deleted" msgstr "" -#: n/Folder.py:162 +#: n/Folder.py:164 msgid "Please rename each listed object." msgstr "" -#: n/RegistrationTool.py:217 +#: n/RegistrationTool.py:228 msgid "How to reset your password on the %s website" msgstr "" -#: n/RegistrationTool.py:232 +#: n/RegistrationTool.py:243 msgid "Unknown user name. Please retry." msgstr "" -#: n/RegistrationTool.py:247 +#: n/RegistrationTool.py:258 msgid "Invalid reset password request." msgstr "" -#: n/RegistrationTool.py:253 +#: n/RegistrationTool.py:264 msgid "Your reset password request has expired. You can ask a new one." msgstr "" -#: n/RegistrationTool.py:262 +#: n/RegistrationTool.py:273 msgid "Password successfully reset." msgstr "" -#: n/RegistrationTool.py:264 +#: n/RegistrationTool.py:275 msgid "\"%s\" username not found." msgstr "" @@ -151,8 +151,24 @@ msgstr "" msgid "search between %s and %s" msgstr "" +#: n/skins/content/folder_factories.pt:18 +#: n/skins/generic/gruf_macros.pt:256 +#: n/skins/generic/gruf_macros.pt:378 +#: n/skins/generic/last_member_logs.pt:23 +#: n/skins/generic/pending_members.pt:13 +msgid "Name" +msgstr "" + +#: n/skins/content/folder_factories.pt:34 +#: n/skins/content/topic_edit_template.pt:51 +#: n/skins/generic/gruf_macros.pt:288 +#: n/skins/generic/gruf_macros.pt:327 +msgid "Add" +msgstr "" + #: n/skins/content/folder_notifications_template.pt:23 #: n/skins/content/topic_edit_template.pt:26 +#: n/skins/custom_content/document_edit_template.pt:23 #: n/skins/custom_content/event_edit_template.pt:135 #: n/skins/generic/search_results_template.pt:87 msgid "Save" @@ -200,12 +216,6 @@ msgstr "" msgid "Type:" msgstr "" -#: n/skins/content/topic_edit_template.pt:51 -#: n/skins/generic/gruf_macros.pt:288 -#: n/skins/generic/gruf_macros.pt:327 -msgid "Add" -msgstr "" - #: n/skins/control/restore_revision.py:9 msgid "%(type)s restored." msgstr "" @@ -390,27 +400,29 @@ msgstr "" msgid "%d item moved down.%d items moved down." msgstr "" -#: n/skins/custom_control/folder_rename_control.py:13 +#: n/skins/custom_control/folder_rename_control.py:24 +#: n/skins/custom_control/folder_rename_control.py:42 msgid "Item renamed." msgstr "" -#: n/skins/custom_control/folder_rename_control.py:15 +#: n/skins/custom_control/folder_rename_control.py:26 +#: n/skins/custom_control/folder_rename_control.py:44 msgid "Items renamed." msgstr "" -#: n/skins/custom_control/folder_rename_control.py:18 +#: n/skins/custom_control/folder_rename_control.py:29 msgid "This item has not been renamed: \"%s\"" msgstr "" -#: n/skins/custom_control/folder_rename_control.py:21 +#: n/skins/custom_control/folder_rename_control.py:32 msgid "These items have not been renamed: %s" msgstr "" -#: n/skins/custom_control/folder_rename_control.py:24 +#: n/skins/custom_control/folder_rename_control.py:35 msgid "Rename failed." msgstr "" -#: n/skins/custom_control/folder_rename_control.py:26 +#: n/skins/custom_control/folder_rename_control.py:39 msgid "Nothing to change." msgstr "" @@ -443,6 +455,14 @@ msgstr "" msgid "Bottom" msgstr "" +#: n/skins/custom_generic/folder_rename_template.pt:6 +msgid "Rename Items" +msgstr "" + +#: n/skins/custom_generic/folder_rename_template.pt:16 +msgid "URL" +msgstr "" + #: n/skins/custom_generic/logged_in.py:28 #: n/skins/custom_generic/logged_in_template.pt:9 msgid "Login failure" @@ -495,6 +515,47 @@ msgstr "" msgid "Change password" msgstr "" +#: n/skins/custom_generic/login_form.pt:11 +msgid "Log in" +msgstr "" + +#: n/skins/custom_generic/login_form.pt:22 +#. Default: "Login" +msgid "user_name" +msgstr "" + +#: n/skins/custom_generic/login_form.pt:28 +#: n/skins/generic/gruf_macros.pt:268 +#: n/skins/generic/gruf_macros.pt:390 +#: n/skins/generic/password_reset_template.pt:28 +msgid "Password" +msgstr "" + +#: n/skins/custom_generic/login_form.pt:37 +msgid "Remember my name." +msgstr "" + +#: n/skins/custom_generic/login_form.pt:43 +#: n/skins/generic/password_reset_form.py:26 +msgid " Login " +msgstr "" + +#: n/skins/custom_generic/login_form.pt:49 +msgid "Forgot your login or password?" +msgstr "" + +#: n/skins/custom_generic/login_form.pt:51 +msgid "Having trouble logging in? Make sure to enable cookies in your web browser." +msgstr "" + +#: n/skins/custom_generic/login_form.pt:55 +msgid "Don't forget to logout or exit your browser when you're done." +msgstr "" + +#: n/skins/custom_generic/login_form.pt:58 +msgid "Setting the 'Remember my name' option will set a cookie with your username, so that when you next log in, your user name will already be filled in for you." +msgstr "" + #: n/skins/custom_generic/mail_password_template.py:30 msgid "${portal_title}: Membership reminder" msgstr "" @@ -854,24 +915,11 @@ msgstr "" msgid "Login" msgstr "" -#: n/skins/generic/gruf_macros.pt:256 -#: n/skins/generic/gruf_macros.pt:378 -#: n/skins/generic/last_member_logs.pt:23 -#: n/skins/generic/pending_members.pt:13 -msgid "Name" -msgstr "" - #: n/skins/generic/gruf_macros.pt:262 #: n/skins/generic/gruf_macros.pt:384 msgid "Given Name" msgstr "" -#: n/skins/generic/gruf_macros.pt:268 -#: n/skins/generic/gruf_macros.pt:390 -#: n/skins/generic/password_reset_template.pt:28 -msgid "Password" -msgstr "" - #: n/skins/generic/gruf_macros.pt:274 #: n/skins/generic/gruf_macros.pt:396 #: n/skins/generic/password_reset_template.pt:34 @@ -1054,10 +1102,6 @@ msgstr "" msgid "Exit boxes editing" msgstr "" -#: n/skins/generic/password_reset_form.py:26 -msgid " Login " -msgstr "" - #: n/skins/generic/password_reset_mail.py:4 msgid "Hi %(fullName)s," msgstr "" @@ -1171,14 +1215,14 @@ msgid "Password reset" msgstr "" #: n/skins/generic/request_password_reset_template.pt:12 -msgid "Enter your username below and click on the \"Send\" button. You will receive an email with a link to reset your password." +msgid "Enter your email or your username below and click on the \"Send\" button. You will receive an email with a link to reset your password." msgstr "" -#: n/skins/generic/request_password_reset_template.pt:18 +#: n/skins/generic/request_password_reset_template.pt:19 msgid "If this will not work for you (for example, if you forget your username or didn't enter your email address) send email to ${admin_email}." msgstr "" -#: n/skins/generic/request_password_reset_template.pt:25 +#: n/skins/generic/request_password_reset_template.pt:26 #. Default: "Send" msgid " Send " msgstr "" diff --git a/skins/custom_generic/login_form.pt b/skins/custom_generic/login_form.pt index 3ab0724..09d9729 100644 --- a/skins/custom_generic/login_form.pt +++ b/skins/custom_generic/login_form.pt @@ -6,7 +6,7 @@ <meta http-equiv="content-type" content="text/html;charset=UTF-8"/> </head> <body> - <div metal:fill-slot="main_no_tabs" i18n:domain="cmf_default"> + <div metal:fill-slot="main_no_tabs" i18n:domain="plinn"> <div id="Desktop"> <h1 i18n:translate="">Log in</h1> <form action="" method="post" tal:attributes="action string:${here/portal_url}/logged_in"> @@ -46,7 +46,7 @@ </table> </form> <p> - <a href="" tal:attributes="href string:${here/portal_url}/request_password_reset_form" i18n:translate="">Forgot your password?</a> + <a href="" tal:attributes="href string:${here/portal_url}/request_password_reset_form" i18n:translate="">Forgot your login or password?</a> </p> <p i18n:translate=""> Having trouble logging in? Make sure to enable cookies in your web diff --git a/skins/generic/request_password_reset_template.pt b/skins/generic/request_password_reset_template.pt index 46106ca..3604a2b 100644 --- a/skins/generic/request_password_reset_template.pt +++ b/skins/generic/request_password_reset_template.pt @@ -10,8 +10,9 @@ <div id="Desktop" tal:define="ptool here/portal_properties"> <h1 i18n:translate="">Password reset</h1> <p i18n:translate=""> - Enter your username below and click on the "Send" button. You will - receive an email with a link to reset your password. + Enter your email or your username below and click on the "Send" + button. You will receive an email with a link to reset your + password. </p> <p i18n:translate=""> If this will not work for you (for example, if you forget your -- 2.20.1