From 292a91bf78532d43a81bc528307ded8c6733d130 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Wed, 24 Jul 2013 05:08:22 +0200
Subject: [PATCH 01/16] Scroll et shake du message d'alerte.
---
skins/ajax_scripts/ajax_form_manager.js | 73 +++++++++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/skins/ajax_scripts/ajax_form_manager.js b/skins/ajax_scripts/ajax_form_manager.js
index d91c440..bdea518 100644
--- a/skins/ajax_scripts/ajax_form_manager.js
+++ b/skins/ajax_scripts/ajax_form_manager.js
@@ -429,6 +429,14 @@ FormManager.prototype.loadResponse = function(req) {
onAfterPopulate = eval(onAfterPopulate);
}
onAfterPopulate();
+ this.scrollToPortalMessage();
+};
+
+FormManager.prototype.scrollToPortalMessage = function() {
+ var psm = document.getElementById('DesktopStatusBar');
+ var msgOffset = psm.offsetTop;
+ smoothScroll(window.scrollY, msgOffset);
+ shake(psm, 10, 1000);
};
FormManager.prototype._fitField = function(evt) {
@@ -450,4 +458,69 @@ function initForms(baseElement, lazy) {
}
}
+function smoothScroll(from, to) {
+ var intervalId;
+ var step = 25;
+ var pos = from;
+ var dir;
+ if (to > from) {
+ dir = 1;
+ }
+ else {
+ dir = -1;
+ }
+
+ var jump = function() {
+ window.scroll(0, pos);
+ pos = pos + step * dir;
+ if ((dir === 1 && pos >= to) ||
+ (dir === -1 && pos <= to)) {
+ window.clearInterval(intervalId);
+ window.scroll(0, to);
+ }
+ }
+ intervalId = window.setInterval(jump, 10);
+}
+
+/* adapted from http://xahlee.info/js/js_shake_box.html */
+function shake(e, distance, time) {
+ // Handle arguments
+ if (!time) time = 500;
+ if (!distance) distance = 5;
+
+ // Save the original style of e, Make e relatively positioned, Note the animation start time, Start the animation
+ var originalStyle = e.style.cssText;
+ e.style.position = "relative";
+ var start = (new Date()).getTime();
+ animate();
+
+ // This function checks the elapsed time and updates the position of e.
+ // If the animation is complete, it restores e to its original state.
+ // Otherwise, it updates e's position and schedules itself to run again.
+ function animate() {
+ var now = (new Date()).getTime();
+ // Get current time
+ var elapsed = now-start;
+ // How long since we started
+ var fraction = elapsed/time;
+ // What fraction of total time?
+ if (fraction < 1) {
+ // If the animation is not yet complete
+ // Compute the x position of e as a function of animation
+ // completion fraction. We use a sinusoidal function, and multiply
+ // the completion fraction by 4pi, so that it shakes back and
+ // forth twice.
+ var x = distance * Math.sin(fraction*8*Math.PI);
+ e.style.left = x + "px";
+ // Try to run again in 25ms or at the end of the total time.
+ // We're aiming for a smooth 40 frames/second animation.
+ setTimeout(animate, Math.min(25, time-elapsed));
+ }
+ else {
+ // Otherwise, the animation is complete
+ e.style.cssText = originalStyle // Restore the original style
+ }
+ }
+}
+
}());
--
2.20.1
From eda66a51fdc314fc63a13c5a81de440216a87c5c Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Wed, 24 Jul 2013 05:17:12 +0200
Subject: [PATCH 02/16] Corrections syntaxiques.
---
skins/ajax_scripts/ajax_form_manager.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/skins/ajax_scripts/ajax_form_manager.js b/skins/ajax_scripts/ajax_form_manager.js
index bdea518..03ebdd8 100644
--- a/skins/ajax_scripts/ajax_form_manager.js
+++ b/skins/ajax_scripts/ajax_form_manager.js
@@ -478,7 +478,7 @@ function smoothScroll(from, to) {
window.clearInterval(intervalId);
window.scroll(0, to);
}
- }
+ };
intervalId = window.setInterval(jump, 10);
}
@@ -518,7 +518,7 @@ function shake(e, distance, time) {
}
else {
// Otherwise, the animation is complete
- e.style.cssText = originalStyle // Restore the original style
+ e.style.cssText = originalStyle; // Restore the original style
}
}
}
--
2.20.1
From 05761d9410d995e6602bd5d5f6e45d9dabbdd9b9 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Mon, 29 Jul 2013 14:03:05 +0200
Subject: [PATCH 03/16] =?utf8?q?La=20concat=C3=A9nation=20va=20=C3=AAtre?=
=?utf8?q?=20faite=20au=20dernier=20moment.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
locales/plinn.pot | 872 ----------------------------------------------
1 file changed, 872 deletions(-)
diff --git a/locales/plinn.pot b/locales/plinn.pot
index 845156d..d702b38 100644
--- a/locales/plinn.pot
+++ b/locales/plinn.pot
@@ -1242,875 +1242,3 @@ msgstr ""
msgid "Plain text"
msgstr ""
-# from plinn-manual
-
-msgid "${month}/${day}/${year} ${hour}:${minute}:${second}"
-msgstr ""
-
-msgid "1 Day"
-msgstr ""
-
-msgid "2 Days"
-msgstr ""
-
-msgid "5 Days"
-msgstr ""
-
-msgid "1 Week"
-msgstr ""
-
-msgid "2 Weeks"
-msgstr ""
-
-msgid "1 Month"
-msgstr ""
-
-msgid "3 Months"
-msgstr ""
-
-msgid "6 Months"
-msgstr ""
-
-msgid "1 Year"
-msgstr ""
-
-msgid "2 years"
-msgstr ""
-
-msgid "Action Box Block"
-msgstr ""
-
-msgid "Action box settings"
-msgstr ""
-
-msgid "Activity block"
-msgstr ""
-
-msgid "Add a document..."
-msgstr ""
-
-msgid "Add an activity"
-msgstr ""
-
-msgid "Add node"
-msgstr ""
-
-msgid "Advanced search"
-msgstr ""
-
-msgid "Anonymous registration"
-msgstr ""
-
-msgid "Appointment"
-msgstr ""
-
-msgid "Append Roles"
-msgstr ""
-
-msgid "Append or remove groups"
-msgstr ""
-
-msgid "Append or remove members"
-msgstr ""
-
-msgid "April"
-msgstr ""
-
-msgid "April_abbr"
-msgstr ""
-
-msgid "Assign local roles: Search Members"
-msgstr ""
-
-msgid "Assign local roles: Search Results"
-msgstr ""
-
-msgid "August"
-msgstr ""
-
-msgid "August_abbr"
-msgstr ""
-
-msgid "B"
-msgstr ""
-
-msgid "Backlinks"
-msgstr ""
-
-msgid "Base folder of members' folders"
-msgstr ""
-
-msgid "Box title:"
-msgstr ""
-
-msgid "catalog_index_allowedRolesAndUsers"
-msgstr ""
-
-msgid "catalog_index_created"
-msgstr ""
-
-msgid "catalog_index_Creator"
-msgstr ""
-
-msgid "catalog_index_Date"
-msgstr ""
-
-msgid "catalog_index_DateTimeOriginal"
-msgstr ""
-
-msgid "catalog_index_Description"
-msgstr ""
-
-msgid "catalog_index_effective"
-msgstr ""
-
-msgid "catalog_index_expires"
-msgstr ""
-
-msgid "catalog_index_fTitle"
-msgstr ""
-
-msgid "catalog_index_getId"
-msgstr ""
-
-msgid "catalog_index_listCreators"
-msgstr ""
-
-msgid "catalog_index_modified"
-msgstr ""
-
-msgid "catalog_index_path"
-msgstr ""
-
-msgid "catalog_index_portal_type"
-msgstr ""
-
-msgid "catalog_index_review_state"
-msgstr ""
-
-msgid "catalog_index_SearchableText"
-msgstr ""
-
-msgid "catalog_index_Subject"
-msgstr ""
-
-msgid "catalog_index_Title"
-msgstr ""
-
-msgid "Categories:"
-msgstr ""
-
-msgid "Change"
-msgstr ""
-
-msgid "Change image:"
-msgstr ""
-
-msgid "Click here to modify roles..."
-msgstr ""
-
-msgid "Click to get raw image"
-msgstr ""
-
-msgid "Click to see image full-size"
-msgstr ""
-
-msgid "Close"
-msgstr ""
-
-msgid "Collapse"
-msgstr ""
-
-msgid "Comment"
-msgstr ""
-
-msgid "Configure ${portal_calendar} Tool"
-msgstr ""
-
-msgid "Container block"
-msgstr ""
-
-msgid "Contributor"
-msgstr ""
-
-msgid "Convention"
-msgstr ""
-
-msgid "Copy"
-msgstr ""
-
-msgid "Create a mosaic document"
-msgstr ""
-
-msgid "Saved changes."
-msgstr ""
-
-msgid "Import a photo zipped file"
-msgstr ""
-
-msgid "send_email"
-msgstr ""
-
-msgid "Set Mapping"
-msgstr ""
-
-msgid "shared_submit"
-msgstr ""
-
-msgid "sort_by_index_created"
-msgstr ""
-
-msgid "sort_by_index_DateTimeOriginal"
-msgstr ""
-
-msgid "Criteria"
-msgstr ""
-
-msgid "coordonateur"
-msgstr ""
-
-msgid "Currently assigned local roles"
-msgstr ""
-
-msgid "DateTimeOriginal"
-msgstr ""
-
-msgid "Day"
-msgstr ""
-
-msgid "December"
-msgstr ""
-
-msgid "December_abbr"
-msgstr ""
-
-msgid "Delete"
-msgstr ""
-
-msgid "depublish"
-msgstr ""
-
-msgid "depublish_to_private"
-msgstr ""
-
-msgid "depublish_to_shared"
-msgstr ""
-
-msgid "Direct_publish"
-msgstr ""
-
-msgid "Directories"
-msgstr ""
-
-msgid "Do you realy want to delete ?"
-msgstr ""
-
-msgid "confirm_layer_delete"
-msgstr ""
-
-msgid "eleve"
-msgstr ""
-
-msgid "Empty image: upload an image file in \"Edit\" tab."
-msgstr ""
-
-msgid "ExifImageWidth"
-msgstr ""
-
-msgid "ExifImageHeight"
-msgstr ""
-
-msgid "Expand"
-msgstr ""
-
-msgid "Export as zip"
-msgstr ""
-
-msgid "ExposureTime"
-msgstr ""
-
-msgid "February"
-msgstr ""
-
-msgid "February_abbr"
-msgstr ""
-
-msgid "File"
-msgstr ""
-
-msgid "File Block"
-msgstr ""
-
-msgid "Filter (meta_type list) :"
-msgstr ""
-
-msgid "FNumber"
-msgstr ""
-
-msgid "FocalLength"
-msgstr ""
-
-msgid "Folder contents"
-msgstr ""
-
-msgid "Folders are created upon first login."
-msgstr ""
-
-msgid "Fri"
-msgstr ""
-
-msgid "Friday"
-msgstr ""
-
-msgid "Friendly Date Criterion"
-msgstr ""
-
-msgid "Global actions"
-msgstr ""
-
-msgid "Group folder area"
-msgstr ""
-
-msgid "Group's roles settings"
-msgstr ""
-
-msgid "GroupManager"
-msgstr ""
-
-msgid "Height:"
-msgstr ""
-
-msgid "History"
-msgstr ""
-
-msgid "Image block"
-msgstr ""
-
-msgid "Implicitly member of groups"
-msgstr ""
-
-msgid "Import"
-msgstr ""
-
-msgid "Insert file"
-msgstr ""
-
-msgid "Insert image"
-msgstr ""
-
-msgid "Insert inside text"
-msgstr ""
-
-msgid "Insert new block:"
-msgstr ""
-
-msgid "Integer Criterion"
-msgstr ""
-
-msgid "ISOSpeedRatings"
-msgstr ""
-
-msgid "January"
-msgstr ""
-
-msgid "January_abbr"
-msgstr ""
-
-msgid "July"
-msgstr ""
-
-msgid "July_abbr"
-msgstr ""
-
-msgid "June"
-msgstr ""
-
-msgid "June_abbr"
-msgstr ""
-
-msgid "immediately"
-msgstr ""
-
-msgid "KB"
-msgstr ""
-
-msgid "lang_iso"
-msgstr ""
-
-msgid "Layer"
-msgstr ""
-
-msgid "Left boxes"
-msgstr ""
-
-msgid "List Criterion"
-msgstr ""
-
-msgid "List Folder"
-msgstr ""
-
-msgid "List parent folder"
-msgstr ""
-
-msgid "Listen"
-msgstr ""
-
-msgid "Loading progress..."
-msgstr ""
-
-msgid "Local Roles"
-msgstr ""
-
-msgid "MB"
-msgstr ""
-
-msgid "make_private"
-msgstr ""
-
-msgid "Manage Groups"
-msgstr ""
-
-msgid "Manage boxes"
-msgstr ""
-
-msgid "Manage group's datas"
-msgstr ""
-
-msgid "Manage group's members"
-msgstr ""
-
-msgid "Manage portal's groups"
-msgstr ""
-
-msgid "Manage portal's members"
-msgstr ""
-
-msgid "Manager"
-msgstr ""
-
-msgid "March"
-msgstr ""
-
-msgid "March_abbr"
-msgstr ""
-
-msgid "May"
-msgstr ""
-
-msgid "May_abbr"
-msgstr ""
-
-msgid "Meeting"
-msgstr ""
-
-msgid "Member"
-msgstr ""
-
-msgid "Members"
-msgstr ""
-
-msgid "Members folder id"
-msgstr ""
-
-msgid "Member of groups"
-msgstr ""
-
-msgid "Member properties"
-msgstr ""
-
-msgid "member_creation_area_explanations"
-msgstr ""
-
-msgid "member_creation_area_title"
-msgstr ""
-
-msgid "Membership role mappings"
-msgstr ""
-
-msgid "membership_role_mapping_explanations"
-msgstr ""
-
-msgid "Metadata"
-msgstr ""
-
-msgid "Sort Criterion"
-msgstr ""
-
-msgid "sort_by_index_modified"
-msgstr ""
-
-msgid "Modify"
-msgstr ""
-
-msgid "Mon"
-msgstr ""
-
-msgid "Monday"
-msgstr ""
-
-msgid "Move down"
-msgstr ""
-
-msgid "Move left"
-msgstr ""
-
-msgid "Move right"
-msgstr ""
-
-msgid "Move up"
-msgstr ""
-
-msgid "never"
-msgstr ""
-
-msgid "New layer"
-msgstr ""
-
-msgid "No document"
-msgstr ""
-
-msgid "Node block"
-msgstr ""
-
-msgid "November"
-msgstr ""
-
-msgid "November_abbr"
-msgstr ""
-
-msgid "Now"
-msgstr ""
-
-msgid "Number of br:"
-msgstr ""
-
-msgid "October"
-msgstr ""
-
-msgid "October_abbr"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "person selected"
-msgstr ""
-
-msgid "persons selected"
-msgstr ""
-
-msgid "Play"
-msgstr ""
-
-msgid "Portal manager registration"
-msgstr ""
-
-msgid "Portal Role"
-msgstr ""
-
-msgid "Portlets"
-msgstr ""
-
-msgid "Preview..."
-msgstr ""
-
-msgid "private_submit"
-msgstr ""
-
-msgid "Properties of: ${memberFullName}"
-msgstr ""
-
-msgid "publish"
-msgstr ""
-
-msgid "Reader"
-msgstr ""
-
-msgid "Right boxes"
-msgstr ""
-
-msgid "Remove layer"
-msgstr ""
-
-msgid "Reply..."
-msgstr ""
-
-msgid "Represent a simple field-match for a string value."
-msgstr ""
-
-msgid "retract_to_private"
-msgstr ""
-
-msgid "retract_to_shared"
-msgstr ""
-
-msgid "Reviewed registration"
-msgstr ""
-
-msgid "Reviewer"
-msgstr ""
-
-msgid "Role(s)"
-msgstr ""
-
-msgid "Role mapping mismatch : click Validate to solve this problem !"
-msgstr ""
-
-msgid "Roles to assign:"
-msgstr ""
-
-msgid "Root object expression:"
-msgstr ""
-
-msgid "Sat"
-msgstr ""
-
-msgid "Saturday"
-msgstr ""
-
-msgid "Search"
-msgstr ""
-
-msgid "Search by"
-msgstr ""
-
-msgid "Search Term"
-msgstr ""
-
-msgid "Section block"
-msgstr ""
-
-msgid "Select date indexes"
-msgstr ""
-
-msgid "Select default time range displayed in calendar week view"
-msgstr ""
-
-msgid "Select member area folder type to construct:"
-msgstr ""
-
-msgid "Select Member(s) and a role(s) to assign:"
-msgstr ""
-
-msgid "Select registration mode"
-msgstr ""
-
-msgid "September"
-msgstr ""
-
-msgid "September_abbr"
-msgstr ""
-
-msgid "Set Roles"
-msgstr ""
-
-msgid "share"
-msgstr ""
-
-msgid "Show layer"
-msgstr ""
-
-msgid "Slide show"
-msgstr ""
-
-msgid "Social Event"
-msgstr ""
-
-msgid "Sorry, no members matched your search."
-msgstr ""
-
-msgid "Source file:"
-msgstr ""
-
-msgid "Spacer block"
-msgstr ""
-
-msgid "(start and end time in hour)"
-msgstr ""
-
-msgid "Status history"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "String Criterion"
-msgstr ""
-
-msgid "Sun"
-msgstr ""
-
-msgid "Sunday"
-msgstr ""
-
-msgid "Text block"
-msgstr ""
-
-msgid "These users currently have local roles assigned in this folder:"
-msgstr ""
-
-
-msgid "This folder has to be in the same container as the membership tool."
-msgstr ""
-
-msgid "Thu"
-msgstr ""
-
-msgid "Thursday"
-msgstr ""
-
-msgid "Title :"
-msgstr ""
-
-msgid "Tree Box Block"
-msgstr ""
-
-msgid "Tree box settings"
-msgstr ""
-
-msgid "Tree viewed by: ${memberFullName}"
-msgstr ""
-
-msgid "Tue"
-msgstr ""
-
-msgid "Tuesday"
-msgstr ""
-
-msgid "Turn folder creation off"
-msgstr ""
-
-msgid "Turn folder creation on"
-msgstr ""
-
-msgid "Two images block"
-msgstr ""
-
-msgid "Upload"
-msgstr ""
-
-msgid "User"
-msgstr ""
-
-msgid "User Folder-defined Role"
-msgstr ""
-
-msgid "UserManager"
-msgstr ""
-
-msgid "Untitled-"
-msgstr ""
-
-msgid "Validate pending documents"
-msgstr ""
-
-msgid "Visitor"
-msgstr ""
-
-msgid "View"
-msgstr ""
-
-msgid "View history"
-msgstr ""
-
-msgid "View local roles"
-msgstr ""
-
-msgid "Wed"
-msgstr ""
-
-msgid "Wednesday"
-msgstr ""
-
-msgid "Width:"
-msgstr ""
-
-msgid "width / height:"
-msgstr ""
-
-msgid "Work"
-msgstr ""
-
-msgid "Workflow chain"
-msgstr ""
-
-msgid "You are not allowed to delete: "
-msgstr ""
-
-msgid "collaborator"
-msgstr ""
-
-msgid "collapse"
-msgstr ""
-
-msgid "expand"
-msgstr ""
-
-msgid "file type:"
-msgstr ""
-
-msgid "Hide layer"
-msgstr ""
-
-msgid "Home"
-msgstr ""
-
-msgid "name"
-msgstr ""
-
-msgid "No Folders are created."
-msgstr ""
-
-msgid ""
-"Put a friendly interface on date range searches, like 'where effective "
-"date is less than 5 days old'."
-msgstr ""
-
-msgid ""
-"Represent a criterion which is a list of values (for an 'OR' search)."
-msgstr ""
-
-msgid ""
-"Represent a simple field-match for an integer value, including catalog "
-"range searches."
-msgstr ""
-
-msgid ""
-"Represent a mock criterion, to allow spelling the sort order and reversal "
-"items in a catalog query."
-msgstr ""
-
-msgid ""
-"WARNING: The current portal type is unknown. You must change the value to "
-"enable the member area creation."
-msgstr ""
-
-msgid "Approve"
-msgstr ""
-
-msgid "approved"
-msgstr ""
-
-msgid "Disapprove"
-msgstr ""
-
-msgid "pending"
-msgstr ""
-
-msgid "private"
-msgstr ""
-
-msgid "items matching"
-msgstr ""
-
-msgid "item matching"
-msgstr ""
-
-msgid "mail_to"
-msgstr ""
-
-msgid "mail_cc"
-msgstr ""
-
-msgid "mail_bcc"
-msgstr ""
--
2.20.1
From 667f7af1aa8ad5a69af7d5d93c35e495db295ddb Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Mon, 29 Jul 2013 14:22:32 +0200
Subject: [PATCH 04/16] =?utf8?q?Mise=20=C3=A0=20jour=20du=20syst=C3=A8me?=
=?utf8?q?=20de=20localisation.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
compile-i18n.sh | 4 +
locales/en/LC_MESSAGES/plinn.po | 1078 ++++++++++-------
locales/fr/LC_MESSAGES/plinn.po | 1034 +++++++++--------
locales/plinn-manual.pot | 3 -
locales/plinn.pot | 1918 +++++++++++++++++++++++--------
update-i18n.sh | 9 +
6 files changed, 2645 insertions(+), 1401 deletions(-)
create mode 100755 compile-i18n.sh
create mode 100755 update-i18n.sh
diff --git a/compile-i18n.sh b/compile-i18n.sh
new file mode 100755
index 0000000..6b84d39
--- /dev/null
+++ b/compile-i18n.sh
@@ -0,0 +1,4 @@
+#! /bin/sh
+
+msgfmt -o locales/fr/LC_MESSAGES/plinn.mo locales/fr/LC_MESSAGES/plinn.po
+msgfmt -o locales/en/LC_MESSAGES/plinn.mo locales/en/LC_MESSAGES/plinn.po
diff --git a/locales/en/LC_MESSAGES/plinn.po b/locales/en/LC_MESSAGES/plinn.po
index 2937bf6..aa5bd56 100644
--- a/locales/en/LC_MESSAGES/plinn.po
+++ b/locales/en/LC_MESSAGES/plinn.po
@@ -1,10 +1,11 @@
msgid ""
msgstr ""
"Project-Id-Version: Plinn 2.0\n"
-"POT-Creation-Date: Thu Dec 6 14:58:49 2007\n"
+"POT-Creation-Date: Mon Jul 29 14:16:13 2013\n"
"PO-Revision-Date: 2007-10-17 14:43+0200\n"
"Last-Translator: Benoît PIN\n"
"Language-Team: CRI http://cri.ensmp.fr\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -15,74 +16,53 @@ msgstr ""
"Domain: plinn\n"
"X-Is-Fallback-For: en-us\n"
-#: profiles/default/actions.xml:102
-msgid "List"
-msgstr "List"
-
-#: profiles/default/actions.xml:11 skins/generic/gruf_macros.pt:250
-#: skins/generic/gruf_macros.pt:365
-msgid "Login"
-msgstr ""
-
-#: profiles/default/actions.xml:116
-msgid "Manage Boxes"
-msgstr ""
-
-#: profiles/default/actions.xml:127 skins/generic/send_email_form.pt:23
-msgid "Send an email"
-msgstr ""
-
-#: profiles/default/actions.xml:138
-msgid "Undo"
-msgstr ""
-
-#: profiles/default/actions.xml:149
-msgid "Configure Portal"
-msgstr ""
-
-#: profiles/default/actions.xml:176
-msgid "Add comment..."
+#: n/EmailNotification.py:38
+msgid "Object deleted"
msgstr ""
-#: profiles/default/actions.xml:190
-msgid "Syndicate"
+#: n/Folder.py:162
+msgid "Please rename each listed object."
msgstr ""
-#: profiles/default/actions.xml:22
-msgid "My stuff"
+#: n/MembershipTool.py:406
+msgid "%s's Home"
msgstr ""
-#: profiles/default/actions.xml:33
-msgid "Add to favorites"
+#: n/MembershipTool.py:407
+msgid "%s's front page"
msgstr ""
-#: profiles/default/actions.xml:44
-msgid "My favorites"
+#: n/RegistrationTool.py:217
+msgid "Invalid reset password request."
msgstr ""
-#: profiles/default/actions.xml:55
-msgid "Preferences"
+#: n/RegistrationTool.py:222
+msgid "Invalid userid."
msgstr ""
-#: profiles/default/actions.xml:66
-msgid "Log out"
+#: n/RegistrationTool.py:226
+msgid "Your reset password request has expired. You can ask a new one."
msgstr ""
-#: profiles/default/actions.xml:77
-msgid "Logged in"
+#: n/RegistrationTool.py:235
+msgid "Password successfully resetted."
msgstr ""
-#: profiles/default/actions.xml:88
-msgid "Join"
+#: n/RegistrationTool.py:237
+msgid "\"%s\" username not found."
msgstr ""
-#: profiles/default/workflows/default_workflow/scripts/sendNotificationEmail.py:53
-#: profiles/default/workflows/folder_workflow/scripts/sendNotificationEmail.py:53
-#: profiles/default/workflows/portfolio_workflow/scripts/sendNotificationEmail.py:53
+#: n/profiles/default/workflows/default_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/default/workflows/folder_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/default/workflows/portfolio_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/photo/workflows/default_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/photo/workflows/folder_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/photo/workflows/portfolio_workflow/scripts/sendNotificationEmail.py:52
msgid "Document state change notificaction"
msgstr ""
-#: profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:36
+#: n/profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:35
+#: n/profiles/photo/workflows/member_workflow/scripts/sendNotificationEmail.py:35
msgid ""
"\n"
"You have been registered as a member of \"%(portal_title)s\", which\n"
@@ -90,938 +70,1189 @@ msgid ""
"the community.\n"
msgstr ""
-#: profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:44
+#: n/profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:43
+#: n/profiles/photo/workflows/member_workflow/scripts/sendNotificationEmail.py:43
msgid ""
"You will receive an other mail with your randomly-generated\n"
"password. Once you have logged in with this password, you\n"
"may change it to anything you like."
msgstr ""
-#: profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:56
+#: n/profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:55
+#: n/profiles/photo/workflows/member_workflow/scripts/sendNotificationEmail.py:55
msgid "your registration has been accepted"
msgstr ""
-#: skins/content/cal_calendar_view.pt:25
+#: n/profiles/photo/workflows/order_workflow/scripts/sendNotificationEmail.py:51
+msgid "Tracking number"
+msgstr ""
+
+#: n/profiles/photo/workflows/order_workflow/scripts/sendNotificationEmail.py:55
+msgid "Tracking url"
+msgstr ""
+
+#: n/skins/content/cal_calendar_view.pt:30
msgid "Add a new event..."
msgstr ""
-#: skins/content/cal_calendar_view.pt:32 skins/content/cal_calendar_view.pt:35
+#: n/skins/content/cal_calendar_view.pt:37
+#: n/skins/content/cal_calendar_view.pt:40
msgid "Remove event..."
msgstr ""
-#: skins/content/cal_calendar_view.pt:45
+#: n/skins/content/cal_calendar_view.pt:50
msgid "The next click over an event will remove it!"
msgstr ""
-#: skins/content/cal_calendar_view.pt:46
+#: n/skins/content/cal_calendar_view.pt:51
msgid "Cancel delete mode"
msgstr ""
-#: skins/content/content_info.pt:16 skins/content/file_info.pt:12
-#: skins/content/list_pending_contents.pt:31
-#: skins/custom_generic/talkback_tree.pt:65 skins/generic/gruf_macros.pt:51
-#: skins/generic/gruf_macros.pt:307 skins/generic/header_widgets.pt:18
-msgid "Title"
+#: n/skins/content/changes_history_template.pt:24
+msgid "« later revisions"
+msgstr ""
+
+#: n/skins/content/changes_history_template.pt:28
+msgid "earlier revisions »"
+msgstr ""
+
+#: n/skins/content/changes_history_template.pt:37
+msgid "user"
msgstr ""
-#: skins/content/content_info.pt:20 skins/content/file_info.pt:20
-msgid "Created"
+#: n/skins/content/changes_history_template.pt:63
+#: n/skins/generic/load_revision.py:29
+msgid "nobody"
msgstr ""
-#: skins/content/content_info.pt:24 skins/content/file_info.pt:24
-msgid "Modified"
+#: n/skins/content/changes_history_template.pt:70
+msgid "Compare"
msgstr ""
-#: skins/content/content_info.pt:9 skins/content/file_info.pt:5
-msgid "Preview:"
+#: n/skins/content/changes_history_template.pt:72
+msgid "Please select one revision per column to compare."
msgstr ""
-#: skins/content/dateCriterionResolvedDescription.py:17
+#: n/skins/content/dateCriterionResolvedDescription.py:15
msgid "search from the beginning of the world until %s"
msgstr ""
-#: skins/content/dateCriterionResolvedDescription.py:19
+#: n/skins/content/dateCriterionResolvedDescription.py:17
msgid "search from %s and the end of the world"
msgstr ""
-#: skins/content/dateCriterionResolvedDescription.py:21
+#: n/skins/content/dateCriterionResolvedDescription.py:19
msgid "search between %s and %s"
msgstr ""
-#: skins/content/file_info.pt:16
-msgid "Type"
-msgstr ""
-
-#: skins/content/file_preview.pt:15
-msgid "No preview available for this file"
+#: n/skins/content/folder_notifications_template.pt:23
+#: n/skins/content/topic_edit_template.pt:26
+#: n/skins/custom_content/event_edit_template.pt:135
+#: n/skins/generic/search_results_template.pt:87
+msgid "Save"
msgstr ""
-#: skins/content/list_pending_contents.pt:23
+#: n/skins/content/list_pending_contents.pt:23
msgid "Pending documents"
msgstr ""
-#: skins/content/list_pending_contents.pt:37
+#: n/skins/content/list_pending_contents.pt:37
msgid "Submit by:"
msgstr ""
-#: skins/content/list_pending_contents.pt:42 skins/generic/wf_macros.pt:16
-msgid "Date"
-msgstr ""
-
-#: skins/content/list_pending_contents.pt:52
-#: skins/content/topic_edit_template.pt:32
-#: skins/content/topic_edit_template.pt:40
-#: skins/custom_content/event_edit_template.pt:33
-#: skins/custom_content/event_view.pt:24
-#: skins/custom_content/friendlydatec_editform.pt:12
-#: skins/custom_content/friendlydatec_editform.pt:27
-#: skins/custom_content/friendlydatec_editform.pt:45
-#: skins/custom_content/listc_edit.pt:13 skins/custom_content/listc_edit.pt:26
-#: skins/custom_content/sic_edit.pt:10 skins/custom_content/sic_edit.pt:23
-#: skins/custom_content/sort_edit.pt:12 skins/custom_content/sort_edit.pt:23
-#: skins/custom_content/ssc_edit.pt:12 skins/custom_content/ssc_edit.pt:15
-#: skins/custom_content/topic_view.pt:25
-#: skins/custom_generic/talkback_tree.pt:15
-#: skins/custom_generic/talkback_tree.pt:16
-#: skins/custom_generic/talkback_tree.pt:36
-#: skins/custom_generic/viewThreadsAtBottom.pt:15
-#: skins/generic/calendar_macros.pt:26 skins/generic/calendar_macros.pt:30
-#: skins/generic/calendar_macros.pt:87 skins/generic/calendar_macros.pt:88
-#: skins/generic/gruf_macros.pt:32 skins/generic/gruf_macros.pt:93
-#: skins/generic/gruf_macros.pt:103 skins/generic/gruf_macros.pt:111
-#: skins/generic/gruf_macros.pt:455 skins/generic/gruf_macros.pt:456
-#: skins/generic/gruf_macros.pt:462 skins/generic/header_widgets.pt:189
-#: skins/generic/last_member_logs.pt:1 skins/generic/local_roles_macros.pt:18
-#: skins/generic/local_roles_macros.pt:39
-#: skins/generic/local_roles_macros.pt:44
-#: skins/generic/local_roles_macros.pt:84
-#: skins/generic/local_roles_macros.pt:99
-#: skins/generic/local_roles_macros.pt:122
-#: skins/generic/local_roles_macros.pt:126
-#: skins/generic/local_roles_macros.pt:160
-#: skins/generic/local_roles_macros.pt:174 skins/generic/send_email_form.pt:33
-#: skins/generic/send_email_form.pt:56 skins/generic/tabs.pt:25
-#: skins/generic/tabs.pt:42 skins/generic/wf_macros.pt:27
-msgid "${DYNAMIC_CONTENT}"
+#: n/skins/content/no_preview.pt:11
+msgid "No preview available for this file"
msgstr ""
-#: skins/content/topic_edit_template.pt:12
+#: n/skins/content/topic_edit_template.pt:16
msgid "Reuse criteria from parent:"
msgstr ""
-#: skins/content/topic_edit_template.pt:13
+#: n/skins/content/topic_edit_template.pt:17
msgid "yes"
msgstr ""
-#: skins/content/topic_edit_template.pt:14
+#: n/skins/content/topic_edit_template.pt:18
msgid "no"
msgstr ""
-#: skins/content/topic_edit_template.pt:22
-#: skins/custom_content/event_edit_template.pt:135
-msgid "Save"
-msgstr ""
-
-#: skins/content/topic_edit_template.pt:23 skins/generic/gruf_macros.pt:211
-#: skins/generic/gruf_macros.pt:235
+#: n/skins/content/topic_edit_template.pt:27
+#: n/skins/generic/gruf_macros.pt:211 n/skins/generic/gruf_macros.pt:235
msgid "Remove selected"
msgstr ""
-#: skins/content/topic_edit_template.pt:26
+#: n/skins/content/topic_edit_template.pt:30
msgid "New criterion:"
msgstr ""
-#: skins/content/topic_edit_template.pt:29
+#: n/skins/content/topic_edit_template.pt:33
msgid "Name:"
msgstr ""
-#: skins/content/topic_edit_template.pt:37
+#: n/skins/content/topic_edit_template.pt:41
msgid "Type:"
msgstr ""
-#: skins/content/topic_edit_template.pt:47 skins/generic/gruf_macros.pt:288
-#: skins/generic/gruf_macros.pt:327
+#: 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 ""
-#: skins/custom_content/discussionitem_view.pt:23
-msgid "Above in thread:"
+#: n/skins/control/restore_revision.py:9
+msgid "%(type)s restored."
msgstr ""
-#: skins/custom_content/event_edit_template.pt:115
-#: skins/custom_content/event_view.pt:53 skins/generic/gruf_macros.pt:57
-#: skins/generic/gruf_macros.pt:313 skins/generic/header_widgets.pt:24
-msgid "Description"
+#: n/skins/control/save_search_as_topic.py:20
+msgid "Topic added."
msgstr ""
-#: skins/custom_content/event_edit_template.pt:121
-#: skins/custom_content/event_view.pt:29
-msgid "Event URL"
+#: n/skins/custom_content/content_status_history.pt:9
+#: n/skins/custom_content/transition_form.pt:46
+msgid "Reviewing history"
+msgstr ""
+
+#: n/skins/custom_content/content_status_history.pt:12
+#: n/skins/custom_content/transition_form.pt:25
+msgid "Current state:"
+msgstr ""
+
+#: n/skins/custom_content/discussionitem_view.pt:24
+msgid "Above in thread:"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:20
-#: skins/custom_content/event_view.pt:7
+#: n/skins/custom_content/event_edit_template.pt:20
+#: n/skins/custom_content/event_view.pt:11
msgid "Event Name"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:24
-#: skins/custom_content/event_view.pt:23
+#: n/skins/custom_content/event_edit_template.pt:24
+#: n/skins/custom_content/event_view.pt:27
msgid "Event type"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:27
-#: skins/custom_content/event_view.pt:13
+#: n/skins/custom_content/event_edit_template.pt:27
+#: n/skins/custom_content/event_view.pt:17
msgid "Location"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:38
-#: skins/custom_content/event_view.pt:9
+#: n/skins/custom_content/event_edit_template.pt:38
+#: n/skins/custom_content/event_view.pt:13
msgid "Contact Name"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:44
-#: skins/custom_content/event_view.pt:15
+#: n/skins/custom_content/event_edit_template.pt:44
+#: n/skins/custom_content/event_view.pt:19
msgid "Contact Email"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:50
-#: skins/custom_content/event_view.pt:25
+#: n/skins/custom_content/event_edit_template.pt:50
+#: n/skins/custom_content/event_view.pt:29
msgid "Contact Phone"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:67
+#: n/skins/custom_content/event_edit_template.pt:67
msgid "Beginning"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:78
-#: skins/custom_content/event_edit_template.pt:103 skins/generic/widgets.pt:92
+#: n/skins/custom_content/event_edit_template.pt:78
+#: n/skins/custom_content/event_edit_template.pt:103
+#: n/skins/generic/widgets.pt:94
msgid ""
"${month} / ${day} / ${year} ${hour} :"
" ${minute}"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:92
+#: n/skins/custom_content/event_edit_template.pt:92
msgid "End"
msgstr ""
-#: skins/custom_content/event_view.pt:40
+#: n/skins/custom_content/event_edit_template.pt:115
+#: n/skins/custom_content/event_view.pt:57 n/skins/generic/gruf_macros.pt:57
+#: n/skins/generic/gruf_macros.pt:313 n/skins/generic/header_widgets.pt:24
+#: n/skins/generic/header_widgets.pt:85
+msgid "Description"
+msgstr ""
+
+#: n/skins/custom_content/event_edit_template.pt:121
+#: n/skins/custom_content/event_view.pt:33
+msgid "Event URL"
+msgstr ""
+
+#: n/skins/custom_content/event_view.pt:44
msgid "Start Date"
msgstr ""
-#: skins/custom_content/event_view.pt:45
+#: n/skins/custom_content/event_view.pt:49
msgid "Stop Date"
msgstr ""
-#: skins/custom_content/friendlydatec_editform.pt:14
+#: n/skins/custom_content/friendlydatec_editform.pt:14
msgid "At the least:"
msgstr ""
-#: skins/custom_content/friendlydatec_editform.pt:17
+#: n/skins/custom_content/friendlydatec_editform.pt:17
msgid "At the most:"
msgstr ""
-#: skins/custom_content/friendlydatec_editform.pt:20
+#: n/skins/custom_content/friendlydatec_editform.pt:20
msgid "Within the day:"
msgstr ""
#. Default: "old"
-#: skins/custom_content/friendlydatec_editform.pt:37
+#: n/skins/custom_content/friendlydatec_editform.pt:37
msgid "daterange_old"
msgstr ""
#. Default: "ahead"
-#: skins/custom_content/friendlydatec_editform.pt:40
+#: n/skins/custom_content/friendlydatec_editform.pt:40
msgid "daterange_ahead"
msgstr ""
-#: skins/custom_content/listc_edit.pt:16
+#: n/skins/custom_content/listc_edit.pt:16
msgid "Operator:"
msgstr ""
-#: skins/custom_content/listc_edit.pt:18
+#: n/skins/custom_content/listc_edit.pt:18
msgid "or"
msgstr ""
-#: skins/custom_content/listc_edit.pt:21
-#: skins/custom_generic/talkback_tree.pt:29
+#: n/skins/custom_content/listc_edit.pt:21
+#: n/skins/custom_generic/talkback_tree.pt:32
msgid "and"
msgstr ""
-#: skins/custom_content/sic_edit.pt:15
+#: n/skins/custom_content/sic_edit.pt:15
msgid "Minimum"
msgstr ""
-#: skins/custom_content/sic_edit.pt:18
+#: n/skins/custom_content/sic_edit.pt:18
msgid "Maximum"
msgstr ""
-#: skins/custom_content/sic_edit.pt:21
+#: n/skins/custom_content/sic_edit.pt:21
msgid "Min/Max"
msgstr ""
-#: skins/custom_content/sort_edit.pt:16
+#: n/skins/custom_content/sort_edit.pt:16
msgid "Regular sort"
msgstr ""
-#: skins/custom_content/sort_edit.pt:20
+#: n/skins/custom_content/sort_edit.pt:20
msgid "Reversed sort"
msgstr ""
-#: skins/custom_content/topic_view.pt:41
+#: n/skins/custom_content/topic_view.pt:50
msgid "No result"
msgstr ""
-#: skins/custom_content/topic_view.pt:45
+#: n/skins/custom_content/topic_view.pt:54
msgid "Subtopics"
msgstr ""
-#: skins/custom_content/topic_view.pt:48
+#: n/skins/custom_content/topic_view.pt:57
msgid "Topic"
msgstr ""
-#: skins/custom_control/addtoFavorites.py:15
+#: n/skins/custom_content/transition_form.pt:15
+msgid "Transition of ${objectid}."
+msgstr ""
+
+#: n/skins/custom_content/transition_form.pt:18
+msgid "Transition description."
+msgstr ""
+
+#: n/skins/custom_content/transition_form.pt:30
+#: n/skins/generic/wf_macros.pt:19
+msgid "Comments"
+msgstr ""
+
+#: n/skins/custom_content/transition_form.pt:40
+msgid "Transition"
+msgstr ""
+
+#: n/skins/custom_control/addtoFavorites.py:15
msgid "Favorites"
msgstr ""
-#: skins/custom_control/folder_bottom_control.py:17
+#: n/skins/custom_control/folder_bottom_control.py:17
msgid "%d item moved to bottom.%d items moved to bottom."
msgstr ""
-#: skins/custom_control/folder_down_control.py:18
+#: n/skins/custom_control/folder_down_control.py:18
msgid "%d item moved down.%d items moved down."
msgstr ""
-#: skins/custom_control/folder_top_control.py:17
+#: n/skins/custom_control/folder_rename_control.py:13
+msgid "Item renamed."
+msgstr ""
+
+#: n/skins/custom_control/folder_rename_control.py:15
+msgid "Items renamed."
+msgstr ""
+
+#: n/skins/custom_control/folder_rename_control.py:18
+msgid "This item has not been renamed: \"%s\""
+msgstr ""
+
+#: n/skins/custom_control/folder_rename_control.py:21
+msgid "These items have not been renamed: %s"
+msgstr ""
+
+#: n/skins/custom_control/folder_rename_control.py:24
+msgid "Rename failed."
+msgstr ""
+
+#: n/skins/custom_control/folder_rename_control.py:26
+msgid "Nothing to change."
+msgstr ""
+
+#: n/skins/custom_control/folder_top_control.py:17
msgid "%d item moved to top.%d items moved to top."
msgstr ""
-#: skins/custom_control/folder_up_control.py:17
+#: n/skins/custom_control/folder_up_control.py:17
msgid "%d item moved up.%d items moved up."
msgstr ""
-#: skins/custom_generic/folder_contents_template.pt:26
+#: n/skins/custom_generic/folder_contents_template.pt:26
msgid "Up"
msgstr ""
-#: skins/custom_generic/folder_contents_template.pt:29
+#: n/skins/custom_generic/folder_contents_template.pt:29
msgid "Down"
msgstr ""
#. Default: "by"
-#: skins/custom_generic/folder_contents_template.pt:31
+#: n/skins/custom_generic/folder_contents_template.pt:31
msgid "move_by"
msgstr ""
-#: skins/custom_generic/folder_contents_template.pt:39
+#: n/skins/custom_generic/folder_contents_template.pt:39
msgid "Top"
msgstr ""
-#: skins/custom_generic/folder_contents_template.pt:41
+#: n/skins/custom_generic/folder_contents_template.pt:41
msgid "Bottom"
msgstr ""
-#: skins/custom_generic/mail_password_template.py:30
+#: n/skins/custom_generic/logged_in.py:28
+msgid "Login failure"
+msgstr ""
+
+#: n/skins/custom_generic/logged_in.py:50
+#: n/skins/photo_theme/homepage_dispatcher.py:13
+#: n/skins/photo_theme/homepage_dispatcher.py:16
+#: n/skins/photo_theme/homepage_dispatcher.py:24
+#: n/skins/photo_theme/homepage_dispatcher.py:27
+msgid "Login success"
+msgstr ""
+
+#: n/skins/custom_generic/mail_password_template.py:30
msgid "${portal_title}: Membership reminder"
msgstr ""
-#: skins/custom_generic/mail_password_template.py:35
-#: skins/custom_generic/registered_notify_template.py:46
+#: n/skins/custom_generic/mail_password_template.py:35
+#: n/skins/custom_generic/registered_notify_template.py:46
msgid ""
"Your member id and password are: Member ID: ${member_id} Password: "
"${password}"
msgstr ""
-#: skins/custom_generic/mail_password_template.py:37
-#: skins/custom_generic/registered_notify_template.py:48
+#: n/skins/custom_generic/mail_password_template.py:37
+#: n/skins/custom_generic/registered_notify_template.py:48
msgid "You can use this URL to log in:"
msgstr ""
-#: skins/custom_generic/mail_password_template.py:45
-#: skins/custom_generic/registered_notify_template.py:56
+#: n/skins/custom_generic/mail_password_template.py:45
+#: n/skins/custom_generic/registered_notify_template.py:56
msgid ""
"Be aware that this URL might wrap over two lines. If your browser shows an "
"error message when you try to access the URL please make sure that you put "
"in the complete string."
msgstr ""
-#: skins/custom_generic/mail_password_template.py:48
+#: n/skins/custom_generic/mail_password_template.py:48
+#: n/skins/generic/load_revision.py:31 n/skins/generic/load_revision.py:38
msgid "%Y/%m/%d at %I:%M:%S %p"
msgstr ""
-#: skins/custom_generic/mail_password_template.py:50
+#: n/skins/custom_generic/mail_password_template.py:50
msgid "Request made by IP ${ip} at ${time}"
msgstr ""
-#: skins/custom_generic/main_template_standard.pt:98
+#: n/skins/custom_generic/main_template_standard.pt:95
+#: n/skins/photo_theme/main_template_standard.pt:96
msgid "Skip to content"
msgstr ""
-#: skins/custom_generic/reconfig_template.pt:112
+#: n/skins/custom_generic/main_template_standard.pt:110
+#: n/skins/custom_generic/talkback_tree.pt:63
+#: n/skins/generic/main_template_ajax.pt:12
+#: n/skins/photo_theme/main_template_standard.pt:118
+msgid "Information"
+msgstr ""
+
+#: n/skins/custom_generic/main_template_standard.pt:111
+#: n/skins/custom_generic/talkback_tree.pt:64
+#: n/skins/generic/main_template_ajax.pt:13 n/skins/generic/widgets.pt:17
+#: n/skins/photo_theme/main_template_standard.pt:119
+#: n/skins/photo_theme/search_results_macros.pt:38
+msgid "${DYNAMIC_CONTENT}"
+msgstr ""
+
+#: n/skins/custom_generic/reconfig_template.pt:79
+msgid "Copyright notice"
+msgstr ""
+
+#: n/skins/custom_generic/reconfig_template.pt:83
+msgid "Copyright notice displayed on the portal footer."
+msgstr ""
+
+#: n/skins/custom_generic/reconfig_template.pt:124
msgid "Default ajax options"
msgstr ""
-#: skins/custom_generic/reconfig_template.pt:116
+#: n/skins/custom_generic/reconfig_template.pt:128
msgid "Enable handling of all clicks over links"
msgstr ""
-#: skins/custom_generic/reconfig_template.pt:121
+#: n/skins/custom_generic/reconfig_template.pt:133
msgid "Enable handling of all forms submissions"
msgstr ""
-#: skins/custom_generic/registered_notify_template.py:30
+#: n/skins/custom_generic/registered_notify_template.py:30
msgid "${portal_title}: Your Membership Information"
msgstr ""
-#: skins/custom_generic/registered_notify_template.py:35
+#: n/skins/custom_generic/registered_notify_template.py:35
msgid ""
"You have been registered as a member of \"${portal_title}\", which allows "
"you to personalize your view of the website and participate in the community."
msgstr ""
-#: skins/custom_generic/registered_notify_template.py:39
+#: n/skins/custom_generic/registered_notify_template.py:39
msgid "This describes the purpose of the website:"
msgstr ""
-#: skins/custom_generic/registered_notify_template.py:44
+#: n/skins/custom_generic/registered_notify_template.py:44
msgid "Visit us at ${portal_url}"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:24
+#: n/skins/custom_generic/talkback_tree.pt:27
msgid "by"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:33
+#: n/skins/custom_generic/talkback_tree.pt:36
msgid "unknown"
msgstr ""
#. Default: "at"
-#: skins/custom_generic/talkback_tree.pt:34 skins/generic/recent_news.pt:41
+#: n/skins/custom_generic/talkback_tree.pt:37
+#: n/skins/generic/recent_news.pt:43
msgid "at_(date)"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:71
+#: n/skins/custom_generic/talkback_tree.pt:74
msgid "Body"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:79 skins/generic/gruf_macros.pt:77
-#: skins/generic/gruf_macros.pt:410 skins/generic/header_widgets.pt:32
-#: skins/generic/send_email_form.pt:70
+#: n/skins/custom_generic/talkback_tree.pt:82
+#: n/skins/generic/gruf_macros.pt:77 n/skins/generic/gruf_macros.pt:410
+#: n/skins/generic/header_widgets.pt:32 n/skins/generic/header_widgets.pt:173
+#: n/skins/generic/send_email_form.pt:79
msgid "Validate"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:82
+#: n/skins/custom_generic/talkback_tree.pt:85
msgid "Cancel"
msgstr ""
-#: skins/custom_generic/viewThreadsAtBottom.pt:9
+#: n/skins/custom_generic/viewThreadsAtBottom.pt:10
msgid "Comments:"
msgstr ""
#. Default: "Previous${number}"
-#: skins/generic/batch_macros.pt:21
+#: n/skins/generic/batch_macros.pt:26
msgid "batch_previous_x_items"
msgstr ""
#. Default: "Next${number}items"
-#: skins/generic/batch_macros.pt:27
+#: n/skins/generic/batch_macros.pt:32
msgid "batch_next_x_items"
msgstr ""
-#: skins/generic/calendar_macros.pt:162 skins/generic/calendar_macros.pt:164
+#: n/skins/generic/calendar_macros.pt:78 n/skins/generic/calendar_macros.pt:81
+#: n/skins/generic/calendar_macros.pt:128
+#: n/skins/generic/calendar_macros.pt:130
+msgid "Click to see hidden items"
+msgstr ""
+
+#: n/skins/generic/calendar_macros.pt:88
+msgid "${dayName} ${monthName} ${dayNumber}"
+msgstr ""
+
+#: n/skins/generic/calendar_macros.pt:159
+#: n/skins/generic/calendar_macros.pt:161
msgid "Previous"
msgstr ""
-#: skins/generic/calendar_macros.pt:167
+#: n/skins/generic/calendar_macros.pt:164
msgid "Week"
msgstr ""
-#: skins/generic/calendar_macros.pt:169
+#: n/skins/generic/calendar_macros.pt:166
msgid "Month"
msgstr ""
-#: skins/generic/calendar_macros.pt:174 skins/generic/calendar_macros.pt:176
+#: n/skins/generic/calendar_macros.pt:171
+#: n/skins/generic/calendar_macros.pt:173
msgid "Next"
msgstr ""
-#: skins/generic/calendar_macros.pt:79 skins/generic/calendar_macros.pt:82
-#: skins/generic/calendar_macros.pt:131 skins/generic/calendar_macros.pt:133
-msgid "Click to see hidden items"
+#: n/skins/generic/content_depublish_form.pt:8
+msgid "Depublish: \"${docTitle}\""
msgstr ""
-#: skins/generic/calendar_macros.pt:89
-msgid "${dayName} ${monthName} ${dayNumber}"
+#: n/skins/generic/content_depublish_form.pt:10
+msgid "depublish_transition_explanations"
msgstr ""
-#: skins/generic/content_depublish_form.pt:12
+#: n/skins/generic/content_depublish_form.pt:15
msgid "Select the destination state"
msgstr ""
-#: skins/generic/content_depublish_form.pt:15
+#: n/skins/generic/content_depublish_form.pt:18
msgid "Private"
msgstr ""
-#: skins/generic/content_depublish_form.pt:19
+#: n/skins/generic/content_depublish_form.pt:22
msgid "Shared"
msgstr ""
-#: skins/generic/content_depublish_form.pt:23
+#: n/skins/generic/content_depublish_form.pt:26
msgid "Depublish"
msgstr ""
-#: skins/generic/content_depublish_form.pt:5
-msgid "Depublish: \"${docTitle}\""
-msgstr ""
-
-#: skins/generic/content_depublish_form.pt:7
-msgid "depublish_transition_explanations"
-msgstr ""
-
-#: skins/generic/content_make_private_form.pt:10
+#: n/skins/generic/content_make_private_form.pt:10
msgid "Make private: \"${docTitle}\""
msgstr ""
#. Default: "share_transition_explanations"
-#: skins/generic/content_make_private_form.pt:11
+#: n/skins/generic/content_make_private_form.pt:11
msgid "make_private_transition_explanations"
msgstr ""
-#: skins/generic/content_make_private_form.pt:16
+#: n/skins/generic/content_make_private_form.pt:16
msgid "Make private"
msgstr ""
-#: skins/generic/content_publish_form.pt:14
-#: skins/generic/content_reject_form.pt:13
-msgid "Notify by e-mail"
-msgstr ""
-
-#: skins/generic/content_publish_form.pt:23
-msgid "Publish"
-msgstr ""
-
-#: skins/generic/content_publish_form.pt:5
+#: n/skins/generic/content_publish_form.pt:8
msgid "Publish: \"${docTitle}\""
msgstr ""
-#: skins/generic/content_publish_form.pt:7
+#: n/skins/generic/content_publish_form.pt:10
msgid "publish_transition_explanations"
msgstr ""
-#: skins/generic/content_reject_form.pt:22 skins/generic/pending_members.pt:30
-msgid "Reject"
+#: n/skins/generic/content_publish_form.pt:17
+#: n/skins/generic/content_reject_form.pt:16
+msgid "Notify by e-mail"
msgstr ""
-#: skins/generic/content_reject_form.pt:5
+#: n/skins/generic/content_publish_form.pt:26
+msgid "Publish"
+msgstr ""
+
+#: n/skins/generic/content_reject_form.pt:8
msgid "Reject: \"${objectid}\""
msgstr ""
-#: skins/generic/content_reject_form.pt:6
+#: n/skins/generic/content_reject_form.pt:9
msgid "reject_transition_explanations"
msgstr ""
-#: skins/generic/content_retract_form.pt:12
-msgid "Retract"
+#: n/skins/generic/content_reject_form.pt:25
+#: n/skins/generic/pending_members.pt:30
+msgid "Reject"
msgstr ""
-#: skins/generic/content_retract_form.pt:5
+#: n/skins/generic/content_retract_form.pt:8
msgid "Retract: \"${objectid}\""
msgstr ""
-#: skins/generic/content_retract_form.pt:6
+#: n/skins/generic/content_retract_form.pt:9
msgid "retract_transition_explanations"
msgstr ""
-#: skins/generic/content_share_form.pt:10
+#: n/skins/generic/content_retract_form.pt:15
+msgid "Retract"
+msgstr ""
+
+#: n/skins/generic/content_share_form.pt:10
msgid "Share: \"${docTitle}\""
msgstr ""
-#: skins/generic/content_share_form.pt:11
+#: n/skins/generic/content_share_form.pt:11
msgid "share_transition_explanations"
msgstr ""
-#: skins/generic/content_share_form.pt:16
+#: n/skins/generic/content_share_form.pt:16
msgid "Share"
msgstr ""
-#: skins/generic/content_submit_form.pt:12
-msgid "Submit"
-msgstr ""
-
-#: skins/generic/content_submit_form.pt:5
+#: n/skins/generic/content_submit_form.pt:8
msgid "Submit: \"${objectid}\" for Review."
msgstr ""
-#: skins/generic/content_submit_form.pt:6
+#: n/skins/generic/content_submit_form.pt:9
msgid "submit_transition_explanations"
msgstr ""
-#: skins/generic/default_home_page_content.pt:2
-msgid "Welcome to Plinn!"
-msgstr ""
-
-#: skins/generic/default_home_page_content.pt:3
-msgid "This is the default home page."
-msgstr ""
-
-#: skins/generic/default_home_page_content.pt:4
-#: skins/generic/default_member_content.pt:4
-msgid "To change the content just select \"Edit\" in the Tab bar on the top."
+#: n/skins/generic/content_submit_form.pt:15
+msgid "Submit"
msgstr ""
-#: skins/generic/default_member_content.pt:2
+#: n/skins/generic/default_member_content.pt:2
msgid "Default page for ${memberFullName}"
msgstr ""
-#: skins/generic/default_member_content.pt:3
+#: n/skins/generic/default_member_content.pt:3
msgid ""
"This is the default document created for you when you have been registered "
"in this portal."
msgstr ""
-#: skins/generic/groups_members.pt:35
+#: n/skins/generic/default_member_content.pt:4
+msgid "To change the content just select \"Edit\" in the Tab bar on the top."
+msgstr ""
+
+#: n/skins/generic/groups_members.pt:35
msgid "Members of \"${groupId}\""
msgstr ""
-#: skins/generic/groups_members.pt:47
+#: n/skins/generic/groups_members.pt:47
msgid "Groups of \"${groupId}\""
msgstr ""
-#: skins/generic/gruf_macros.pt:105
+#: n/skins/generic/gruf_macros.pt:25
+msgid "Group Tree"
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:45 n/skins/generic/header_widgets.pt:70
+msgid "Identifier"
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:63 n/skins/generic/gruf_macros.pt:319
+msgid "Shared folder"
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:66
+msgid "Open shared folder..."
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:69 n/skins/generic/gruf_macros.pt:321
+msgid "Create"
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:90
+msgid "Implicit roles"
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:98
+msgid "Explicit roles"
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:105
msgid "Remove"
msgstr ""
-#: skins/generic/gruf_macros.pt:112
+#: n/skins/generic/gruf_macros.pt:112
msgid "Append"
msgstr ""
-#: skins/generic/gruf_macros.pt:129 skins/generic/gruf_macros.pt:164
+#: n/skins/generic/gruf_macros.pt:129 n/skins/generic/gruf_macros.pt:164
msgid "Outside group"
msgstr ""
-#: skins/generic/gruf_macros.pt:131 skins/generic/gruf_macros.pt:166
+#: n/skins/generic/gruf_macros.pt:131 n/skins/generic/gruf_macros.pt:166
msgid "Inside group"
msgstr ""
-#: skins/generic/gruf_macros.pt:148 skins/generic/gruf_macros.pt:183
+#: n/skins/generic/gruf_macros.pt:148 n/skins/generic/gruf_macros.pt:183
msgid "None"
msgstr ""
-#: skins/generic/gruf_macros.pt:197
+#: n/skins/generic/gruf_macros.pt:197
msgid "All members"
msgstr ""
-#: skins/generic/gruf_macros.pt:210
+#: n/skins/generic/gruf_macros.pt:210
msgid "Edit"
msgstr ""
-#: skins/generic/gruf_macros.pt:224
+#: n/skins/generic/gruf_macros.pt:224
msgid "All groups"
msgstr ""
-#: skins/generic/gruf_macros.pt:247
+#: n/skins/generic/gruf_macros.pt:247
msgid "Add new member"
msgstr ""
-#: skins/generic/gruf_macros.pt:25
-msgid "Group Tree"
+#: n/skins/generic/gruf_macros.pt:250 n/skins/generic/gruf_macros.pt:365
+msgid "Login"
msgstr ""
-#: skins/generic/gruf_macros.pt:256 skins/generic/gruf_macros.pt:378
-#: skins/generic/last_member_logs.pt:1 skins/generic/pending_members.pt:13
+#: 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 ""
-#: skins/generic/gruf_macros.pt:262 skins/generic/gruf_macros.pt:384
+#: n/skins/generic/gruf_macros.pt:262 n/skins/generic/gruf_macros.pt:384
msgid "Given Name"
msgstr ""
-#: skins/generic/gruf_macros.pt:268 skins/generic/gruf_macros.pt:390
+#: n/skins/generic/gruf_macros.pt:268 n/skins/generic/gruf_macros.pt:390
msgid "Password"
msgstr ""
-#: skins/generic/gruf_macros.pt:274 skins/generic/gruf_macros.pt:396
+#: n/skins/generic/gruf_macros.pt:274 n/skins/generic/gruf_macros.pt:396
msgid "Confirm"
msgstr ""
-#: skins/generic/gruf_macros.pt:280 skins/generic/gruf_macros.pt:402
+#: n/skins/generic/gruf_macros.pt:280 n/skins/generic/gruf_macros.pt:402
msgid "Email address"
msgstr ""
-#: skins/generic/gruf_macros.pt:298
+#: n/skins/generic/gruf_macros.pt:298
msgid "Add new group"
msgstr ""
-#: skins/generic/gruf_macros.pt:301
+#: n/skins/generic/gruf_macros.pt:301
msgid "Id"
msgstr ""
-#: skins/generic/gruf_macros.pt:371
+#: n/skins/generic/gruf_macros.pt:371
msgid "Groups"
msgstr ""
-#: skins/generic/gruf_macros.pt:373
+#: n/skins/generic/gruf_macros.pt:373
msgid "explicitly:"
msgstr ""
-#: skins/generic/gruf_macros.pt:374
+#: n/skins/generic/gruf_macros.pt:374
msgid "implicitly:"
msgstr ""
-#: skins/generic/gruf_macros.pt:415
+#: n/skins/generic/gruf_macros.pt:415
msgid "Tree view by this member"
msgstr ""
-#: skins/generic/gruf_macros.pt:416
+#: n/skins/generic/gruf_macros.pt:416
msgid "Click here to see the tree viewed by this member >>"
msgstr ""
-#: skins/generic/gruf_macros.pt:440
+#: n/skins/generic/gruf_macros.pt:440
msgid "collapse all"
msgstr ""
-#: skins/generic/gruf_macros.pt:45
-msgid "Identifier"
+#: n/skins/generic/gruf_macros.pt:471
+msgid "<< Back to member properties"
msgstr ""
-#: skins/generic/gruf_macros.pt:471
-msgid "<< Back to member properties"
+#: n/skins/generic/header_widgets.pt:33
+msgid "Edit all metadata"
msgstr ""
-#: skins/generic/gruf_macros.pt:63 skins/generic/gruf_macros.pt:319
-msgid "Shared folder"
+#: n/skins/generic/header_widgets.pt:54
+msgid "Enable Discussion?"
msgstr ""
-#: skins/generic/gruf_macros.pt:66
-msgid "Open shared folder..."
+#: n/skins/generic/header_widgets.pt:57
+msgid "Default"
msgstr ""
-#: skins/generic/gruf_macros.pt:69 skins/generic/gruf_macros.pt:321
-msgid "Create"
+#: n/skins/generic/header_widgets.pt:60
+msgid "Off"
msgstr ""
-#: skins/generic/gruf_macros.pt:90
-msgid "Implicit roles"
+#: n/skins/generic/header_widgets.pt:63
+msgid "On"
msgstr ""
-#: skins/generic/gruf_macros.pt:98
-msgid "Explicit roles"
+#: n/skins/generic/header_widgets.pt:91
+msgid "Subject"
msgstr ""
-#: skins/generic/header_widgets.pt:33
-msgid "Edit all metadata"
+#: n/skins/generic/header_widgets.pt:108
+msgid "Contributors"
msgstr ""
-#: skins/generic/last_member_logs.pt:1
-msgid "Last member login times"
+#: n/skins/generic/header_widgets.pt:115
+msgid "Creation Date"
msgstr ""
-#: skins/generic/last_member_logs.pt:1
-msgid "Last login time"
+#: n/skins/generic/header_widgets.pt:118
+msgid "Last Modified Date"
msgstr ""
-#: skins/generic/local_roles_macros.pt:160
-msgid "No more group available for the ${role} role in this folder"
+#: n/skins/generic/header_widgets.pt:130
+msgid "Effective Date"
msgstr ""
-#: skins/generic/local_roles_macros.pt:174
-msgid "No group have got the ${role} role in this folder"
+#: n/skins/generic/header_widgets.pt:141
+msgid "Expiration Date"
+msgstr ""
+
+#: n/skins/generic/header_widgets.pt:147 n/skins/generic/wysiwyg_support.pt:43
+msgid "Format"
+msgstr ""
+
+#: n/skins/generic/header_widgets.pt:155
+msgid "Language"
+msgstr ""
+
+#: n/skins/generic/header_widgets.pt:163
+msgid "Rights"
+msgstr ""
+
+#: n/skins/generic/header_widgets.pt:174
+msgid "Edit standard metadata"
+msgstr ""
+
+#: n/skins/generic/last_member_logs.pt:19
+msgid "Last member login times"
msgstr ""
-#: skins/generic/local_roles_macros.pt:39
-#: skins/generic/local_roles_macros.pt:122
+#: n/skins/generic/last_member_logs.pt:27
+msgid "Last login time"
+msgstr ""
+
+#: n/skins/generic/load_revision.py:38
+msgid "state of %s"
+msgstr ""
+
+#: n/skins/generic/local_roles_macros.pt:39
+#: n/skins/generic/local_roles_macros.pt:122
msgid "Current Role: \"${current_role}\""
msgstr ""
-#: skins/generic/local_roles_macros.pt:45
-#: skins/generic/local_roles_macros.pt:127
+#: n/skins/generic/local_roles_macros.pt:45
+#: n/skins/generic/local_roles_macros.pt:127
msgid "ok"
msgstr ""
-#: skins/generic/local_roles_macros.pt:66
-#: skins/generic/local_roles_macros.pt:148
+#: n/skins/generic/local_roles_macros.pt:66
+#: n/skins/generic/local_roles_macros.pt:148
msgid "Haven't role"
msgstr ""
-#: skins/generic/local_roles_macros.pt:72
-#: skins/generic/local_roles_macros.pt:150
+#: n/skins/generic/local_roles_macros.pt:72
+#: n/skins/generic/local_roles_macros.pt:150
msgid "Have role"
msgstr ""
-#: skins/generic/local_roles_macros.pt:84
+#: n/skins/generic/local_roles_macros.pt:84
msgid "No more member available for the ${role} role in this folder"
msgstr ""
-#: skins/generic/local_roles_macros.pt:99
+#: n/skins/generic/local_roles_macros.pt:99
msgid "Nobody have got the ${role} role in this folder"
msgstr ""
+#: n/skins/generic/local_roles_macros.pt:160
+msgid "No more group available for the ${role} role in this folder"
+msgstr ""
+
+#: n/skins/generic/local_roles_macros.pt:174
+msgid "No group have got the ${role} role in this folder"
+msgstr ""
+
#. Default: "%m/%d/%Y %Hh%M"
-#: skins/generic/locale_date_fmt.pt:1
+#: n/skins/generic/locale_date_fmt.pt:1
msgid "locale_date_fmt"
msgstr ""
-#: skins/generic/main_template_macros.pt:108
-msgid "Exit boxes editing"
+#: n/skins/generic/main_template_macros.pt:78
+#: n/skins/photo_theme/main_template_macros.pt:91
+msgid "You are here:"
msgstr ""
-#: skins/generic/pending_members.pt:14
-msgid "Email"
+#: n/skins/generic/main_template_macros.pt:91
+#: n/skins/generic/main_template_macros.pt:94
+#: n/skins/generic/main_template_macros.pt:112
+#: n/skins/generic/main_template_macros.pt:113
+#: n/skins/photo_theme/main_template_macros.pt:100
+#: n/skins/photo_theme/main_template_macros.pt:113
+msgid "Paste"
msgstr ""
-#: skins/generic/pending_members.pt:35
-msgid "Register"
+#: n/skins/generic/main_template_macros.pt:109
+#: n/skins/photo_theme/main_template_macros.pt:110
+msgid "Exit boxes editing"
msgstr ""
-#: skins/generic/pending_members.pt:9
+#: n/skins/generic/pending_members.pt:9
msgid "Review members registration"
msgstr ""
-#: skins/generic/recent_news.pt:19
+#: n/skins/generic/pending_members.pt:14
+msgid "Email"
+msgstr ""
+
+#: n/skins/generic/pending_members.pt:35
+msgid "Register"
+msgstr ""
+
+#: n/skins/generic/recent_news.pt:21 n/skins/generic/widgets.pt:123
msgid "News"
msgstr ""
-#: skins/generic/recent_news.pt:34
+#: n/skins/generic/recent_news.pt:36
msgid "by:"
msgstr ""
#. Default: "Read More"
-#: skins/generic/recent_news.pt:47
+#: n/skins/generic/recent_news.pt:49
msgid "read_more"
msgstr ""
-#: skins/generic/recent_news.pt:55
+#: n/skins/generic/recent_news.pt:57
msgid "No news is good news!"
msgstr ""
-#: skins/generic/reject_member_form.pt:14
+#: n/skins/generic/reject_member_form.pt:9
+msgid "Reject registration of ${fullname}"
+msgstr ""
+
+#: n/skins/generic/reject_member_form.pt:14
msgid "From:"
msgstr ""
-#: skins/generic/reject_member_form.pt:20
+#: n/skins/generic/reject_member_form.pt:20
msgid "To:"
msgstr ""
-#: skins/generic/reject_member_form.pt:27 skins/generic/send_email_form.pt:87
+#: n/skins/generic/reject_member_form.pt:27
+#: n/skins/generic/send_email_form.pt:96
msgid "Subject:"
msgstr ""
-#: skins/generic/reject_member_form.pt:31
+#: n/skins/generic/reject_member_form.pt:31
msgid "Membership request denied"
msgstr ""
-#: skins/generic/reject_member_form.pt:35 skins/generic/send_email_form.pt:92
+#: n/skins/generic/reject_member_form.pt:35
+#: n/skins/generic/send_email_form.pt:101
msgid "Message body:"
msgstr ""
-#: skins/generic/reject_member_form.pt:39
+#: n/skins/generic/reject_member_form.pt:39
msgid ""
"I'm sorry to have to inform you that your request has been denied. Please "
"contact the site administrator."
msgstr ""
-#: skins/generic/reject_member_form.pt:45
+#: n/skins/generic/reject_member_form.pt:45
msgid "Send"
msgstr ""
-#: skins/generic/reject_member_form.pt:9
-msgid "Reject registration of ${fullname}"
+#: n/skins/generic/request_password_reset_form.pt:11
+msgid "Password reset"
msgstr ""
-#: skins/generic/send_email_form.pt:101
-msgid "Note: This message will be stored in content history."
+#: n/skins/generic/request_password_reset_form.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 ""
+
+#: n/skins/generic/request_password_reset_form.pt:18
+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_form.pt:25
+msgid " Send "
+msgstr ""
+
+#: n/skins/generic/revision_context_header.pt:10
+msgid ""
+"This is an old revision of this content, as edited by ${user} at ${datetime}."
+msgstr ""
+
+#: n/skins/generic/revision_context_header.pt:16
+msgid "Restore this revision"
+msgstr ""
+
+#: n/skins/generic/revision_context_header.pt:22
+msgid "â previous revision"
+msgstr ""
+
+#: n/skins/generic/revision_context_header.pt:27
+msgid "current revision"
+msgstr ""
+
+#: n/skins/generic/revision_context_header.pt:29
+msgid "next revision â"
+msgstr ""
+
+#: n/skins/generic/search.py:109 n/skins/generic/search.py:113
+msgid "ascending sort"
+msgstr ""
+
+#: n/skins/generic/search_results_template.pt:16
+msgid "Search Results"
+msgstr ""
+
+#: n/skins/generic/search_results_template.pt:23
+msgid "Found ${count} ${item_s_match} '${text}'."
+msgstr ""
+
+#: n/skins/generic/search_results_template.pt:27
+msgid "Found 1 item."
+msgstr ""
+
+#: n/skins/generic/search_results_template.pt:28
+msgid "Found ${count} items."
+msgstr ""
+
+#: n/skins/generic/search_results_template.pt:45
+msgid "Last modified"
+msgstr ""
+
+#: n/skins/generic/search_results_template.pt:83
+msgid "Save this search as topic"
+msgstr ""
+
+#: n/skins/generic/search_results_template.pt:84
+msgid "Title:"
msgstr ""
-#: skins/generic/send_email_form.pt:27
+#: n/skins/generic/search_results_template.pt:89
+msgid "There are no items matching your specified criteria."
+msgstr ""
+
+#: n/skins/generic/send_email_form.pt:25
+msgid "Send an email"
+msgstr ""
+
+#: n/skins/generic/send_email_form.pt:29
msgid "Recipients:"
msgstr ""
-#: skins/generic/send_email_form.pt:38
+#: n/skins/generic/send_email_form.pt:47
msgid "(as copy)"
msgstr ""
-#: skins/generic/send_email_form.pt:53
+#: n/skins/generic/send_email_form.pt:62
msgid "All (${nofpers} persons)"
msgstr ""
-#: skins/generic/send_email_form.pt:60
+#: n/skins/generic/send_email_form.pt:69
msgid "Show list"
msgstr ""
-#: skins/generic/send_email_form.pt:70
+#: n/skins/generic/send_email_form.pt:79
msgid "(not required)"
msgstr ""
-#: skins/generic/send_email_form.pt:81
+#: n/skins/generic/send_email_form.pt:90
msgid "Others (on address by line)"
msgstr ""
-#: skins/generic/send_email_form.pt:98
+#: n/skins/generic/send_email_form.pt:107
msgid "Send email"
msgstr ""
-#: skins/generic/wf_macros.pt:17
-msgid "Actor"
+#: n/skins/generic/send_email_form.pt:110
+msgid "Note: This message will be stored in content history."
msgstr ""
-#: skins/generic/wf_macros.pt:18
-msgid "Action"
+#: n/skins/generic/wf_macros.pt:17
+msgid "Actor"
msgstr ""
-#: skins/generic/wf_macros.pt:19
-msgid "Comments"
+#: n/skins/generic/wf_macros.pt:18
+msgid "Action"
msgstr ""
-#: skins/generic/wf_macros.pt:20
+#: n/skins/generic/wf_macros.pt:20
msgid "Email sent to"
msgstr ""
-#: skins/generic/wf_macros.pt:28
+#: n/skins/generic/wf_macros.pt:28
msgid "(no comments)"
msgstr ""
-#: skins/generic/wf_macros.pt:33
+#: n/skins/generic/wf_macros.pt:33
msgid "(no email sent)"
msgstr ""
-#: skins/generic/widgets.pt:32 skins/generic/widgets.pt:33
+#: n/skins/generic/widgets.pt:32 n/skins/generic/widgets.pt:33
msgid "Edit metadata"
msgstr ""
-#: skins/generic/widgets.pt:53
+#: n/skins/generic/widgets.pt:53
msgid "Clipboard"
msgstr ""
-#: skins/generic/widgets.pt:59
-msgid "Delete"
+#: n/skins/generic/widgets.pt:128
+msgid "News Item"
msgstr ""
-#: skins/generic/widgets.pt:60
-msgid "Empty"
+#: n/skins/generic/wysiwyg_support.pt:47
+msgid "Structured text"
msgstr ""
-#: skins/generic/wysiwyg_support.pt:108
-msgid "Format"
+#: n/skins/generic/wysiwyg_support.pt:53
+msgid "HTML"
msgstr ""
-#: skins/generic/wysiwyg_support.pt:112
-msgid "Structured text"
+#: n/skins/generic/wysiwyg_support.pt:59
+msgid "Plain text"
msgstr ""
-#: skins/generic/wysiwyg_support.pt:118
-msgid "HTML"
+#: n/skins/photo_theme/logout.py:15
+msgid "You have been logged out."
msgstr ""
-#: skins/generic/wysiwyg_support.pt:124
-msgid "Plain text"
+#: n/skins/photo_theme/main_template_macros.pt:55
+msgid "Loading progress..."
msgstr ""
-# from plinn-manual
-msgid "${month}/${day}/${year} ${hour}:${minute}:${second}"
+#: n/skins/photo_theme/realis_main_macros.pt:28
+msgid "Join"
msgstr ""
-msgid "%s's Home"
+#: n/skins/photo_theme/search_results_macros.pt:12
+msgid "Title"
msgstr ""
-msgid "%s's front page"
+#: n/skins/photo_theme/search_results_macros.pt:13
+msgid "Creator"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:14
+msgid "Type"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:15
+msgid "Date"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:32
+msgid "(No title)"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:45
+msgid "(No description)"
+msgstr ""
+
+# from plinn-manual
+msgid "${month}/${day}/${year} ${hour}:${minute}:${second}"
msgstr ""
msgid "1 Day"
@@ -1120,9 +1351,6 @@ msgstr ""
msgid "Box title:"
msgstr ""
-msgid "Calendar View"
-msgstr ""
-
msgid "catalog_index_allowedRolesAndUsers"
msgstr "Allowed roles and users"
@@ -1147,6 +1375,9 @@ msgstr "Effective date"
msgid "catalog_index_expires"
msgstr "Expiration date"
+msgid "catalog_index_fTitle"
+msgstr ""
+
msgid "catalog_index_getId"
msgstr "Id"
@@ -1261,7 +1492,7 @@ msgstr ""
msgid "December_abbr"
msgstr "Dec"
-msgid "demande_avis_tut"
+msgid "Delete"
msgstr ""
msgid "depublish"
@@ -1279,9 +1510,6 @@ msgstr "Publish"
msgid "Directories"
msgstr ""
-msgid "Directory"
-msgstr ""
-
msgid "Do you realy want to delete ?"
msgstr ""
@@ -1360,6 +1588,9 @@ msgstr ""
msgid "Height:"
msgstr ""
+msgid "History"
+msgstr ""
+
msgid "Image block"
msgstr ""
@@ -1405,6 +1636,9 @@ msgstr ""
msgid "June_abbr"
msgstr "Jun"
+msgid "immediately"
+msgstr ""
+
msgid "KB"
msgstr ""
@@ -1429,9 +1663,6 @@ msgstr ""
msgid "Listen"
msgstr ""
-msgid "Loading progress..."
-msgstr ""
-
msgid "Local Roles"
msgstr ""
@@ -1534,10 +1765,10 @@ msgstr ""
msgid "Move up"
msgstr ""
-msgid "New layer"
+msgid "never"
msgstr ""
-msgid "News Item"
+msgid "New layer"
msgstr ""
msgid "No document"
@@ -1856,3 +2087,36 @@ msgid ""
"WARNING: The current portal type is unknown. You must change the value to "
"enable the member area creation."
msgstr ""
+
+msgid "Approve"
+msgstr ""
+
+msgid "approved"
+msgstr ""
+
+msgid "Disapprove"
+msgstr ""
+
+msgid "pending"
+msgstr ""
+
+msgid "private"
+msgstr ""
+
+msgid "items matching"
+msgstr ""
+
+msgid "item matching"
+msgstr ""
+
+msgid "mail_to"
+msgstr ""
+
+msgid "mail_cc"
+msgstr ""
+
+msgid "mail_bcc"
+msgstr ""
+
+#~ msgid "List"
+#~ msgstr "List"
diff --git a/locales/fr/LC_MESSAGES/plinn.po b/locales/fr/LC_MESSAGES/plinn.po
index 3b25aee..ca6297c 100755
--- a/locales/fr/LC_MESSAGES/plinn.po
+++ b/locales/fr/LC_MESSAGES/plinn.po
@@ -1,10 +1,11 @@
msgid ""
msgstr ""
"Project-Id-Version: Plinn 2.0\n"
-"POT-Creation-Date: $Date: Fri Oct 30 14:42:26 2009 $\n"
+"POT-Creation-Date: Mon Jul 29 14:16:13 2013\n"
"PO-Revision-Date: 2009-10-30 14:43+0100\n"
"Last-Translator: Benoît PIN\n"
"Language-Team: CRI http://cri.ensmp.fr\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -15,59 +16,53 @@ msgstr ""
"Domain: plinn\n"
"X-Is-Fallback-For: fr-fr, fr-be fr-ca fr-lu fr-mc fr-ch\n"
-#: EmailNotification.py:38
+#: n/EmailNotification.py:38
msgid "Object deleted"
msgstr "Objet supprimé"
-#: Folder.py:149
+#: n/Folder.py:162
msgid "Please rename each listed object."
msgstr "Veuillez renommer tous les éléments listés."
-#. Default: ""
-#: MembershipTool.py:401
+#: n/MembershipTool.py:406
msgid "%s's Home"
msgstr "Accueil : %s"
-#. Default: ""
-#: MembershipTool.py:402
+#: n/MembershipTool.py:407
msgid "%s's front page"
msgstr "Page d'accueil de %s"
-#: profiles/default/actions.xml:107
-msgid "List"
-msgstr "Lister"
-
-#: profiles/default/actions.xml:122
-msgid "Manage Boxes"
-msgstr "Gérer les boîtes"
-
-#: profiles/default/actions.xml:134 skins/generic/send_email_form.pt:25
-msgid "Send an email"
-msgstr "Envoyer un e-mail"
+#: n/RegistrationTool.py:217
+msgid "Invalid reset password request."
+msgstr ""
-#: profiles/default/actions.xml:156
-msgid "Configure Portal"
-msgstr "Configurer le portail"
+#: n/RegistrationTool.py:222
+msgid "Invalid userid."
+msgstr ""
-#: profiles/default/actions.xml:167
-msgid "Directory"
-msgstr "Annuaire"
+#: n/RegistrationTool.py:226
+msgid "Your reset password request has expired. You can ask a new one."
+msgstr ""
-#: profiles/default/actions.xml:181
-msgid "Add comment..."
-msgstr "Ajouter un commentaire..."
+#: n/RegistrationTool.py:235
+msgid "Password successfully resetted."
+msgstr ""
-#: profiles/default/actions.xml:209
-msgid "Calendar View"
-msgstr "Calendrier"
+#: n/RegistrationTool.py:237
+msgid "\"%s\" username not found."
+msgstr ""
-#: profiles/default/workflows/default_workflow/scripts/sendNotificationEmail.py:52
-#: profiles/default/workflows/folder_workflow/scripts/sendNotificationEmail.py:52
-#: profiles/default/workflows/portfolio_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/default/workflows/default_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/default/workflows/folder_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/default/workflows/portfolio_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/photo/workflows/default_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/photo/workflows/folder_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/photo/workflows/portfolio_workflow/scripts/sendNotificationEmail.py:52
msgid "Document state change notificaction"
msgstr "Notification de changement d'état d'un document"
-#: profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:35
+#: n/profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:35
+#: n/profiles/photo/workflows/member_workflow/scripts/sendNotificationEmail.py:35
msgid ""
"\n"
"You have been registered as a member of \"%(portal_title)s\", which\n"
@@ -75,10 +70,12 @@ 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"
-#: profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:43
+#: n/profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:43
+#: n/profiles/photo/workflows/member_workflow/scripts/sendNotificationEmail.py:43
msgid ""
"You will receive an other mail with your randomly-generated\n"
"password. Once you have logged in with this password, you\n"
@@ -87,211 +84,185 @@ msgstr ""
"Vous allez recevoir un autre e-mail avec votre mot de passe généré "
"aléatoirement. Vous pourrez le changer dès votre première connexion."
-#: profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:55
+#: n/profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:55
+#: n/profiles/photo/workflows/member_workflow/scripts/sendNotificationEmail.py:55
msgid "your registration has been accepted"
msgstr "votre inscription a été acceptée"
-#: skins/content/cal_calendar_view.pt:30
+#: n/profiles/photo/workflows/order_workflow/scripts/sendNotificationEmail.py:51
+msgid "Tracking number"
+msgstr ""
+
+#: n/profiles/photo/workflows/order_workflow/scripts/sendNotificationEmail.py:55
+msgid "Tracking url"
+msgstr ""
+
+#: n/skins/content/cal_calendar_view.pt:30
msgid "Add a new event..."
msgstr "Ajouter un nouvel événement..."
-#: skins/content/cal_calendar_view.pt:37 skins/content/cal_calendar_view.pt:40
+#: n/skins/content/cal_calendar_view.pt:37
+#: n/skins/content/cal_calendar_view.pt:40
msgid "Remove event..."
msgstr "Supprimer un événement..."
-#: skins/content/cal_calendar_view.pt:50
+#: n/skins/content/cal_calendar_view.pt:50
msgid "The next click over an event will remove it!"
msgstr "Le prochain clic sur un événement provoquera sa suppression !"
-#: skins/content/cal_calendar_view.pt:51
+#: n/skins/content/cal_calendar_view.pt:51
msgid "Cancel delete mode"
msgstr "Ne pas faire de suppression"
-#: skins/content/changes_history_template.pt:24
+#: n/skins/content/changes_history_template.pt:24
msgid "« later revisions"
msgstr "« révisions précédentes"
-#: skins/content/changes_history_template.pt:28
+#: n/skins/content/changes_history_template.pt:28
msgid "earlier revisions »"
msgstr "révisions suivantes »"
-#: skins/content/changes_history_template.pt:36
-#: skins/content/list_pending_contents.pt:42 skins/generic/wf_macros.pt:16
-msgid "Date"
-msgstr "Date"
-
-#: skins/content/changes_history_template.pt:37
+#: n/skins/content/changes_history_template.pt:37
msgid "user"
msgstr "utilisateur"
-#: skins/content/changes_history_template.pt:70
+#: n/skins/content/changes_history_template.pt:63
+#: n/skins/generic/load_revision.py:29
+msgid "nobody"
+msgstr "personne"
+
+#: n/skins/content/changes_history_template.pt:70
msgid "Compare"
msgstr "Comparer"
-#: skins/content/changes_history_template.pt:72
+#: n/skins/content/changes_history_template.pt:72
msgid "Please select one revision per column to compare."
msgstr "Veuillez sélectionner une révision par colonne pour comparer."
-#: skins/content/content_info.pt:16 skins/content/file_info.pt:12
-#: skins/content/list_pending_contents.pt:31
-#: skins/custom_generic/talkback_tree.pt:68 skins/generic/gruf_macros.pt:51
-#: skins/generic/gruf_macros.pt:307 skins/generic/header_widgets.pt:18
-#: skins/generic/header_widgets.pt:75
-#: skins/generic/search_results_template.pt:37
-msgid "Title"
-msgstr "Titre"
-
-#: skins/content/content_info.pt:20 skins/content/file_info.pt:20
-msgid "Created"
-msgstr "Créé"
-
-#: skins/content/content_info.pt:24 skins/content/file_info.pt:24
-msgid "Modified"
-msgstr "Modifié"
-
-#: skins/content/content_info.pt:9 skins/content/file_info.pt:5
-msgid "Preview:"
-msgstr "Aperçu :"
-
-#: skins/content/dateCriterionResolvedDescription.py:15
+#: n/skins/content/dateCriterionResolvedDescription.py:15
msgid "search from the beginning of the world until %s"
msgstr "recherche depuis la nuit des temps jusqu'au %s"
-#: skins/content/dateCriterionResolvedDescription.py:17
+#: n/skins/content/dateCriterionResolvedDescription.py:17
msgid "search from %s and the end of the world"
msgstr "recherche depuis le %s jusqu'Ã la fin du monde"
-#: skins/content/dateCriterionResolvedDescription.py:19
+#: n/skins/content/dateCriterionResolvedDescription.py:19
msgid "search between %s and %s"
msgstr "recherche entre le %s et le %s"
-#: skins/content/file_info.pt:16
-msgid "Type"
-msgstr "Type"
-
-#: skins/content/folder_notifications_template.pt:23
-#: skins/content/topic_edit_template.pt:26
-#: skins/custom_content/event_edit_template.pt:135
-#: skins/generic/search_results_template.pt:87
+#: n/skins/content/folder_notifications_template.pt:23
+#: n/skins/content/topic_edit_template.pt:26
+#: n/skins/custom_content/event_edit_template.pt:135
+#: n/skins/generic/search_results_template.pt:87
msgid "Save"
msgstr "Enregistrer"
-#: skins/content/list_pending_contents.pt:23
+#: n/skins/content/list_pending_contents.pt:23
msgid "Pending documents"
msgstr "Documents en attente"
-#: skins/content/list_pending_contents.pt:37
+#: n/skins/content/list_pending_contents.pt:37
msgid "Submit by:"
msgstr "Soumis par :"
-#: skins/content/no_preview.pt:11
+#: n/skins/content/no_preview.pt:11
msgid "No preview available for this file"
msgstr "Pas d'aperçu disponible pour ce fichier"
-#: skins/content/topic_edit_template.pt:16
+#: n/skins/content/topic_edit_template.pt:16
msgid "Reuse criteria from parent:"
msgstr "Réutiliser les critères du parent :"
-#: skins/content/topic_edit_template.pt:17
+#: n/skins/content/topic_edit_template.pt:17
msgid "yes"
msgstr "oui"
-#: skins/content/topic_edit_template.pt:18
+#: n/skins/content/topic_edit_template.pt:18
msgid "no"
msgstr "non"
-#: skins/content/topic_edit_template.pt:27 skins/generic/gruf_macros.pt:211
-#: skins/generic/gruf_macros.pt:235
+#: n/skins/content/topic_edit_template.pt:27
+#: n/skins/generic/gruf_macros.pt:211 n/skins/generic/gruf_macros.pt:235
msgid "Remove selected"
msgstr "Supprimer la sélection"
-#: skins/content/topic_edit_template.pt:30
+#: n/skins/content/topic_edit_template.pt:30
msgid "New criterion:"
msgstr "Nouveau critère :"
-#: skins/content/topic_edit_template.pt:33
+#: n/skins/content/topic_edit_template.pt:33
msgid "Name:"
msgstr "Nom :"
-#: skins/content/topic_edit_template.pt:41
+#: n/skins/content/topic_edit_template.pt:41
msgid "Type:"
msgstr "Type :"
-#: skins/content/topic_edit_template.pt:51 skins/generic/gruf_macros.pt:288
-#: skins/generic/gruf_macros.pt:327
+#: 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"
-#: skins/control/restore_revision.py:9
+#: n/skins/control/restore_revision.py:9
msgid "%(type)s restored."
msgstr "%(type)s restauré."
-#: skins/control/save_search_as_topic.py:20
+#: n/skins/control/save_search_as_topic.py:20
msgid "Topic added."
msgstr "Thème ajouté."
-#: skins/custom_content/content_status_history.pt:12
-#: skins/custom_content/transition_form.pt:25
-msgid "Current state:"
-msgstr "Ãtat actuel :"
-
-#: skins/custom_content/content_status_history.pt:9
-#: skins/custom_content/transition_form.pt:46
+#: n/skins/custom_content/content_status_history.pt:9
+#: n/skins/custom_content/transition_form.pt:46
msgid "Reviewing history"
msgstr "Historique"
-#: skins/custom_content/discussionitem_view.pt:24
+#: n/skins/custom_content/content_status_history.pt:12
+#: n/skins/custom_content/transition_form.pt:25
+msgid "Current state:"
+msgstr "Ãtat actuel :"
+
+#: n/skins/custom_content/discussionitem_view.pt:24
msgid "Above in thread:"
msgstr "Plus haut dans le fil :"
-#: skins/custom_content/event_edit_template.pt:115
-#: skins/custom_content/event_view.pt:57 skins/generic/gruf_macros.pt:57
-#: skins/generic/gruf_macros.pt:313 skins/generic/header_widgets.pt:24
-#: skins/generic/header_widgets.pt:85
-msgid "Description"
-msgstr "Description"
-
-#: skins/custom_content/event_edit_template.pt:121
-#: skins/custom_content/event_view.pt:33
-msgid "Event URL"
-msgstr "Url de l'événement"
-
-#: skins/custom_content/event_edit_template.pt:20
-#: skins/custom_content/event_view.pt:11
+#: n/skins/custom_content/event_edit_template.pt:20
+#: n/skins/custom_content/event_view.pt:11
msgid "Event Name"
msgstr "Titre"
-#: skins/custom_content/event_edit_template.pt:24
-#: skins/custom_content/event_view.pt:27
+#: n/skins/custom_content/event_edit_template.pt:24
+#: n/skins/custom_content/event_view.pt:27
msgid "Event type"
msgstr "Catégorie"
-#: skins/custom_content/event_edit_template.pt:27
-#: skins/custom_content/event_view.pt:17
+#: n/skins/custom_content/event_edit_template.pt:27
+#: n/skins/custom_content/event_view.pt:17
msgid "Location"
msgstr "Lieu"
-#: skins/custom_content/event_edit_template.pt:38
-#: skins/custom_content/event_view.pt:13
+#: n/skins/custom_content/event_edit_template.pt:38
+#: n/skins/custom_content/event_view.pt:13
msgid "Contact Name"
msgstr "Nom du contact"
-#: skins/custom_content/event_edit_template.pt:44
-#: skins/custom_content/event_view.pt:19
+#: n/skins/custom_content/event_edit_template.pt:44
+#: n/skins/custom_content/event_view.pt:19
msgid "Contact Email"
msgstr "E-mail du contact"
-#: skins/custom_content/event_edit_template.pt:50
-#: skins/custom_content/event_view.pt:29
+#: n/skins/custom_content/event_edit_template.pt:50
+#: n/skins/custom_content/event_view.pt:29
msgid "Contact Phone"
msgstr "Tel. du contact"
-#: skins/custom_content/event_edit_template.pt:67
+#: n/skins/custom_content/event_edit_template.pt:67
msgid "Beginning"
msgstr "Début"
-#: skins/custom_content/event_edit_template.pt:78
-#: skins/custom_content/event_edit_template.pt:103 skins/generic/widgets.pt:94
+#: n/skins/custom_content/event_edit_template.pt:78
+#: n/skins/custom_content/event_edit_template.pt:103
+#: n/skins/generic/widgets.pt:94
msgid ""
"${month} / ${day} / ${year} ${hour} :"
" ${minute}"
@@ -299,180 +270,197 @@ msgstr ""
"${day} / ${month} / ${year} ${hour} :"
" ${minute}"
-#: skins/custom_content/event_edit_template.pt:92
+#: n/skins/custom_content/event_edit_template.pt:92
msgid "End"
msgstr "Fin"
-#: skins/custom_content/event_view.pt:44
+#: n/skins/custom_content/event_edit_template.pt:115
+#: n/skins/custom_content/event_view.pt:57 n/skins/generic/gruf_macros.pt:57
+#: n/skins/generic/gruf_macros.pt:313 n/skins/generic/header_widgets.pt:24
+#: n/skins/generic/header_widgets.pt:85
+msgid "Description"
+msgstr "Description"
+
+#: n/skins/custom_content/event_edit_template.pt:121
+#: n/skins/custom_content/event_view.pt:33
+msgid "Event URL"
+msgstr "Url de l'événement"
+
+#: n/skins/custom_content/event_view.pt:44
msgid "Start Date"
msgstr "Début"
-#: skins/custom_content/event_view.pt:49
+#: n/skins/custom_content/event_view.pt:49
msgid "Stop Date"
msgstr "Fin"
-#: skins/custom_content/friendlydatec_editform.pt:14
+#: n/skins/custom_content/friendlydatec_editform.pt:14
msgid "At the least:"
msgstr "Au moins :"
-#: skins/custom_content/friendlydatec_editform.pt:17
+#: n/skins/custom_content/friendlydatec_editform.pt:17
msgid "At the most:"
msgstr "Au plus :"
-#: skins/custom_content/friendlydatec_editform.pt:20
+#: n/skins/custom_content/friendlydatec_editform.pt:20
msgid "Within the day:"
msgstr "Au jour de :"
#. Default: "old"
-#: skins/custom_content/friendlydatec_editform.pt:37
+#: n/skins/custom_content/friendlydatec_editform.pt:37
msgid "daterange_old"
msgstr "passé"
#. Default: "ahead"
-#: skins/custom_content/friendlydatec_editform.pt:40
+#: n/skins/custom_content/friendlydatec_editform.pt:40
msgid "daterange_ahead"
msgstr "futur"
-#: skins/custom_content/listc_edit.pt:16
+#: n/skins/custom_content/listc_edit.pt:16
msgid "Operator:"
msgstr "Opérateur :"
-#: skins/custom_content/listc_edit.pt:18
+#: n/skins/custom_content/listc_edit.pt:18
msgid "or"
msgstr "ou"
-#: skins/custom_content/listc_edit.pt:21
-#: skins/custom_generic/talkback_tree.pt:32
+#: n/skins/custom_content/listc_edit.pt:21
+#: n/skins/custom_generic/talkback_tree.pt:32
msgid "and"
msgstr "et"
-#: skins/custom_content/sic_edit.pt:15
+#: n/skins/custom_content/sic_edit.pt:15
msgid "Minimum"
msgstr "Mininum"
-#: skins/custom_content/sic_edit.pt:18
+#: n/skins/custom_content/sic_edit.pt:18
msgid "Maximum"
msgstr "Maximum"
-#: skins/custom_content/sic_edit.pt:21
+#: n/skins/custom_content/sic_edit.pt:21
msgid "Min/Max"
msgstr "Min/Max"
-#: skins/custom_content/sort_edit.pt:16
+#: n/skins/custom_content/sort_edit.pt:16
msgid "Regular sort"
msgstr "Tri normal"
-#: skins/custom_content/sort_edit.pt:20
+#: n/skins/custom_content/sort_edit.pt:20
msgid "Reversed sort"
msgstr "Tri inversé"
-#: skins/custom_content/topic_view.pt:50
+#: n/skins/custom_content/topic_view.pt:50
msgid "No result"
msgstr "Pas de résultat"
-#: skins/custom_content/topic_view.pt:54
+#: n/skins/custom_content/topic_view.pt:54
msgid "Subtopics"
msgstr "Sous-thèmes"
-#: skins/custom_content/topic_view.pt:57
+#: n/skins/custom_content/topic_view.pt:57
msgid "Topic"
msgstr "Thème"
-#: skins/custom_content/transition_form.pt:15
+#: n/skins/custom_content/transition_form.pt:15
msgid "Transition of ${objectid}."
msgstr "Transition de « ${objectid} »."
-#: skins/custom_content/transition_form.pt:18
+#: n/skins/custom_content/transition_form.pt:18
msgid "Transition description."
msgstr "Description"
-#: skins/custom_content/transition_form.pt:30 skins/generic/wf_macros.pt:19
+#: n/skins/custom_content/transition_form.pt:30
+#: n/skins/generic/wf_macros.pt:19
msgid "Comments"
msgstr "Commentaires"
-#: skins/custom_content/transition_form.pt:40
+#: n/skins/custom_content/transition_form.pt:40
msgid "Transition"
msgstr "Transition"
-#: skins/custom_control/addtoFavorites.py:15
+#: n/skins/custom_control/addtoFavorites.py:15
msgid "Favorites"
msgstr "Favoris"
-#: skins/custom_control/folder_bottom_control.py:17
+#: n/skins/custom_control/folder_bottom_control.py:17
msgid "%d item moved to bottom.%d items moved to bottom."
msgstr "%d élément déplacé en bas.%d éléments déplacés en bas."
-#: skins/custom_control/folder_down_control.py:18
+#: n/skins/custom_control/folder_down_control.py:18
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."
-#: skins/custom_control/folder_rename_control.py:13
+#: n/skins/custom_control/folder_rename_control.py:13
msgid "Item renamed."
msgstr "Ãlément renommé."
-#: skins/custom_control/folder_rename_control.py:15
+#: n/skins/custom_control/folder_rename_control.py:15
msgid "Items renamed."
msgstr "Ãléments renommés."
-#: skins/custom_control/folder_rename_control.py:18
+#: n/skins/custom_control/folder_rename_control.py:18
msgid "This item has not been renamed: \"%s\""
msgstr "Cet élément n'a pas été renommé : \"%s\""
-#: skins/custom_control/folder_rename_control.py:21
+#: n/skins/custom_control/folder_rename_control.py:21
msgid "These items have not been renamed: %s"
msgstr "Ces éléments n'ont pas été renommés : %s"
-#: skins/custom_control/folder_rename_control.py:24
+#: n/skins/custom_control/folder_rename_control.py:24
msgid "Rename failed."
msgstr "Renommage échoué."
-#: skins/custom_control/folder_rename_control.py:26
+#: n/skins/custom_control/folder_rename_control.py:26
msgid "Nothing to change."
msgstr "Aucun changement."
-#: skins/custom_control/folder_top_control.py:17
+#: n/skins/custom_control/folder_top_control.py:17
msgid "%d item moved to top.%d items moved to top."
msgstr "%d élément déplacé en haut.%d éléments déplacés en haut."
-#: skins/custom_control/folder_up_control.py:17
+#: n/skins/custom_control/folder_up_control.py:17
msgid "%d item moved up.%d items moved up."
msgstr "%d élément déplacé vers le haut.%d éléments déplacés vers le haut."
-#: skins/custom_generic/folder_contents_template.pt:26
+#: n/skins/custom_generic/folder_contents_template.pt:26
msgid "Up"
msgstr "Haut"
-#: skins/custom_generic/folder_contents_template.pt:29
+#: n/skins/custom_generic/folder_contents_template.pt:29
msgid "Down"
msgstr "Bas"
#. Default: "by"
-#: skins/custom_generic/folder_contents_template.pt:31
+#: n/skins/custom_generic/folder_contents_template.pt:31
msgid "move_by"
msgstr "de"
-#: skins/custom_generic/folder_contents_template.pt:39
+#: n/skins/custom_generic/folder_contents_template.pt:39
msgid "Top"
msgstr "Premier"
-#: skins/custom_generic/folder_contents_template.pt:41
+#: n/skins/custom_generic/folder_contents_template.pt:41
msgid "Bottom"
msgstr "Dernier"
-#: skins/custom_generic/logged_in.py:28
+#: n/skins/custom_generic/logged_in.py:28
msgid "Login failure"
msgstr "Ãchec de la connexion"
-#: skins/custom_generic/logged_in.py:50
+#: n/skins/custom_generic/logged_in.py:50
+#: n/skins/photo_theme/homepage_dispatcher.py:13
+#: n/skins/photo_theme/homepage_dispatcher.py:16
+#: n/skins/photo_theme/homepage_dispatcher.py:24
+#: n/skins/photo_theme/homepage_dispatcher.py:27
msgid "Login success"
msgstr "Connexion réussie"
-#: skins/custom_generic/mail_password_template.py:30
+#: n/skins/custom_generic/mail_password_template.py:30
msgid "${portal_title}: Membership reminder"
msgstr "${portal_title}Â : rappel du mot de passe"
-#: skins/custom_generic/mail_password_template.py:35
-#: skins/custom_generic/registered_notify_template.py:46
+#: n/skins/custom_generic/mail_password_template.py:35
+#: n/skins/custom_generic/registered_notify_template.py:46
msgid ""
"Your member id and password are: Member ID: ${member_id} Password: "
"${password}"
@@ -480,13 +468,13 @@ msgstr ""
"Vos login et mot de passe sont :login : ${member_id}mot de passe : "
"${password}"
-#: skins/custom_generic/mail_password_template.py:37
-#: skins/custom_generic/registered_notify_template.py:48
+#: n/skins/custom_generic/mail_password_template.py:37
+#: n/skins/custom_generic/registered_notify_template.py:48
msgid "You can use this URL to log in:"
msgstr "Vous pouvez utiliser ce lien pour vous connecter :"
-#: skins/custom_generic/mail_password_template.py:45
-#: skins/custom_generic/registered_notify_template.py:56
+#: n/skins/custom_generic/mail_password_template.py:45
+#: n/skins/custom_generic/registered_notify_template.py:56
msgid ""
"Be aware that this URL might wrap over two lines. If your browser shows an "
"error message when you try to access the URL please make sure that you put "
@@ -496,56 +484,60 @@ msgstr ""
"affiche un message d'erreur lorsque vous essayez d'y accéder, vérifier bien "
"qu'il n'y a pas eu de troncature."
-#: skins/custom_generic/mail_password_template.py:48
-#: skins/generic/load_revision.py:31 skins/generic/load_revision.py:38
+#: n/skins/custom_generic/mail_password_template.py:48
+#: n/skins/generic/load_revision.py:31 n/skins/generic/load_revision.py:38
msgid "%Y/%m/%d at %I:%M:%S %p"
msgstr "%d/%m/%Y Ã %H:%M:%S"
-#: skins/custom_generic/mail_password_template.py:50
+#: n/skins/custom_generic/mail_password_template.py:50
msgid "Request made by IP ${ip} at ${time}"
msgstr "Requête faîte par l'IP ${ip} à ${time}"
-#: skins/custom_generic/main_template_standard.pt:110
-#: skins/custom_generic/talkback_tree.pt:63
-#: skins/generic/main_template_ajax.pt:12
+#: n/skins/custom_generic/main_template_standard.pt:95
+#: n/skins/photo_theme/main_template_standard.pt:96
+msgid "Skip to content"
+msgstr "Sauter au contenu"
+
+#: n/skins/custom_generic/main_template_standard.pt:110
+#: n/skins/custom_generic/talkback_tree.pt:63
+#: n/skins/generic/main_template_ajax.pt:12
+#: n/skins/photo_theme/main_template_standard.pt:118
msgid "Information"
msgstr "Information"
-#: skins/custom_generic/main_template_standard.pt:111
-#: skins/custom_generic/talkback_tree.pt:64
-#: skins/generic/main_template_ajax.pt:13 skins/generic/widgets.pt:17
+#: n/skins/custom_generic/main_template_standard.pt:111
+#: n/skins/custom_generic/talkback_tree.pt:64
+#: n/skins/generic/main_template_ajax.pt:13 n/skins/generic/widgets.pt:17
+#: n/skins/photo_theme/main_template_standard.pt:119
+#: n/skins/photo_theme/search_results_macros.pt:38
msgid "${DYNAMIC_CONTENT}"
msgstr "${DYNAMIC_CONTENT}"
-#: skins/custom_generic/main_template_standard.pt:95
-msgid "Skip to content"
-msgstr "Sauter au contenu"
+#: n/skins/custom_generic/reconfig_template.pt:79
+msgid "Copyright notice"
+msgstr "Mention légale"
-#: skins/custom_generic/reconfig_template.pt:124
+#: n/skins/custom_generic/reconfig_template.pt:83
+msgid "Copyright notice displayed on the portal footer."
+msgstr "Mention légale affichée sur le pied de page du portail."
+
+#: n/skins/custom_generic/reconfig_template.pt:124
msgid "Default ajax options"
msgstr "Options ajax par défaut"
-#: skins/custom_generic/reconfig_template.pt:128
+#: n/skins/custom_generic/reconfig_template.pt:128
msgid "Enable handling of all clicks over links"
msgstr "Activer l'interception de tous les clicks sur les liens"
-#: skins/custom_generic/reconfig_template.pt:133
+#: n/skins/custom_generic/reconfig_template.pt:133
msgid "Enable handling of all forms submissions"
msgstr "Activer l'interception de tous les envois de formulaires"
-#: skins/custom_generic/reconfig_template.pt:79
-msgid "Copyright notice"
-msgstr "Mention légale"
-
-#: skins/custom_generic/reconfig_template.pt:83
-msgid "Copyright notice displayed on the portal footer."
-msgstr "Mention légale affichée sur le pied de page du portail."
-
-#: skins/custom_generic/registered_notify_template.py:30
+#: n/skins/custom_generic/registered_notify_template.py:30
msgid "${portal_title}: Your Membership Information"
msgstr "${portal_title}Â : Vos informations d'inscription"
-#: skins/custom_generic/registered_notify_template.py:35
+#: n/skins/custom_generic/registered_notify_template.py:35
msgid ""
"You have been registered as a member of \"${portal_title}\", which allows "
"you to personalize your view of the website and participate in the community."
@@ -554,216 +546,207 @@ msgstr ""
"vous permet de participer à la rédaction des contenus ainsi qu'à la "
"communauté de ce site."
-#: skins/custom_generic/registered_notify_template.py:39
+#: n/skins/custom_generic/registered_notify_template.py:39
msgid "This describes the purpose of the website:"
msgstr "Voici le but de ce site web :"
-#: skins/custom_generic/registered_notify_template.py:44
+#: n/skins/custom_generic/registered_notify_template.py:44
msgid "Visit us at ${portal_url}"
msgstr "Rejoignez-nous sur ${portal_url}"
-#: skins/custom_generic/talkback_tree.pt:27
+#: n/skins/custom_generic/talkback_tree.pt:27
msgid "by"
msgstr "par"
-#: skins/custom_generic/talkback_tree.pt:36
+#: n/skins/custom_generic/talkback_tree.pt:36
msgid "unknown"
msgstr "inconnu"
#. Default: "at"
-#: skins/custom_generic/talkback_tree.pt:37 skins/generic/recent_news.pt:43
+#: n/skins/custom_generic/talkback_tree.pt:37
+#: n/skins/generic/recent_news.pt:43
msgid "at_(date)"
msgstr "le"
-#: skins/custom_generic/talkback_tree.pt:74
+#: n/skins/custom_generic/talkback_tree.pt:74
msgid "Body"
msgstr "Corps"
-#: skins/custom_generic/talkback_tree.pt:82 skins/generic/gruf_macros.pt:77
-#: skins/generic/gruf_macros.pt:410 skins/generic/header_widgets.pt:32
-#: skins/generic/header_widgets.pt:173 skins/generic/send_email_form.pt:79
+#: n/skins/custom_generic/talkback_tree.pt:82
+#: n/skins/generic/gruf_macros.pt:77 n/skins/generic/gruf_macros.pt:410
+#: n/skins/generic/header_widgets.pt:32 n/skins/generic/header_widgets.pt:173
+#: n/skins/generic/send_email_form.pt:79
msgid "Validate"
msgstr "Valider"
-#: skins/custom_generic/talkback_tree.pt:85
+#: n/skins/custom_generic/talkback_tree.pt:85
msgid "Cancel"
msgstr "Annuler"
-#: skins/custom_generic/viewThreadsAtBottom.pt:10
+#: n/skins/custom_generic/viewThreadsAtBottom.pt:10
msgid "Comments:"
msgstr "Commentaires :"
#. Default: "Previous${number}"
-#: skins/generic/batch_macros.pt:26
+#: n/skins/generic/batch_macros.pt:26
msgid "batch_previous_x_items"
msgstr "${number} précédents"
#. Default: "Next${number}items"
-#: skins/generic/batch_macros.pt:32
+#: n/skins/generic/batch_macros.pt:32
msgid "batch_next_x_items"
msgstr "${number} suivants"
-#: skins/generic/calendar_macros.pt:159 skins/generic/calendar_macros.pt:161
+#: n/skins/generic/calendar_macros.pt:78 n/skins/generic/calendar_macros.pt:81
+#: n/skins/generic/calendar_macros.pt:128
+#: n/skins/generic/calendar_macros.pt:130
+msgid "Click to see hidden items"
+msgstr "Cliquer pour voir les éléments masqués"
+
+#: n/skins/generic/calendar_macros.pt:88
+msgid "${dayName} ${monthName} ${dayNumber}"
+msgstr "${dayName} ${dayNumber} ${monthName}"
+
+#: n/skins/generic/calendar_macros.pt:159
+#: n/skins/generic/calendar_macros.pt:161
msgid "Previous"
msgstr "Précédent"
-#: skins/generic/calendar_macros.pt:164
+#: n/skins/generic/calendar_macros.pt:164
msgid "Week"
msgstr "Semaine"
-#: skins/generic/calendar_macros.pt:166
+#: n/skins/generic/calendar_macros.pt:166
msgid "Month"
msgstr "Mois"
-#: skins/generic/calendar_macros.pt:171 skins/generic/calendar_macros.pt:173
+#: n/skins/generic/calendar_macros.pt:171
+#: n/skins/generic/calendar_macros.pt:173
msgid "Next"
msgstr "Suivant"
-#: skins/generic/calendar_macros.pt:78 skins/generic/calendar_macros.pt:81
-#: skins/generic/calendar_macros.pt:128 skins/generic/calendar_macros.pt:130
-msgid "Click to see hidden items"
-msgstr "Cliquer pour voir les éléments masqués"
-
-#: skins/generic/calendar_macros.pt:88
-msgid "${dayName} ${monthName} ${dayNumber}"
-msgstr "${dayName} ${dayNumber} ${monthName}"
+#: n/skins/generic/content_depublish_form.pt:8
+msgid "Depublish: \"${docTitle}\""
+msgstr "Dépublier : « ${docTitle} »"
-#: skins/generic/content_depublish_form.pt:10
+#: n/skins/generic/content_depublish_form.pt:10
msgid "depublish_transition_explanations"
msgstr ""
"La dépublication de ce document annulera son partage entre tout les membres "
"du site et permettra à son créateur de le modifier à nouveau. Vous devez "
"choisir quel sera l'état de destination pour effectuer l'opération."
-#: skins/generic/content_depublish_form.pt:15
+#: n/skins/generic/content_depublish_form.pt:15
msgid "Select the destination state"
msgstr "Sélectionnez l'état de destination"
-#: skins/generic/content_depublish_form.pt:18
+#: n/skins/generic/content_depublish_form.pt:18
msgid "Private"
msgstr "Privé"
-#: skins/generic/content_depublish_form.pt:22
+#: n/skins/generic/content_depublish_form.pt:22
msgid "Shared"
msgstr "Partagé"
-#: skins/generic/content_depublish_form.pt:26
+#: n/skins/generic/content_depublish_form.pt:26
msgid "Depublish"
msgstr "Dépublier"
-#: skins/generic/content_depublish_form.pt:8
-msgid "Depublish: \"${docTitle}\""
-msgstr "Dépublier : « ${docTitle} »"
-
-#: skins/generic/content_make_private_form.pt:10
+#: n/skins/generic/content_make_private_form.pt:10
msgid "Make private: \"${docTitle}\""
msgstr "Rendre privé : « ${docTitle} »"
#. Default: "share_transition_explanations"
-#: skins/generic/content_make_private_form.pt:11
+#: n/skins/generic/content_make_private_form.pt:11
msgid "make_private_transition_explanations"
msgstr ""
"Une fois ce changement effectué, ce document ne sera visible que par vous "
"même ainsi que les coordonnateurs."
-#: skins/generic/content_make_private_form.pt:16
+#: n/skins/generic/content_make_private_form.pt:16
msgid "Make private"
msgstr "Rendre privé"
-#: skins/generic/content_publish_form.pt:10
+#: n/skins/generic/content_publish_form.pt:8
+msgid "Publish: \"${docTitle}\""
+msgstr "Publier : « ${docTitle} »"
+
+#: n/skins/generic/content_publish_form.pt:10
msgid "publish_transition_explanations"
msgstr ""
"La publication de ce document aura pour effet de le rendre disponible à "
"l'ensemble des membres du site ainsi que d'empêcher sa supression."
-#: skins/generic/content_publish_form.pt:17
-#: skins/generic/content_reject_form.pt:16
+#: n/skins/generic/content_publish_form.pt:17
+#: n/skins/generic/content_reject_form.pt:16
msgid "Notify by e-mail"
msgstr "Notifier par mail"
-#: skins/generic/content_publish_form.pt:26
+#: n/skins/generic/content_publish_form.pt:26
msgid "Publish"
msgstr "Publier"
-#: skins/generic/content_publish_form.pt:8
-msgid "Publish: \"${docTitle}\""
-msgstr "Publier : « ${docTitle} »"
-
-#: skins/generic/content_reject_form.pt:25 skins/generic/pending_members.pt:30
-msgid "Reject"
-msgstr "Rejeter"
-
-#: skins/generic/content_reject_form.pt:8
+#: n/skins/generic/content_reject_form.pt:8
msgid "Reject: \"${objectid}\""
msgstr "Rejeter : « ${objectid} »"
-#: skins/generic/content_reject_form.pt:9
+#: n/skins/generic/content_reject_form.pt:9
msgid "reject_transition_explanations"
msgstr ""
"Rejeter la publication de ce document pour que son propriétaire puisse "
"continuer à travailler."
-#: skins/generic/content_retract_form.pt:15
-msgid "Retract"
-msgstr "Retirer"
+#: n/skins/generic/content_reject_form.pt:25
+#: n/skins/generic/pending_members.pt:30
+msgid "Reject"
+msgstr "Rejeter"
-#: skins/generic/content_retract_form.pt:8
+#: n/skins/generic/content_retract_form.pt:8
msgid "Retract: \"${objectid}\""
msgstr "Retirer : « ${objectid} »"
-#: skins/generic/content_retract_form.pt:9
+#: n/skins/generic/content_retract_form.pt:9
msgid "retract_transition_explanations"
msgstr ""
"Le retrait d'un document a pour effet d'annuler sa soumission pour le "
"remettre à l'état privé."
-#: skins/generic/content_share_form.pt:10
+#: n/skins/generic/content_retract_form.pt:15
+msgid "Retract"
+msgstr "Retirer"
+
+#: n/skins/generic/content_share_form.pt:10
msgid "Share: \"${docTitle}\""
msgstr "Partager : « ${docTitle} »"
-#: skins/generic/content_share_form.pt:11
+#: n/skins/generic/content_share_form.pt:11
msgid "share_transition_explanations"
msgstr ""
"Partager signifie que l'ensemble des utilisateurs ayant accès à ce dossier "
"pourra lire ce document."
-#: skins/generic/content_share_form.pt:16
+#: n/skins/generic/content_share_form.pt:16
msgid "Share"
msgstr "Partager"
-#: skins/generic/content_submit_form.pt:15
-msgid "Submit"
-msgstr "Soumettre"
-
-#: skins/generic/content_submit_form.pt:8
+#: n/skins/generic/content_submit_form.pt:8
msgid "Submit: \"${objectid}\" for Review."
msgstr "Soumettre : « ${objectid} » pour validation."
-#: skins/generic/content_submit_form.pt:9
+#: n/skins/generic/content_submit_form.pt:9
msgid "submit_transition_explanations"
msgstr ""
"Soumettre ce document en vue d'une validation accordée par un modérateur."
-#: skins/generic/default_home_page_content.pt:2
-msgid "Welcome to Plinn!"
-msgstr "Bienvenue sur Plinn !"
-
-#: skins/generic/default_home_page_content.pt:3
-msgid "This is the default home page."
-msgstr "Ceci est la page d'accueil par défaut."
-
-#: skins/generic/default_home_page_content.pt:4
-#: skins/generic/default_member_content.pt:4
-msgid "To change the content just select \"Edit\" in the Tab bar on the top."
-msgstr ""
-"Pour modifier cette page, sélectionner « Modifier » dans la barre d'onglets "
-"ci-dessus. "
+#: n/skins/generic/content_submit_form.pt:15
+msgid "Submit"
+msgstr "Soumettre"
-#: skins/generic/default_member_content.pt:2
+#: n/skins/generic/default_member_content.pt:2
msgid "Default page for ${memberFullName}"
msgstr "Page d'accueil de ${memberFullName}"
-#: skins/generic/default_member_content.pt:3
+#: n/skins/generic/default_member_content.pt:3
msgid ""
"This is the default document created for you when you have been registered "
"in this portal."
@@ -771,322 +754,334 @@ msgstr ""
"Ceci est la page par défaut qui a été créé"
"e automatiquement lorsque vous avez été inscrit sur le portail."
-#: skins/generic/groups_members.pt:35
+#: n/skins/generic/default_member_content.pt:4
+msgid "To change the content just select \"Edit\" in the Tab bar on the top."
+msgstr ""
+"Pour modifier cette page, sélectionner « Modifier » dans la barre d'onglets "
+"ci-dessus. "
+
+#: n/skins/generic/groups_members.pt:35
msgid "Members of \"${groupId}\""
msgstr "Membres pour « ${groupId} »"
-#: skins/generic/groups_members.pt:47
+#: n/skins/generic/groups_members.pt:47
msgid "Groups of \"${groupId}\""
msgstr "Groupes pour « ${groupId} »"
-#: skins/generic/gruf_macros.pt:105
+#: n/skins/generic/gruf_macros.pt:25
+msgid "Group Tree"
+msgstr "Arborescence des groupes"
+
+#: n/skins/generic/gruf_macros.pt:45 n/skins/generic/header_widgets.pt:70
+msgid "Identifier"
+msgstr "Identifiant"
+
+#: n/skins/generic/gruf_macros.pt:63 n/skins/generic/gruf_macros.pt:319
+msgid "Shared folder"
+msgstr "Dossier partagé"
+
+#: n/skins/generic/gruf_macros.pt:66
+msgid "Open shared folder..."
+msgstr "Ouvrir le dossier partagé"
+
+#: n/skins/generic/gruf_macros.pt:69 n/skins/generic/gruf_macros.pt:321
+msgid "Create"
+msgstr "Créer"
+
+#: n/skins/generic/gruf_macros.pt:90
+msgid "Implicit roles"
+msgstr "Rôles implicites"
+
+#: n/skins/generic/gruf_macros.pt:98
+msgid "Explicit roles"
+msgstr "Rôles explicites"
+
+#: n/skins/generic/gruf_macros.pt:105
msgid "Remove"
msgstr "Retirer"
-#: skins/generic/gruf_macros.pt:112
+#: n/skins/generic/gruf_macros.pt:112
msgid "Append"
msgstr "Ajouter"
-#: skins/generic/gruf_macros.pt:129 skins/generic/gruf_macros.pt:164
+#: n/skins/generic/gruf_macros.pt:129 n/skins/generic/gruf_macros.pt:164
msgid "Outside group"
msgstr "Non membres"
-#: skins/generic/gruf_macros.pt:131 skins/generic/gruf_macros.pt:166
+#: n/skins/generic/gruf_macros.pt:131 n/skins/generic/gruf_macros.pt:166
msgid "Inside group"
msgstr "Membres"
-#: skins/generic/gruf_macros.pt:148 skins/generic/gruf_macros.pt:183
+#: n/skins/generic/gruf_macros.pt:148 n/skins/generic/gruf_macros.pt:183
msgid "None"
msgstr "Aucun"
-#: skins/generic/gruf_macros.pt:197
+#: n/skins/generic/gruf_macros.pt:197
msgid "All members"
msgstr "Tous les membres"
-#: skins/generic/gruf_macros.pt:210
+#: n/skins/generic/gruf_macros.pt:210
msgid "Edit"
msgstr "Modifier"
-#: skins/generic/gruf_macros.pt:224
+#: n/skins/generic/gruf_macros.pt:224
msgid "All groups"
msgstr "Tous les groupes"
-#: skins/generic/gruf_macros.pt:247
+#: n/skins/generic/gruf_macros.pt:247
msgid "Add new member"
msgstr "Nouveau membre"
-#: skins/generic/gruf_macros.pt:25
-msgid "Group Tree"
-msgstr "Arborescence des groupes"
-
-#: skins/generic/gruf_macros.pt:250 skins/generic/gruf_macros.pt:365
+#: n/skins/generic/gruf_macros.pt:250 n/skins/generic/gruf_macros.pt:365
msgid "Login"
msgstr "Login"
-#: skins/generic/gruf_macros.pt:256 skins/generic/gruf_macros.pt:378
-#: skins/generic/last_member_logs.pt:23 skins/generic/pending_members.pt:13
+#: 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"
-#: skins/generic/gruf_macros.pt:262 skins/generic/gruf_macros.pt:384
+#: n/skins/generic/gruf_macros.pt:262 n/skins/generic/gruf_macros.pt:384
msgid "Given Name"
msgstr "Prénom"
-#: skins/generic/gruf_macros.pt:268 skins/generic/gruf_macros.pt:390
+#: n/skins/generic/gruf_macros.pt:268 n/skins/generic/gruf_macros.pt:390
msgid "Password"
msgstr "Mot de passe"
-#: skins/generic/gruf_macros.pt:274 skins/generic/gruf_macros.pt:396
+#: n/skins/generic/gruf_macros.pt:274 n/skins/generic/gruf_macros.pt:396
msgid "Confirm"
msgstr "Confirmation"
-#: skins/generic/gruf_macros.pt:280 skins/generic/gruf_macros.pt:402
+#: n/skins/generic/gruf_macros.pt:280 n/skins/generic/gruf_macros.pt:402
msgid "Email address"
msgstr "Adresse e-mail"
-#: skins/generic/gruf_macros.pt:298
+#: n/skins/generic/gruf_macros.pt:298
msgid "Add new group"
msgstr "Nouveau groupe"
-#: skins/generic/gruf_macros.pt:301
+#: n/skins/generic/gruf_macros.pt:301
msgid "Id"
msgstr "Identifiant"
-#: skins/generic/gruf_macros.pt:371
+#: n/skins/generic/gruf_macros.pt:371
msgid "Groups"
msgstr "Groupes"
-#: skins/generic/gruf_macros.pt:373
+#: n/skins/generic/gruf_macros.pt:373
msgid "explicitly:"
msgstr "explicitement :"
-#: skins/generic/gruf_macros.pt:374
+#: n/skins/generic/gruf_macros.pt:374
msgid "implicitly:"
msgstr "implicitement :"
-#: skins/generic/gruf_macros.pt:415
+#: n/skins/generic/gruf_macros.pt:415
msgid "Tree view by this member"
msgstr "Arborescence vue par ce membre"
-#: skins/generic/gruf_macros.pt:416
+#: n/skins/generic/gruf_macros.pt:416
msgid "Click here to see the tree viewed by this member >>"
msgstr "Cliquer ici pour afficher l'arborescence vue par ce membre >>"
-#: skins/generic/gruf_macros.pt:440
+#: n/skins/generic/gruf_macros.pt:440
msgid "collapse all"
msgstr "condenser tout"
-#: skins/generic/gruf_macros.pt:45 skins/generic/header_widgets.pt:70
-msgid "Identifier"
-msgstr "Identifiant"
-
-#: skins/generic/gruf_macros.pt:471
+#: n/skins/generic/gruf_macros.pt:471
msgid "<< Back to member properties"
msgstr "<< Revenir aux propriétés du membre"
-#: skins/generic/gruf_macros.pt:63 skins/generic/gruf_macros.pt:319
-msgid "Shared folder"
-msgstr "Dossier partagé"
+#: n/skins/generic/header_widgets.pt:33
+msgid "Edit all metadata"
+msgstr "Ãditer toutes les métadonnées"
-#: skins/generic/gruf_macros.pt:66
-msgid "Open shared folder..."
-msgstr "Ouvrir le dossier partagé"
+#: n/skins/generic/header_widgets.pt:54
+msgid "Enable Discussion?"
+msgstr "Activer les commentaires ?"
-#: skins/generic/gruf_macros.pt:69 skins/generic/gruf_macros.pt:321
-msgid "Create"
-msgstr "Créer"
+#: n/skins/generic/header_widgets.pt:57
+msgid "Default"
+msgstr "Par défaut"
-#: skins/generic/gruf_macros.pt:90
-msgid "Implicit roles"
-msgstr "Rôles implicites"
+#: n/skins/generic/header_widgets.pt:60
+msgid "Off"
+msgstr "Désactiver"
-#: skins/generic/gruf_macros.pt:98
-msgid "Explicit roles"
-msgstr "Rôles explicites"
+#: n/skins/generic/header_widgets.pt:63
+msgid "On"
+msgstr "Activer"
+
+#: n/skins/generic/header_widgets.pt:91
+msgid "Subject"
+msgstr "Sujet"
-#: skins/generic/header_widgets.pt:108
+#: n/skins/generic/header_widgets.pt:108
msgid "Contributors"
msgstr "Contributeurs"
-#: skins/generic/header_widgets.pt:115
+#: n/skins/generic/header_widgets.pt:115
msgid "Creation Date"
msgstr "Date de création"
-#: skins/generic/header_widgets.pt:118
+#: n/skins/generic/header_widgets.pt:118
msgid "Last Modified Date"
msgstr "Dernière modification"
-#: skins/generic/header_widgets.pt:130
+#: n/skins/generic/header_widgets.pt:130
msgid "Effective Date"
msgstr "Date de mise en ligne"
-#: skins/generic/header_widgets.pt:141
+#: n/skins/generic/header_widgets.pt:141
msgid "Expiration Date"
msgstr "Date d'expiration"
-#: skins/generic/header_widgets.pt:147 skins/generic/wysiwyg_support.pt:108
+#: n/skins/generic/header_widgets.pt:147 n/skins/generic/wysiwyg_support.pt:43
msgid "Format"
msgstr "Format"
-#: skins/generic/header_widgets.pt:155
+#: n/skins/generic/header_widgets.pt:155
msgid "Language"
msgstr "Langue"
-#: skins/generic/header_widgets.pt:163
+#: n/skins/generic/header_widgets.pt:163
msgid "Rights"
msgstr "Droits"
-#: skins/generic/header_widgets.pt:174
+#: n/skins/generic/header_widgets.pt:174
msgid "Edit standard metadata"
msgstr "Ãditer les métadonnées standard"
-#: skins/generic/header_widgets.pt:33
-msgid "Edit all metadata"
-msgstr "Ãditer toutes les métadonnées"
-
-#: skins/generic/header_widgets.pt:54
-msgid "Enable Discussion?"
-msgstr "Activer les commentaires ?"
-
-#: skins/generic/header_widgets.pt:57
-msgid "Default"
-msgstr "Par défaut"
-
-#: skins/generic/header_widgets.pt:60
-msgid "Off"
-msgstr "Désactiver"
-
-#: skins/generic/header_widgets.pt:63
-msgid "On"
-msgstr "Activer"
-
-#: skins/generic/header_widgets.pt:91
-msgid "Subject"
-msgstr "Sujet"
-
-#: skins/generic/last_member_logs.pt:19
+#: n/skins/generic/last_member_logs.pt:19
msgid "Last member login times"
msgstr "Dates de dernière connexion des membres"
-#: skins/generic/last_member_logs.pt:27
+#: n/skins/generic/last_member_logs.pt:27
msgid "Last login time"
msgstr "Dernière connexion"
-#: skins/generic/load_revision.py:29
-#: skins/content/changes_history_template.pt:63
-msgid "nobody"
-msgstr "personne"
-
-#: skins/generic/load_revision.py:38
+#: n/skins/generic/load_revision.py:38
msgid "state of %s"
msgstr "état au %s"
-#: skins/generic/local_roles_macros.pt:160
-msgid "No more group available for the ${role} role in this folder"
-msgstr "Plus de groupe disponible pour le rôle de ${role} dans ce dossier"
-
-#: skins/generic/local_roles_macros.pt:174
-msgid "No group have got the ${role} role in this folder"
-msgstr "Aucun groupe ne dispose du rôle de ${role} dans ce dossier"
-
-#: skins/generic/local_roles_macros.pt:39
-#: skins/generic/local_roles_macros.pt:122
+#: n/skins/generic/local_roles_macros.pt:39
+#: n/skins/generic/local_roles_macros.pt:122
msgid "Current Role: \"${current_role}\""
msgstr "Rôle sélectionné : « ${current_role} »"
-#: skins/generic/local_roles_macros.pt:45
-#: skins/generic/local_roles_macros.pt:127
+#: n/skins/generic/local_roles_macros.pt:45
+#: n/skins/generic/local_roles_macros.pt:127
msgid "ok"
msgstr "ok"
-#: skins/generic/local_roles_macros.pt:66
-#: skins/generic/local_roles_macros.pt:148
+#: n/skins/generic/local_roles_macros.pt:66
+#: n/skins/generic/local_roles_macros.pt:148
msgid "Haven't role"
msgstr "N'a pas le rôle"
-#: skins/generic/local_roles_macros.pt:72
-#: skins/generic/local_roles_macros.pt:150
+#: n/skins/generic/local_roles_macros.pt:72
+#: n/skins/generic/local_roles_macros.pt:150
msgid "Have role"
msgstr "A le rôle"
-#: skins/generic/local_roles_macros.pt:84
+#: n/skins/generic/local_roles_macros.pt:84
msgid "No more member available for the ${role} role in this folder"
msgstr "Plus de membre disponible pour le rôle de ${role} dans ce dossier"
-#: skins/generic/local_roles_macros.pt:99
+#: n/skins/generic/local_roles_macros.pt:99
msgid "Nobody have got the ${role} role in this folder"
msgstr "Personne ne dispose du rôle de ${role} dans ce dossier"
+#: n/skins/generic/local_roles_macros.pt:160
+msgid "No more group available for the ${role} role in this folder"
+msgstr "Plus de groupe disponible pour le rôle de ${role} dans ce dossier"
+
+#: n/skins/generic/local_roles_macros.pt:174
+msgid "No group have got the ${role} role in this folder"
+msgstr "Aucun groupe ne dispose du rôle de ${role} dans ce dossier"
+
#. Default: "%m/%d/%Y %Hh%M"
-#: skins/generic/locale_date_fmt.pt:1
+#: n/skins/generic/locale_date_fmt.pt:1
msgid "locale_date_fmt"
msgstr "%d/%m/%Y %Hh%M"
-#: skins/generic/main_template_macros.pt:109
-msgid "Exit boxes editing"
-msgstr "Quitter l'édition des boîtes"
-
-#: skins/generic/main_template_macros.pt:78
+#: n/skins/generic/main_template_macros.pt:78
+#: n/skins/photo_theme/main_template_macros.pt:91
msgid "You are here:"
msgstr "Vous êtes ici :"
-#: skins/generic/main_template_macros.pt:91
-#: skins/generic/main_template_macros.pt:94
-#: skins/generic/main_template_macros.pt:112
-#: skins/generic/main_template_macros.pt:113
+#: n/skins/generic/main_template_macros.pt:91
+#: n/skins/generic/main_template_macros.pt:94
+#: n/skins/generic/main_template_macros.pt:112
+#: n/skins/generic/main_template_macros.pt:113
+#: n/skins/photo_theme/main_template_macros.pt:100
+#: n/skins/photo_theme/main_template_macros.pt:113
msgid "Paste"
msgstr "Coller"
-#: skins/generic/pending_members.pt:14
+#: n/skins/generic/main_template_macros.pt:109
+#: n/skins/photo_theme/main_template_macros.pt:110
+msgid "Exit boxes editing"
+msgstr "Quitter l'édition des boîtes"
+
+#: n/skins/generic/pending_members.pt:9
+msgid "Review members registration"
+msgstr "Modérer l'inscription des membres"
+
+#: n/skins/generic/pending_members.pt:14
msgid "Email"
msgstr "E-mail"
-#: skins/generic/pending_members.pt:35
+#: n/skins/generic/pending_members.pt:35
msgid "Register"
msgstr "Inscrire"
-#: skins/generic/pending_members.pt:9
-msgid "Review members registration"
-msgstr "Modérer l'inscription des membres"
-
-#: skins/generic/recent_news.pt:21 skins/generic/widgets.pt:123
+#: n/skins/generic/recent_news.pt:21 n/skins/generic/widgets.pt:123
msgid "News"
msgstr "Actualités"
-#: skins/generic/recent_news.pt:36
+#: n/skins/generic/recent_news.pt:36
msgid "by:"
msgstr "par :"
#. Default: "Read More"
-#: skins/generic/recent_news.pt:49
+#: n/skins/generic/recent_news.pt:49
msgid "read_more"
msgstr "lire la suite..."
-#: skins/generic/recent_news.pt:57
+#: n/skins/generic/recent_news.pt:57
msgid "No news is good news!"
msgstr "Pas de nouvelle bonne nouvelle !"
-#: skins/generic/reject_member_form.pt:14
+#: n/skins/generic/reject_member_form.pt:9
+msgid "Reject registration of ${fullname}"
+msgstr "Refuser l'inscription de ${fullname}"
+
+#: n/skins/generic/reject_member_form.pt:14
msgid "From:"
msgstr "De :"
-#: skins/generic/reject_member_form.pt:20
+#: n/skins/generic/reject_member_form.pt:20
msgid "To:"
msgstr "Ã :"
-#: skins/generic/reject_member_form.pt:27 skins/generic/send_email_form.pt:96
+#: n/skins/generic/reject_member_form.pt:27
+#: n/skins/generic/send_email_form.pt:96
msgid "Subject:"
msgstr "Sujet :"
-#: skins/generic/reject_member_form.pt:31
+#: n/skins/generic/reject_member_form.pt:31
msgid "Membership request denied"
msgstr "Demande d'inscription refusée"
-#: skins/generic/reject_member_form.pt:35 skins/generic/send_email_form.pt:101
+#: n/skins/generic/reject_member_form.pt:35
+#: n/skins/generic/send_email_form.pt:101
msgid "Message body:"
msgstr "Texte du message :"
-#: skins/generic/reject_member_form.pt:39
+#: n/skins/generic/reject_member_form.pt:39
msgid ""
"I'm sorry to have to inform you that your request has been denied. Please "
"contact the site administrator."
@@ -1094,157 +1089,206 @@ msgstr ""
"Nous sommes dans le regret de vous informer que votre demande d'inscription "
"a été refusée. Merci de contacter l'administrateur du site."
-#: skins/generic/reject_member_form.pt:45
+#: n/skins/generic/reject_member_form.pt:45
msgid "Send"
msgstr "Envoyer"
-#: skins/generic/reject_member_form.pt:9
-msgid "Reject registration of ${fullname}"
-msgstr "Refuser l'inscription de ${fullname}"
+#: n/skins/generic/request_password_reset_form.pt:11
+msgid "Password reset"
+msgstr ""
-#: skins/generic/revision_context_header.pt:10
+#: n/skins/generic/request_password_reset_form.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 ""
+
+#: n/skins/generic/request_password_reset_form.pt:18
+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_form.pt:25
+msgid " Send "
+msgstr ""
+
+#: n/skins/generic/revision_context_header.pt:10
msgid ""
"This is an old revision of this content, as edited by ${user} at ${datetime}."
msgstr ""
"Ceci est une révision archivée de ce contenu, tel qu'il a été enregistré par "
"${user} le ${datetime}"
-#: skins/generic/revision_context_header.pt:16
+#: n/skins/generic/revision_context_header.pt:16
msgid "Restore this revision"
msgstr "Restaurer cette révision"
-#: skins/generic/revision_context_header.pt:22
+#: n/skins/generic/revision_context_header.pt:22
msgid "â previous revision"
msgstr "â révision précédente"
-#: skins/generic/revision_context_header.pt:27
+#: n/skins/generic/revision_context_header.pt:27
msgid "current revision"
msgstr "révision actuelle"
-#: skins/generic/revision_context_header.pt:29
+#: n/skins/generic/revision_context_header.pt:29
msgid "next revision â"
msgstr "révision suivante â"
-#: skins/generic/search.py:109 skins/generic/search.py:113
+#: n/skins/generic/search.py:109 n/skins/generic/search.py:113
msgid "ascending sort"
msgstr "tri croissant"
-#: skins/generic/search_results_template.pt:16
+#: n/skins/generic/search_results_template.pt:16
msgid "Search Results"
msgstr "Résultats de la recherche"
-#: skins/generic/search_results_template.pt:23
+#: n/skins/generic/search_results_template.pt:23
msgid "Found ${count} ${item_s_match} '${text}'."
msgstr "${count} ${item_s_match} « ${text} »"
-#: skins/generic/search_results_template.pt:27
+#: n/skins/generic/search_results_template.pt:27
msgid "Found 1 item."
msgstr "1 élément trouvé."
-#: skins/generic/search_results_template.pt:28
+#: n/skins/generic/search_results_template.pt:28
msgid "Found ${count} items."
msgstr "${count} éléments trouvés."
-#: skins/generic/search_results_template.pt:41
-msgid "Creator"
-msgstr "Créateur"
-
-#: skins/generic/search_results_template.pt:45
+#: n/skins/generic/search_results_template.pt:45
msgid "Last modified"
msgstr "Dernière modification"
-#: skins/generic/search_results_template.pt:65
-msgid "(No title)"
-msgstr "(Sans titre)"
-
-#: skins/generic/search_results_template.pt:83
+#: n/skins/generic/search_results_template.pt:83
msgid "Save this search as topic"
msgstr "Enregistrer cette recherche dans un thème"
-#: skins/generic/search_results_template.pt:84
+#: n/skins/generic/search_results_template.pt:84
msgid "Title:"
msgstr "Titre :"
-#: skins/generic/search_results_template.pt:89
+#: n/skins/generic/search_results_template.pt:89
msgid "There are no items matching your specified criteria."
msgstr "Aucun élément ne correspond aux critères de recherche."
-#: skins/generic/send_email_form.pt:107
-msgid "Send email"
-msgstr "Envoyer l'email"
-
-#: skins/generic/send_email_form.pt:110
-msgid "Note: This message will be stored in content history."
-msgstr "Nota : Ce message sera enregistré dans l'historique du document."
+#: n/skins/generic/send_email_form.pt:25
+msgid "Send an email"
+msgstr "Envoyer un e-mail"
-#: skins/generic/send_email_form.pt:29
+#: n/skins/generic/send_email_form.pt:29
msgid "Recipients:"
msgstr "Destinataires :"
-#: skins/generic/send_email_form.pt:47
+#: n/skins/generic/send_email_form.pt:47
msgid "(as copy)"
msgstr "(en copie)"
-#: skins/generic/send_email_form.pt:62
+#: n/skins/generic/send_email_form.pt:62
msgid "All (${nofpers} persons)"
msgstr "Tous (${nofpers} personnes)"
-#: skins/generic/send_email_form.pt:69
+#: n/skins/generic/send_email_form.pt:69
msgid "Show list"
msgstr "Afficher la liste"
-#: skins/generic/send_email_form.pt:79
+#: n/skins/generic/send_email_form.pt:79
msgid "(not required)"
msgstr "(facultatif)"
-#: skins/generic/send_email_form.pt:90
+#: n/skins/generic/send_email_form.pt:90
msgid "Others (on address by line)"
msgstr "Autres (une adresse par ligne)"
-#: skins/generic/wf_macros.pt:17
+#: n/skins/generic/send_email_form.pt:107
+msgid "Send email"
+msgstr "Envoyer l'email"
+
+#: n/skins/generic/send_email_form.pt:110
+msgid "Note: This message will be stored in content history."
+msgstr "Nota : Ce message sera enregistré dans l'historique du document."
+
+#: n/skins/generic/wf_macros.pt:17
msgid "Actor"
msgstr "Acteur"
-#: skins/generic/wf_macros.pt:18
+#: n/skins/generic/wf_macros.pt:18
msgid "Action"
msgstr "Action"
-#: skins/generic/wf_macros.pt:20
+#: n/skins/generic/wf_macros.pt:20
msgid "Email sent to"
msgstr "E-mail envoyé à "
-#: skins/generic/wf_macros.pt:28
+#: n/skins/generic/wf_macros.pt:28
msgid "(no comments)"
msgstr "(pas de commentaire)"
-#: skins/generic/wf_macros.pt:33
+#: n/skins/generic/wf_macros.pt:33
msgid "(no email sent)"
msgstr "(pas d'e-mail envoyé)"
-#: skins/generic/widgets.pt:128
-msgid "News Item"
-msgstr "Actualité"
-
-#: skins/generic/widgets.pt:32 skins/generic/widgets.pt:33
+#: n/skins/generic/widgets.pt:32 n/skins/generic/widgets.pt:33
msgid "Edit metadata"
msgstr "Ãditer les métadonnées"
-#: skins/generic/widgets.pt:53
+#: n/skins/generic/widgets.pt:53
msgid "Clipboard"
msgstr "Presse-papier"
-#: skins/generic/wysiwyg_support.pt:112
+#: n/skins/generic/widgets.pt:128
+msgid "News Item"
+msgstr "Actualité"
+
+#: n/skins/generic/wysiwyg_support.pt:47
msgid "Structured text"
msgstr "Texte structuré"
-#: skins/generic/wysiwyg_support.pt:118
+#: n/skins/generic/wysiwyg_support.pt:53
msgid "HTML"
msgstr "HTML"
-#: skins/generic/wysiwyg_support.pt:124
+#: n/skins/generic/wysiwyg_support.pt:59
msgid "Plain text"
msgstr "Texte brut"
+#: n/skins/photo_theme/logout.py:15
+msgid "You have been logged out."
+msgstr ""
+
+#: n/skins/photo_theme/main_template_macros.pt:55
+msgid "Loading progress..."
+msgstr "Chargement en cours..."
+
+#: n/skins/photo_theme/realis_main_macros.pt:28
+msgid "Join"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:12
+msgid "Title"
+msgstr "Titre"
+
+#: n/skins/photo_theme/search_results_macros.pt:13
+msgid "Creator"
+msgstr "Créateur"
+
+#: n/skins/photo_theme/search_results_macros.pt:14
+msgid "Type"
+msgstr "Type"
+
+#: n/skins/photo_theme/search_results_macros.pt:15
+msgid "Date"
+msgstr "Date"
+
+#: n/skins/photo_theme/search_results_macros.pt:32
+msgid "(No title)"
+msgstr "(Sans titre)"
+
+#: n/skins/photo_theme/search_results_macros.pt:45
+msgid "(No description)"
+msgstr ""
+
msgid "${month}/${day}/${year} ${hour}:${minute}:${second}"
msgstr "${day}/${month}/${year} ${hour}:${minute}:${second}"
@@ -1656,9 +1700,6 @@ msgstr "Lister le dossier parent"
msgid "Listen"
msgstr "Ãcouter"
-msgid "Loading progress..."
-msgstr "Chargement en cours..."
-
msgid "Local Roles"
msgstr "Rôles locaux"
@@ -2130,6 +2171,39 @@ msgstr "Cc"
msgid "mail_bcc"
msgstr "Cci"
+#~ msgid "List"
+#~ msgstr "Lister"
+
+#~ msgid "Manage Boxes"
+#~ msgstr "Gérer les boîtes"
+
+#~ msgid "Configure Portal"
+#~ msgstr "Configurer le portail"
+
+#~ msgid "Directory"
+#~ msgstr "Annuaire"
+
+#~ msgid "Add comment..."
+#~ msgstr "Ajouter un commentaire..."
+
+#~ msgid "Calendar View"
+#~ msgstr "Calendrier"
+
+#~ msgid "Created"
+#~ msgstr "Créé"
+
+#~ msgid "Modified"
+#~ msgstr "Modifié"
+
+#~ msgid "Preview:"
+#~ msgstr "Aperçu :"
+
+#~ msgid "Welcome to Plinn!"
+#~ msgstr "Bienvenue sur Plinn !"
+
+#~ msgid "This is the default home page."
+#~ msgstr "Ceci est la page d'accueil par défaut."
+
#~ msgid ""
#~ "You have been registered as a member of \"%(portal_title)s\", which\n"
#~ "allows you to personalize your view of the website and participate in\n"
diff --git a/locales/plinn-manual.pot b/locales/plinn-manual.pot
index dad2ec4..a7b6772 100644
--- a/locales/plinn-manual.pot
+++ b/locales/plinn-manual.pot
@@ -411,9 +411,6 @@ msgstr ""
msgid "Listen"
msgstr ""
-msgid "Loading progress..."
-msgstr ""
-
msgid "Local Roles"
msgstr ""
diff --git a/locales/plinn.pot b/locales/plinn.pot
index d702b38..daff451 100644
--- a/locales/plinn.pot
+++ b/locales/plinn.pot
@@ -1,75 +1,75 @@
-############################################################
-# Copyright © 2005-2009 Benoît Pin #
-# Plinn - http://plinn.org #
-# #
-# This program is free software; you can redistribute it #
-# and/or modify it under the terms of the Creative Commons #
-# "Attribution-Noncommercial 2.0 Generic" #
-# http://creativecommons.org/licenses/by-nc/2.0/ #
-############################################################
+##############################################################################
+#
+# Copyright (c) 2003-2004 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
msgid ""
msgstr ""
-"Project-Id-Version: Plinn 2\n"
-"POT-Creation-Date: $Date: Fri Oct 30 14:42:26 2009 $\n"
-"Language-Team: Benoît Pin \n"
+"Project-Id-Version: 2.0 beta 1\n"
+"POT-Creation-Date: Mon Jul 29 14:16:13 2013\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Zope 3 Developers \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: zope/app/locales/extract.py\n"
-#: EmailNotification.py:38
+#: n/EmailNotification.py:38
msgid "Object deleted"
msgstr ""
-#: Folder.py:149
+#: n/Folder.py:162
msgid "Please rename each listed object."
msgstr ""
-#: MembershipTool.py:401
-#. Default: ""
+#: n/MembershipTool.py:406
msgid "%s's Home"
msgstr ""
-#: MembershipTool.py:402
-#. Default: ""
+#: n/MembershipTool.py:407
msgid "%s's front page"
msgstr ""
-#: profiles/default/actions.xml:107
-msgid "List"
+#: n/RegistrationTool.py:217
+msgid "Invalid reset password request."
msgstr ""
-#: profiles/default/actions.xml:122
-msgid "Manage Boxes"
+#: n/RegistrationTool.py:222
+msgid "Invalid userid."
msgstr ""
-#: profiles/default/actions.xml:134
-#: skins/generic/send_email_form.pt:25
-msgid "Send an email"
-msgstr ""
-
-#: profiles/default/actions.xml:156
-msgid "Configure Portal"
-msgstr ""
-
-#: profiles/default/actions.xml:167
-msgid "Directory"
+#: n/RegistrationTool.py:226
+msgid "Your reset password request has expired. You can ask a new one."
msgstr ""
-#: profiles/default/actions.xml:181
-msgid "Add comment..."
+#: n/RegistrationTool.py:235
+msgid "Password successfully resetted."
msgstr ""
-#: profiles/default/actions.xml:209
-msgid "Calendar View"
+#: n/RegistrationTool.py:237
+msgid "\"%s\" username not found."
msgstr ""
-#: profiles/default/workflows/default_workflow/scripts/sendNotificationEmail.py:52
-#: profiles/default/workflows/folder_workflow/scripts/sendNotificationEmail.py:52
-#: profiles/default/workflows/portfolio_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/default/workflows/default_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/default/workflows/folder_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/default/workflows/portfolio_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/photo/workflows/default_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/photo/workflows/folder_workflow/scripts/sendNotificationEmail.py:52
+#: n/profiles/photo/workflows/portfolio_workflow/scripts/sendNotificationEmail.py:52
msgid "Document state change notificaction"
msgstr ""
-#: profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:35
+#: n/profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:35
+#: n/profiles/photo/workflows/member_workflow/scripts/sendNotificationEmail.py:35
msgid ""
"\n"
"You have been registered as a member of \"%(portal_title)s\", which\n"
@@ -77,1168 +77,2064 @@ msgid ""
"the community.\n"
msgstr ""
-#: profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:43
+#: n/profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:43
+#: n/profiles/photo/workflows/member_workflow/scripts/sendNotificationEmail.py:43
msgid ""
"You will receive an other mail with your randomly-generated\n"
"password. Once you have logged in with this password, you\n"
"may change it to anything you like."
msgstr ""
-#: profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:55
+#: n/profiles/default/workflows/member_workflow/scripts/sendNotificationEmail.py:55
+#: n/profiles/photo/workflows/member_workflow/scripts/sendNotificationEmail.py:55
msgid "your registration has been accepted"
msgstr ""
-#: skins/content/cal_calendar_view.pt:30
-#: skins/content/cal_calendar_view.pt:30
+#: n/profiles/photo/workflows/order_workflow/scripts/sendNotificationEmail.py:51
+msgid "Tracking number"
+msgstr ""
+
+#: n/profiles/photo/workflows/order_workflow/scripts/sendNotificationEmail.py:55
+msgid "Tracking url"
+msgstr ""
+
+#: n/skins/content/cal_calendar_view.pt:30
+#: n/skins/content/cal_calendar_view.pt:30
msgid "Add a new event..."
msgstr ""
-#: skins/content/cal_calendar_view.pt:37
-#: skins/content/cal_calendar_view.pt:40
+#: n/skins/content/cal_calendar_view.pt:37
+#: n/skins/content/cal_calendar_view.pt:40
msgid "Remove event..."
msgstr ""
-#: skins/content/cal_calendar_view.pt:50
+#: n/skins/content/cal_calendar_view.pt:50
msgid "The next click over an event will remove it!"
msgstr ""
-#: skins/content/cal_calendar_view.pt:51
+#: n/skins/content/cal_calendar_view.pt:51
msgid "Cancel delete mode"
msgstr ""
-#: skins/content/changes_history_template.pt:24
+#: n/skins/content/changes_history_template.pt:24
msgid "\302\253 later revisions"
msgstr ""
-#: skins/content/changes_history_template.pt:28
+#: n/skins/content/changes_history_template.pt:28
msgid "earlier revisions \302\273"
msgstr ""
-#: skins/content/changes_history_template.pt:36
-#: skins/content/list_pending_contents.pt:42
-#: skins/generic/wf_macros.pt:16
-msgid "Date"
+#: n/skins/content/changes_history_template.pt:37
+msgid "user"
msgstr ""
-#: skins/content/changes_history_template.pt:37
-msgid "user"
+#: n/skins/content/changes_history_template.pt:63
+#: n/skins/generic/load_revision.py:29
+msgid "nobody"
msgstr ""
-#: skins/content/changes_history_template.pt:70
+#: n/skins/content/changes_history_template.pt:70
msgid "Compare"
msgstr ""
-#: skins/content/changes_history_template.pt:72
+#: n/skins/content/changes_history_template.pt:72
msgid "Please select one revision per column to compare."
msgstr ""
-#: skins/content/content_info.pt:16
-#: skins/content/file_info.pt:12
-#: skins/content/list_pending_contents.pt:31
-#: skins/custom_generic/talkback_tree.pt:68
-#: skins/generic/gruf_macros.pt:51
-#: skins/generic/gruf_macros.pt:307
-#: skins/generic/header_widgets.pt:18
-#: skins/generic/header_widgets.pt:75
-#: skins/generic/search_results_template.pt:37
-msgid "Title"
-msgstr ""
-
-#: skins/content/content_info.pt:20
-#: skins/content/file_info.pt:20
-msgid "Created"
-msgstr ""
-
-#: skins/content/content_info.pt:24
-#: skins/content/file_info.pt:24
-msgid "Modified"
-msgstr ""
-
-#: skins/content/content_info.pt:9
-#: skins/content/file_info.pt:5
-msgid "Preview:"
-msgstr ""
-
-#: skins/content/dateCriterionResolvedDescription.py:15
+#: n/skins/content/dateCriterionResolvedDescription.py:15
msgid "search from the beginning of the world until %s"
msgstr ""
-#: skins/content/dateCriterionResolvedDescription.py:17
+#: n/skins/content/dateCriterionResolvedDescription.py:17
msgid "search from %s and the end of the world"
msgstr ""
-#: skins/content/dateCriterionResolvedDescription.py:19
+#: n/skins/content/dateCriterionResolvedDescription.py:19
msgid "search between %s and %s"
msgstr ""
-#: skins/content/file_info.pt:16
-msgid "Type"
-msgstr ""
-
-#: skins/content/folder_notifications_template.pt:23
-#: skins/content/topic_edit_template.pt:26
-#: skins/custom_content/event_edit_template.pt:135
-#: skins/generic/search_results_template.pt:87
+#: n/skins/content/folder_notifications_template.pt:23
+#: n/skins/content/topic_edit_template.pt:26
+#: n/skins/custom_content/event_edit_template.pt:135
+#: n/skins/generic/search_results_template.pt:87
msgid "Save"
msgstr ""
-#: skins/content/list_pending_contents.pt:23
+#: n/skins/content/list_pending_contents.pt:23
msgid "Pending documents"
msgstr ""
-#: skins/content/list_pending_contents.pt:37
+#: n/skins/content/list_pending_contents.pt:37
msgid "Submit by:"
msgstr ""
-#: skins/content/no_preview.pt:11
+#: n/skins/content/no_preview.pt:11
msgid "No preview available for this file"
msgstr ""
-#: skins/content/topic_edit_template.pt:16
+#: n/skins/content/topic_edit_template.pt:16
msgid "Reuse criteria from parent:"
msgstr ""
-#: skins/content/topic_edit_template.pt:17
+#: n/skins/content/topic_edit_template.pt:17
msgid "yes"
msgstr ""
-#: skins/content/topic_edit_template.pt:18
+#: n/skins/content/topic_edit_template.pt:18
msgid "no"
msgstr ""
-#: skins/content/topic_edit_template.pt:27
-#: skins/generic/gruf_macros.pt:211
-#: skins/generic/gruf_macros.pt:235
+#: n/skins/content/topic_edit_template.pt:27
+#: n/skins/generic/gruf_macros.pt:211
+#: n/skins/generic/gruf_macros.pt:235
msgid "Remove selected"
msgstr ""
-#: skins/content/topic_edit_template.pt:30
+#: n/skins/content/topic_edit_template.pt:30
msgid "New criterion:"
msgstr ""
-#: skins/content/topic_edit_template.pt:33
+#: n/skins/content/topic_edit_template.pt:33
msgid "Name:"
msgstr ""
-#: skins/content/topic_edit_template.pt:41
+#: n/skins/content/topic_edit_template.pt:41
msgid "Type:"
msgstr ""
-#: skins/content/topic_edit_template.pt:51
-#: skins/generic/gruf_macros.pt:288
-#: skins/generic/gruf_macros.pt:327
+#: 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 ""
-#: skins/control/restore_revision.py:9
+#: n/skins/control/restore_revision.py:9
msgid "%(type)s restored."
msgstr ""
-#: skins/control/save_search_as_topic.py:20
+#: n/skins/control/save_search_as_topic.py:20
msgid "Topic added."
msgstr ""
-#: skins/custom_content/content_status_history.pt:12
-#: skins/custom_content/transition_form.pt:25
-msgid "Current state:"
-msgstr ""
-
-#: skins/custom_content/content_status_history.pt:9
-#: skins/custom_content/transition_form.pt:46
+#: n/skins/custom_content/content_status_history.pt:9
+#: n/skins/custom_content/transition_form.pt:46
msgid "Reviewing history"
msgstr ""
-#: skins/custom_content/discussionitem_view.pt:24
-msgid "Above in thread:"
-msgstr ""
-
-#: skins/custom_content/event_edit_template.pt:115
-#: skins/custom_content/event_view.pt:57
-#: skins/generic/gruf_macros.pt:57
-#: skins/generic/gruf_macros.pt:313
-#: skins/generic/header_widgets.pt:24
-#: skins/generic/header_widgets.pt:85
-msgid "Description"
+#: n/skins/custom_content/content_status_history.pt:12
+#: n/skins/custom_content/transition_form.pt:25
+msgid "Current state:"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:121
-#: skins/custom_content/event_view.pt:33
-msgid "Event URL"
+#: n/skins/custom_content/discussionitem_view.pt:24
+msgid "Above in thread:"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:20
-#: skins/custom_content/event_view.pt:11
+#: n/skins/custom_content/event_edit_template.pt:20
+#: n/skins/custom_content/event_view.pt:11
msgid "Event Name"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:24
-#: skins/custom_content/event_view.pt:27
+#: n/skins/custom_content/event_edit_template.pt:24
+#: n/skins/custom_content/event_view.pt:27
msgid "Event type"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:27
-#: skins/custom_content/event_view.pt:17
+#: n/skins/custom_content/event_edit_template.pt:27
+#: n/skins/custom_content/event_view.pt:17
msgid "Location"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:38
-#: skins/custom_content/event_view.pt:13
+#: n/skins/custom_content/event_edit_template.pt:38
+#: n/skins/custom_content/event_view.pt:13
msgid "Contact Name"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:44
-#: skins/custom_content/event_view.pt:19
+#: n/skins/custom_content/event_edit_template.pt:44
+#: n/skins/custom_content/event_view.pt:19
msgid "Contact Email"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:50
-#: skins/custom_content/event_view.pt:29
+#: n/skins/custom_content/event_edit_template.pt:50
+#: n/skins/custom_content/event_view.pt:29
msgid "Contact Phone"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:67
+#: n/skins/custom_content/event_edit_template.pt:67
msgid "Beginning"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:78
-#: skins/custom_content/event_edit_template.pt:103
-#: skins/generic/widgets.pt:94
+#: n/skins/custom_content/event_edit_template.pt:78
+#: n/skins/custom_content/event_edit_template.pt:103
+#: n/skins/generic/widgets.pt:94
msgid "${month} / ${day} / ${year} ${hour} : ${minute}"
msgstr ""
-#: skins/custom_content/event_edit_template.pt:92
+#: n/skins/custom_content/event_edit_template.pt:92
msgid "End"
msgstr ""
-#: skins/custom_content/event_view.pt:44
+#: n/skins/custom_content/event_edit_template.pt:115
+#: n/skins/custom_content/event_view.pt:57
+#: n/skins/generic/gruf_macros.pt:57
+#: n/skins/generic/gruf_macros.pt:313
+#: n/skins/generic/header_widgets.pt:24
+#: n/skins/generic/header_widgets.pt:85
+msgid "Description"
+msgstr ""
+
+#: n/skins/custom_content/event_edit_template.pt:121
+#: n/skins/custom_content/event_view.pt:33
+msgid "Event URL"
+msgstr ""
+
+#: n/skins/custom_content/event_view.pt:44
msgid "Start Date"
msgstr ""
-#: skins/custom_content/event_view.pt:49
+#: n/skins/custom_content/event_view.pt:49
msgid "Stop Date"
msgstr ""
-#: skins/custom_content/friendlydatec_editform.pt:14
+#: n/skins/custom_content/friendlydatec_editform.pt:14
msgid "At the least:"
msgstr ""
-#: skins/custom_content/friendlydatec_editform.pt:17
+#: n/skins/custom_content/friendlydatec_editform.pt:17
msgid "At the most:"
msgstr ""
-#: skins/custom_content/friendlydatec_editform.pt:20
+#: n/skins/custom_content/friendlydatec_editform.pt:20
msgid "Within the day:"
msgstr ""
-#: skins/custom_content/friendlydatec_editform.pt:37
+#: n/skins/custom_content/friendlydatec_editform.pt:37
#. Default: "old"
msgid "daterange_old"
msgstr ""
-#: skins/custom_content/friendlydatec_editform.pt:40
+#: n/skins/custom_content/friendlydatec_editform.pt:40
#. Default: "ahead"
msgid "daterange_ahead"
msgstr ""
-#: skins/custom_content/listc_edit.pt:16
+#: n/skins/custom_content/listc_edit.pt:16
msgid "Operator:"
msgstr ""
-#: skins/custom_content/listc_edit.pt:18
+#: n/skins/custom_content/listc_edit.pt:18
msgid "or"
msgstr ""
-#: skins/custom_content/listc_edit.pt:21
-#: skins/custom_generic/talkback_tree.pt:32
+#: n/skins/custom_content/listc_edit.pt:21
+#: n/skins/custom_generic/talkback_tree.pt:32
msgid "and"
msgstr ""
-#: skins/custom_content/sic_edit.pt:15
+#: n/skins/custom_content/sic_edit.pt:15
msgid "Minimum"
msgstr ""
-#: skins/custom_content/sic_edit.pt:18
+#: n/skins/custom_content/sic_edit.pt:18
msgid "Maximum"
msgstr ""
-#: skins/custom_content/sic_edit.pt:21
+#: n/skins/custom_content/sic_edit.pt:21
msgid "Min/Max"
msgstr ""
-#: skins/custom_content/sort_edit.pt:16
+#: n/skins/custom_content/sort_edit.pt:16
msgid "Regular sort"
msgstr ""
-#: skins/custom_content/sort_edit.pt:20
+#: n/skins/custom_content/sort_edit.pt:20
msgid "Reversed sort"
msgstr ""
-#: skins/custom_content/topic_view.pt:50
+#: n/skins/custom_content/topic_view.pt:50
msgid "No result"
msgstr ""
-#: skins/custom_content/topic_view.pt:54
+#: n/skins/custom_content/topic_view.pt:54
msgid "Subtopics"
msgstr ""
-#: skins/custom_content/topic_view.pt:57
+#: n/skins/custom_content/topic_view.pt:57
msgid "Topic"
msgstr ""
-#: skins/custom_content/transition_form.pt:15
+#: n/skins/custom_content/transition_form.pt:15
msgid "Transition of ${objectid}."
msgstr ""
-#: skins/custom_content/transition_form.pt:18
+#: n/skins/custom_content/transition_form.pt:18
msgid "Transition description."
msgstr ""
-#: skins/custom_content/transition_form.pt:30
-#: skins/generic/wf_macros.pt:19
+#: n/skins/custom_content/transition_form.pt:30
+#: n/skins/generic/wf_macros.pt:19
msgid "Comments"
msgstr ""
-#: skins/custom_content/transition_form.pt:40
+#: n/skins/custom_content/transition_form.pt:40
msgid "Transition"
msgstr ""
-#: skins/custom_control/addtoFavorites.py:15
+#: n/skins/custom_control/addtoFavorites.py:15
msgid "Favorites"
msgstr ""
-#: skins/custom_control/folder_bottom_control.py:17
+#: n/skins/custom_control/folder_bottom_control.py:17
msgid "%d item moved to bottom.%d items moved to bottom."
msgstr ""
-#: skins/custom_control/folder_down_control.py:18
+#: n/skins/custom_control/folder_down_control.py:18
msgid "%d item moved down.%d items moved down."
msgstr ""
-#: skins/custom_control/folder_rename_control.py:13
+#: n/skins/custom_control/folder_rename_control.py:13
msgid "Item renamed."
msgstr ""
-#: skins/custom_control/folder_rename_control.py:15
+#: n/skins/custom_control/folder_rename_control.py:15
msgid "Items renamed."
msgstr ""
-#: skins/custom_control/folder_rename_control.py:18
+#: n/skins/custom_control/folder_rename_control.py:18
msgid "This item has not been renamed: \"%s\""
msgstr ""
-#: skins/custom_control/folder_rename_control.py:21
+#: n/skins/custom_control/folder_rename_control.py:21
msgid "These items have not been renamed: %s"
msgstr ""
-#: skins/custom_control/folder_rename_control.py:24
+#: n/skins/custom_control/folder_rename_control.py:24
msgid "Rename failed."
msgstr ""
-#: skins/custom_control/folder_rename_control.py:26
+#: n/skins/custom_control/folder_rename_control.py:26
msgid "Nothing to change."
msgstr ""
-#: skins/custom_control/folder_top_control.py:17
+#: n/skins/custom_control/folder_top_control.py:17
msgid "%d item moved to top.%d items moved to top."
msgstr ""
-#: skins/custom_control/folder_up_control.py:17
+#: n/skins/custom_control/folder_up_control.py:17
msgid "%d item moved up.%d items moved up."
msgstr ""
-#: skins/custom_generic/folder_contents_template.pt:26
+#: n/skins/custom_generic/folder_contents_template.pt:26
msgid "Up"
msgstr ""
-#: skins/custom_generic/folder_contents_template.pt:29
+#: n/skins/custom_generic/folder_contents_template.pt:29
msgid "Down"
msgstr ""
-#: skins/custom_generic/folder_contents_template.pt:31
+#: n/skins/custom_generic/folder_contents_template.pt:31
#. Default: "by"
msgid "move_by"
msgstr ""
-#: skins/custom_generic/folder_contents_template.pt:39
+#: n/skins/custom_generic/folder_contents_template.pt:39
msgid "Top"
msgstr ""
-#: skins/custom_generic/folder_contents_template.pt:41
+#: n/skins/custom_generic/folder_contents_template.pt:41
msgid "Bottom"
msgstr ""
-#: skins/custom_generic/logged_in.py:28
+#: n/skins/custom_generic/logged_in.py:28
msgid "Login failure"
msgstr ""
-#: skins/custom_generic/logged_in.py:50
+#: n/skins/custom_generic/logged_in.py:50
+#: n/skins/photo_theme/homepage_dispatcher.py:13
+#: n/skins/photo_theme/homepage_dispatcher.py:16
+#: n/skins/photo_theme/homepage_dispatcher.py:24
+#: n/skins/photo_theme/homepage_dispatcher.py:27
msgid "Login success"
msgstr ""
-#: skins/custom_generic/mail_password_template.py:30
+#: n/skins/custom_generic/mail_password_template.py:30
msgid "${portal_title}: Membership reminder"
msgstr ""
-#: skins/custom_generic/mail_password_template.py:35
-#: skins/custom_generic/registered_notify_template.py:46
+#: n/skins/custom_generic/mail_password_template.py:35
+#: n/skins/custom_generic/registered_notify_template.py:46
msgid "Your member id and password are: Member ID: ${member_id} Password: ${password}"
msgstr ""
-#: skins/custom_generic/mail_password_template.py:37
-#: skins/custom_generic/registered_notify_template.py:48
+#: n/skins/custom_generic/mail_password_template.py:37
+#: n/skins/custom_generic/registered_notify_template.py:48
msgid "You can use this URL to log in:"
msgstr ""
-#: skins/custom_generic/mail_password_template.py:45
-#: skins/custom_generic/registered_notify_template.py:56
+#: n/skins/custom_generic/mail_password_template.py:45
+#: n/skins/custom_generic/registered_notify_template.py:56
msgid "Be aware that this URL might wrap over two lines. If your browser shows an error message when you try to access the URL please make sure that you put in the complete string."
msgstr ""
-#: skins/custom_generic/mail_password_template.py:48
-#: skins/generic/load_revision.py:31
-#: skins/generic/load_revision.py:38
+#: n/skins/custom_generic/mail_password_template.py:48
+#: n/skins/generic/load_revision.py:31
+#: n/skins/generic/load_revision.py:38
msgid "%Y/%m/%d at %I:%M:%S %p"
msgstr ""
-#: skins/custom_generic/mail_password_template.py:50
+#: n/skins/custom_generic/mail_password_template.py:50
msgid "Request made by IP ${ip} at ${time}"
msgstr ""
-#: skins/custom_generic/main_template_standard.pt:110
-#: skins/custom_generic/talkback_tree.pt:63
-#: skins/generic/main_template_ajax.pt:12
+#: n/skins/custom_generic/main_template_standard.pt:95
+#: n/skins/photo_theme/main_template_standard.pt:96
+msgid "Skip to content"
+msgstr ""
+
+#: n/skins/custom_generic/main_template_standard.pt:110
+#: n/skins/custom_generic/talkback_tree.pt:63
+#: n/skins/generic/main_template_ajax.pt:12
+#: n/skins/photo_theme/main_template_standard.pt:118
msgid "Information"
msgstr ""
-#: skins/custom_generic/main_template_standard.pt:111
-#: skins/custom_generic/talkback_tree.pt:64
-#: skins/generic/main_template_ajax.pt:13
-#: skins/generic/widgets.pt:17
+#: n/skins/custom_generic/main_template_standard.pt:111
+#: n/skins/custom_generic/talkback_tree.pt:64
+#: n/skins/generic/main_template_ajax.pt:13
+#: n/skins/generic/widgets.pt:17
+#: n/skins/photo_theme/main_template_standard.pt:119
+#: n/skins/photo_theme/search_results_macros.pt:38
msgid "${DYNAMIC_CONTENT}"
msgstr ""
-#: skins/custom_generic/main_template_standard.pt:95
-msgid "Skip to content"
+#: n/skins/custom_generic/reconfig_template.pt:79
+msgid "Copyright notice"
+msgstr ""
+
+#: n/skins/custom_generic/reconfig_template.pt:83
+msgid "Copyright notice displayed on the portal footer."
msgstr ""
-#: skins/custom_generic/reconfig_template.pt:124
+#: n/skins/custom_generic/reconfig_template.pt:124
msgid "Default ajax options"
msgstr ""
-#: skins/custom_generic/reconfig_template.pt:128
+#: n/skins/custom_generic/reconfig_template.pt:128
msgid "Enable handling of all clicks over links"
msgstr ""
-#: skins/custom_generic/reconfig_template.pt:133
+#: n/skins/custom_generic/reconfig_template.pt:133
msgid "Enable handling of all forms submissions"
msgstr ""
-#: skins/custom_generic/reconfig_template.pt:79
-msgid "Copyright notice"
-msgstr ""
-
-#: skins/custom_generic/reconfig_template.pt:83
-msgid "Copyright notice displayed on the portal footer."
-msgstr ""
-
-#: skins/custom_generic/registered_notify_template.py:30
+#: n/skins/custom_generic/registered_notify_template.py:30
msgid "${portal_title}: Your Membership Information"
msgstr ""
-#: skins/custom_generic/registered_notify_template.py:35
+#: n/skins/custom_generic/registered_notify_template.py:35
msgid "You have been registered as a member of \"${portal_title}\", which allows you to personalize your view of the website and participate in the community."
msgstr ""
-#: skins/custom_generic/registered_notify_template.py:39
+#: n/skins/custom_generic/registered_notify_template.py:39
msgid "This describes the purpose of the website:"
msgstr ""
-#: skins/custom_generic/registered_notify_template.py:44
+#: n/skins/custom_generic/registered_notify_template.py:44
msgid "Visit us at ${portal_url}"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:27
+#: n/skins/custom_generic/talkback_tree.pt:27
msgid "by"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:36
+#: n/skins/custom_generic/talkback_tree.pt:36
msgid "unknown"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:37
-#: skins/generic/recent_news.pt:43
+#: n/skins/custom_generic/talkback_tree.pt:37
+#: n/skins/generic/recent_news.pt:43
#. Default: "at"
msgid "at_(date)"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:74
+#: n/skins/custom_generic/talkback_tree.pt:74
msgid "Body"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:82
-#: skins/generic/gruf_macros.pt:77
-#: skins/generic/gruf_macros.pt:410
-#: skins/generic/header_widgets.pt:32
-#: skins/generic/header_widgets.pt:173
-#: skins/generic/send_email_form.pt:79
+#: n/skins/custom_generic/talkback_tree.pt:82
+#: n/skins/generic/gruf_macros.pt:77
+#: n/skins/generic/gruf_macros.pt:410
+#: n/skins/generic/header_widgets.pt:32
+#: n/skins/generic/header_widgets.pt:173
+#: n/skins/generic/send_email_form.pt:79
msgid "Validate"
msgstr ""
-#: skins/custom_generic/talkback_tree.pt:85
+#: n/skins/custom_generic/talkback_tree.pt:85
msgid "Cancel"
msgstr ""
-#: skins/custom_generic/viewThreadsAtBottom.pt:10
+#: n/skins/custom_generic/viewThreadsAtBottom.pt:10
msgid "Comments:"
msgstr ""
-#: skins/generic/batch_macros.pt:26
+#: n/skins/generic/batch_macros.pt:26
#. Default: "Previous${number}"
msgid "batch_previous_x_items"
msgstr ""
-#: skins/generic/batch_macros.pt:32
+#: n/skins/generic/batch_macros.pt:32
#. Default: "Next${number}items"
msgid "batch_next_x_items"
msgstr ""
-#: skins/generic/calendar_macros.pt:159
-#: skins/generic/calendar_macros.pt:161
+#: n/skins/generic/calendar_macros.pt:78
+#: n/skins/generic/calendar_macros.pt:81
+#: n/skins/generic/calendar_macros.pt:128
+#: n/skins/generic/calendar_macros.pt:130
+msgid "Click to see hidden items"
+msgstr ""
+
+#: n/skins/generic/calendar_macros.pt:88
+msgid "${dayName} ${monthName} ${dayNumber}"
+msgstr ""
+
+#: n/skins/generic/calendar_macros.pt:159
+#: n/skins/generic/calendar_macros.pt:161
msgid "Previous"
msgstr ""
-#: skins/generic/calendar_macros.pt:164
+#: n/skins/generic/calendar_macros.pt:164
msgid "Week"
msgstr ""
-#: skins/generic/calendar_macros.pt:166
+#: n/skins/generic/calendar_macros.pt:166
msgid "Month"
msgstr ""
-#: skins/generic/calendar_macros.pt:171
-#: skins/generic/calendar_macros.pt:173
+#: n/skins/generic/calendar_macros.pt:171
+#: n/skins/generic/calendar_macros.pt:173
msgid "Next"
msgstr ""
-#: skins/generic/calendar_macros.pt:78
-#: skins/generic/calendar_macros.pt:81
-#: skins/generic/calendar_macros.pt:128
-#: skins/generic/calendar_macros.pt:130
-msgid "Click to see hidden items"
-msgstr ""
-
-#: skins/generic/calendar_macros.pt:88
-msgid "${dayName} ${monthName} ${dayNumber}"
+#: n/skins/generic/content_depublish_form.pt:8
+msgid "Depublish: \"${docTitle}\""
msgstr ""
-#: skins/generic/content_depublish_form.pt:10
+#: n/skins/generic/content_depublish_form.pt:10
msgid "depublish_transition_explanations"
msgstr ""
-#: skins/generic/content_depublish_form.pt:15
+#: n/skins/generic/content_depublish_form.pt:15
msgid "Select the destination state"
msgstr ""
-#: skins/generic/content_depublish_form.pt:18
+#: n/skins/generic/content_depublish_form.pt:18
msgid "Private"
msgstr ""
-#: skins/generic/content_depublish_form.pt:22
+#: n/skins/generic/content_depublish_form.pt:22
msgid "Shared"
msgstr ""
-#: skins/generic/content_depublish_form.pt:26
+#: n/skins/generic/content_depublish_form.pt:26
msgid "Depublish"
msgstr ""
-#: skins/generic/content_depublish_form.pt:8
-msgid "Depublish: \"${docTitle}\""
-msgstr ""
-
-#: skins/generic/content_make_private_form.pt:10
+#: n/skins/generic/content_make_private_form.pt:10
msgid "Make private: \"${docTitle}\""
msgstr ""
-#: skins/generic/content_make_private_form.pt:11
+#: n/skins/generic/content_make_private_form.pt:11
#. Default: "share_transition_explanations"
msgid "make_private_transition_explanations"
msgstr ""
-#: skins/generic/content_make_private_form.pt:16
+#: n/skins/generic/content_make_private_form.pt:16
msgid "Make private"
msgstr ""
-#: skins/generic/content_publish_form.pt:10
+#: n/skins/generic/content_publish_form.pt:8
+msgid "Publish: \"${docTitle}\""
+msgstr ""
+
+#: n/skins/generic/content_publish_form.pt:10
msgid "publish_transition_explanations"
msgstr ""
-#: skins/generic/content_publish_form.pt:17
-#: skins/generic/content_reject_form.pt:16
+#: n/skins/generic/content_publish_form.pt:17
+#: n/skins/generic/content_reject_form.pt:16
msgid "Notify by e-mail"
msgstr ""
-#: skins/generic/content_publish_form.pt:26
+#: n/skins/generic/content_publish_form.pt:26
msgid "Publish"
msgstr ""
-#: skins/generic/content_publish_form.pt:8
-msgid "Publish: \"${docTitle}\""
-msgstr ""
-
-#: skins/generic/content_reject_form.pt:25
-#: skins/generic/pending_members.pt:30
-msgid "Reject"
-msgstr ""
-
-#: skins/generic/content_reject_form.pt:8
+#: n/skins/generic/content_reject_form.pt:8
msgid "Reject: \"${objectid}\""
msgstr ""
-#: skins/generic/content_reject_form.pt:9
+#: n/skins/generic/content_reject_form.pt:9
msgid "reject_transition_explanations"
msgstr ""
-#: skins/generic/content_retract_form.pt:15
-msgid "Retract"
+#: n/skins/generic/content_reject_form.pt:25
+#: n/skins/generic/pending_members.pt:30
+msgid "Reject"
msgstr ""
-#: skins/generic/content_retract_form.pt:8
+#: n/skins/generic/content_retract_form.pt:8
msgid "Retract: \"${objectid}\""
msgstr ""
-#: skins/generic/content_retract_form.pt:9
+#: n/skins/generic/content_retract_form.pt:9
msgid "retract_transition_explanations"
msgstr ""
-#: skins/generic/content_share_form.pt:10
+#: n/skins/generic/content_retract_form.pt:15
+msgid "Retract"
+msgstr ""
+
+#: n/skins/generic/content_share_form.pt:10
msgid "Share: \"${docTitle}\""
msgstr ""
-#: skins/generic/content_share_form.pt:11
+#: n/skins/generic/content_share_form.pt:11
msgid "share_transition_explanations"
msgstr ""
-#: skins/generic/content_share_form.pt:16
+#: n/skins/generic/content_share_form.pt:16
msgid "Share"
msgstr ""
-#: skins/generic/content_submit_form.pt:15
-msgid "Submit"
-msgstr ""
-
-#: skins/generic/content_submit_form.pt:8
+#: n/skins/generic/content_submit_form.pt:8
msgid "Submit: \"${objectid}\" for Review."
msgstr ""
-#: skins/generic/content_submit_form.pt:9
+#: n/skins/generic/content_submit_form.pt:9
msgid "submit_transition_explanations"
msgstr ""
-#: skins/generic/default_home_page_content.pt:2
-msgid "Welcome to Plinn!"
+#: n/skins/generic/content_submit_form.pt:15
+msgid "Submit"
+msgstr ""
+
+#: n/skins/generic/default_member_content.pt:2
+msgid "Default page for ${memberFullName}"
msgstr ""
-#: skins/generic/default_home_page_content.pt:3
-msgid "This is the default home page."
+#: n/skins/generic/default_member_content.pt:3
+msgid "This is the default document created for you when you have been registered in this portal."
msgstr ""
-#: skins/generic/default_home_page_content.pt:4
-#: skins/generic/default_member_content.pt:4
+#: n/skins/generic/default_member_content.pt:4
msgid "To change the content just select \"Edit\" in the Tab bar on the top."
msgstr ""
-#: skins/generic/default_member_content.pt:2
-msgid "Default page for ${memberFullName}"
+#: n/skins/generic/groups_members.pt:35
+msgid "Members of \"${groupId}\""
msgstr ""
-#: skins/generic/default_member_content.pt:3
-msgid "This is the default document created for you when you have been registered in this portal."
+#: n/skins/generic/groups_members.pt:47
+msgid "Groups of \"${groupId}\""
msgstr ""
-#: skins/generic/groups_members.pt:35
-msgid "Members of \"${groupId}\""
+#: n/skins/generic/gruf_macros.pt:25
+msgid "Group Tree"
msgstr ""
-#: skins/generic/groups_members.pt:47
-msgid "Groups of \"${groupId}\""
+#: n/skins/generic/gruf_macros.pt:45
+#: n/skins/generic/header_widgets.pt:70
+msgid "Identifier"
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:63
+#: n/skins/generic/gruf_macros.pt:319
+msgid "Shared folder"
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:66
+msgid "Open shared folder..."
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:69
+#: n/skins/generic/gruf_macros.pt:321
+msgid "Create"
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:90
+msgid "Implicit roles"
+msgstr ""
+
+#: n/skins/generic/gruf_macros.pt:98
+msgid "Explicit roles"
msgstr ""
-#: skins/generic/gruf_macros.pt:105
+#: n/skins/generic/gruf_macros.pt:105
msgid "Remove"
msgstr ""
-#: skins/generic/gruf_macros.pt:112
+#: n/skins/generic/gruf_macros.pt:112
msgid "Append"
msgstr ""
-#: skins/generic/gruf_macros.pt:129
-#: skins/generic/gruf_macros.pt:164
+#: n/skins/generic/gruf_macros.pt:129
+#: n/skins/generic/gruf_macros.pt:164
msgid "Outside group"
msgstr ""
-#: skins/generic/gruf_macros.pt:131
-#: skins/generic/gruf_macros.pt:166
+#: n/skins/generic/gruf_macros.pt:131
+#: n/skins/generic/gruf_macros.pt:166
msgid "Inside group"
msgstr ""
-#: skins/generic/gruf_macros.pt:148
-#: skins/generic/gruf_macros.pt:183
+#: n/skins/generic/gruf_macros.pt:148
+#: n/skins/generic/gruf_macros.pt:183
msgid "None"
msgstr ""
-#: skins/generic/gruf_macros.pt:197
+#: n/skins/generic/gruf_macros.pt:197
msgid "All members"
msgstr ""
-#: skins/generic/gruf_macros.pt:210
+#: n/skins/generic/gruf_macros.pt:210
msgid "Edit"
msgstr ""
-#: skins/generic/gruf_macros.pt:224
+#: n/skins/generic/gruf_macros.pt:224
msgid "All groups"
msgstr ""
-#: skins/generic/gruf_macros.pt:247
+#: n/skins/generic/gruf_macros.pt:247
msgid "Add new member"
msgstr ""
-#: skins/generic/gruf_macros.pt:25
-msgid "Group Tree"
-msgstr ""
-
-#: skins/generic/gruf_macros.pt:250
-#: skins/generic/gruf_macros.pt:365
+#: n/skins/generic/gruf_macros.pt:250
+#: n/skins/generic/gruf_macros.pt:365
msgid "Login"
msgstr ""
-#: skins/generic/gruf_macros.pt:256
-#: skins/generic/gruf_macros.pt:378
-#: skins/generic/last_member_logs.pt:23
-#: skins/generic/pending_members.pt:13
+#: 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 ""
-#: skins/generic/gruf_macros.pt:262
-#: skins/generic/gruf_macros.pt:384
+#: n/skins/generic/gruf_macros.pt:262
+#: n/skins/generic/gruf_macros.pt:384
msgid "Given Name"
msgstr ""
-#: skins/generic/gruf_macros.pt:268
-#: skins/generic/gruf_macros.pt:390
+#: n/skins/generic/gruf_macros.pt:268
+#: n/skins/generic/gruf_macros.pt:390
msgid "Password"
msgstr ""
-#: skins/generic/gruf_macros.pt:274
-#: skins/generic/gruf_macros.pt:396
+#: n/skins/generic/gruf_macros.pt:274
+#: n/skins/generic/gruf_macros.pt:396
msgid "Confirm"
msgstr ""
-#: skins/generic/gruf_macros.pt:280
-#: skins/generic/gruf_macros.pt:402
+#: n/skins/generic/gruf_macros.pt:280
+#: n/skins/generic/gruf_macros.pt:402
msgid "Email address"
msgstr ""
-#: skins/generic/gruf_macros.pt:298
+#: n/skins/generic/gruf_macros.pt:298
msgid "Add new group"
msgstr ""
-#: skins/generic/gruf_macros.pt:301
+#: n/skins/generic/gruf_macros.pt:301
msgid "Id"
msgstr ""
-#: skins/generic/gruf_macros.pt:371
+#: n/skins/generic/gruf_macros.pt:371
msgid "Groups"
msgstr ""
-#: skins/generic/gruf_macros.pt:373
+#: n/skins/generic/gruf_macros.pt:373
msgid "explicitly:"
msgstr ""
-#: skins/generic/gruf_macros.pt:374
+#: n/skins/generic/gruf_macros.pt:374
msgid "implicitly:"
msgstr ""
-#: skins/generic/gruf_macros.pt:415
+#: n/skins/generic/gruf_macros.pt:415
msgid "Tree view by this member"
msgstr ""
-#: skins/generic/gruf_macros.pt:416
+#: n/skins/generic/gruf_macros.pt:416
msgid "Click here to see the tree viewed by this member >>"
msgstr ""
-#: skins/generic/gruf_macros.pt:440
-#: skins/generic/gruf_macros.pt:440
+#: n/skins/generic/gruf_macros.pt:440
+#: n/skins/generic/gruf_macros.pt:440
msgid "collapse all"
msgstr ""
-#: skins/generic/gruf_macros.pt:45
-#: skins/generic/header_widgets.pt:70
-msgid "Identifier"
+#: n/skins/generic/gruf_macros.pt:471
+msgid "<< Back to member properties"
msgstr ""
-#: skins/generic/gruf_macros.pt:471
-msgid "<< Back to member properties"
+#: n/skins/generic/header_widgets.pt:33
+msgid "Edit all metadata"
msgstr ""
-#: skins/generic/gruf_macros.pt:63
-#: skins/generic/gruf_macros.pt:319
-msgid "Shared folder"
+#: n/skins/generic/header_widgets.pt:54
+msgid "Enable Discussion?"
msgstr ""
-#: skins/generic/gruf_macros.pt:66
-msgid "Open shared folder..."
+#: n/skins/generic/header_widgets.pt:57
+msgid "Default"
msgstr ""
-#: skins/generic/gruf_macros.pt:69
-#: skins/generic/gruf_macros.pt:321
-msgid "Create"
+#: n/skins/generic/header_widgets.pt:60
+msgid "Off"
msgstr ""
-#: skins/generic/gruf_macros.pt:90
-msgid "Implicit roles"
+#: n/skins/generic/header_widgets.pt:63
+msgid "On"
msgstr ""
-#: skins/generic/gruf_macros.pt:98
-msgid "Explicit roles"
+#: n/skins/generic/header_widgets.pt:91
+msgid "Subject"
msgstr ""
-#: skins/generic/header_widgets.pt:108
+#: n/skins/generic/header_widgets.pt:108
msgid "Contributors"
msgstr ""
-#: skins/generic/header_widgets.pt:115
+#: n/skins/generic/header_widgets.pt:115
msgid "Creation Date"
msgstr ""
-#: skins/generic/header_widgets.pt:118
+#: n/skins/generic/header_widgets.pt:118
msgid "Last Modified Date"
msgstr ""
-#: skins/generic/header_widgets.pt:130
+#: n/skins/generic/header_widgets.pt:130
msgid "Effective Date"
msgstr ""
-#: skins/generic/header_widgets.pt:141
+#: n/skins/generic/header_widgets.pt:141
msgid "Expiration Date"
msgstr ""
-#: skins/generic/header_widgets.pt:147
-#: skins/generic/wysiwyg_support.pt:108
+#: n/skins/generic/header_widgets.pt:147
+#: n/skins/generic/wysiwyg_support.pt:43
msgid "Format"
msgstr ""
-#: skins/generic/header_widgets.pt:155
+#: n/skins/generic/header_widgets.pt:155
msgid "Language"
msgstr ""
-#: skins/generic/header_widgets.pt:163
+#: n/skins/generic/header_widgets.pt:163
msgid "Rights"
msgstr ""
-#: skins/generic/header_widgets.pt:174
+#: n/skins/generic/header_widgets.pt:174
msgid "Edit standard metadata"
msgstr ""
-#: skins/generic/header_widgets.pt:33
-msgid "Edit all metadata"
-msgstr ""
-
-#: skins/generic/header_widgets.pt:54
-msgid "Enable Discussion?"
-msgstr ""
-
-#: skins/generic/header_widgets.pt:57
-msgid "Default"
-msgstr ""
-
-#: skins/generic/header_widgets.pt:60
-msgid "Off"
-msgstr ""
-
-#: skins/generic/header_widgets.pt:63
-msgid "On"
-msgstr ""
-
-#: skins/generic/header_widgets.pt:91
-msgid "Subject"
-msgstr ""
-
-#: skins/generic/last_member_logs.pt:19
+#: n/skins/generic/last_member_logs.pt:19
msgid "Last member login times"
msgstr ""
-#: skins/generic/last_member_logs.pt:27
+#: n/skins/generic/last_member_logs.pt:27
msgid "Last login time"
msgstr ""
-#: skins/generic/load_revision.py:29
-#: skins/content/changes_history_template.pt:63
-msgid "nobody"
-msgstr ""
-
-#: skins/generic/load_revision.py:38
+#: n/skins/generic/load_revision.py:38
msgid "state of %s"
msgstr ""
-#: skins/generic/local_roles_macros.pt:160
-msgid "No more group available for the ${role} role in this folder"
-msgstr ""
-
-#: skins/generic/local_roles_macros.pt:174
-msgid "No group have got the ${role} role in this folder"
-msgstr ""
-
-#: skins/generic/local_roles_macros.pt:39
-#: skins/generic/local_roles_macros.pt:122
+#: n/skins/generic/local_roles_macros.pt:39
+#: n/skins/generic/local_roles_macros.pt:122
msgid "Current Role: \"${current_role}\""
msgstr ""
-#: skins/generic/local_roles_macros.pt:45
-#: skins/generic/local_roles_macros.pt:127
+#: n/skins/generic/local_roles_macros.pt:45
+#: n/skins/generic/local_roles_macros.pt:127
msgid "ok"
msgstr ""
-#: skins/generic/local_roles_macros.pt:66
-#: skins/generic/local_roles_macros.pt:148
+#: n/skins/generic/local_roles_macros.pt:66
+#: n/skins/generic/local_roles_macros.pt:148
msgid "Haven't role"
msgstr ""
-#: skins/generic/local_roles_macros.pt:72
-#: skins/generic/local_roles_macros.pt:150
+#: n/skins/generic/local_roles_macros.pt:72
+#: n/skins/generic/local_roles_macros.pt:150
msgid "Have role"
msgstr ""
-#: skins/generic/local_roles_macros.pt:84
+#: n/skins/generic/local_roles_macros.pt:84
msgid "No more member available for the ${role} role in this folder"
msgstr ""
-#: skins/generic/local_roles_macros.pt:99
+#: n/skins/generic/local_roles_macros.pt:99
msgid "Nobody have got the ${role} role in this folder"
msgstr ""
-#: skins/generic/locale_date_fmt.pt:1
-#. Default: "%m/%d/%Y %Hh%M"
-msgid "locale_date_fmt"
+#: n/skins/generic/local_roles_macros.pt:160
+msgid "No more group available for the ${role} role in this folder"
msgstr ""
-#: skins/generic/main_template_macros.pt:109
-msgid "Exit boxes editing"
+#: n/skins/generic/local_roles_macros.pt:174
+msgid "No group have got the ${role} role in this folder"
+msgstr ""
+
+#: n/skins/generic/locale_date_fmt.pt:1
+#. Default: "%m/%d/%Y %Hh%M"
+msgid "locale_date_fmt"
msgstr ""
-#: skins/generic/main_template_macros.pt:78
+#: n/skins/generic/main_template_macros.pt:78
+#: n/skins/photo_theme/main_template_macros.pt:91
msgid "You are here:"
msgstr ""
-#: skins/generic/main_template_macros.pt:91
-#: skins/generic/main_template_macros.pt:94
-#: skins/generic/main_template_macros.pt:112
-#: skins/generic/main_template_macros.pt:113
+#: n/skins/generic/main_template_macros.pt:91
+#: n/skins/generic/main_template_macros.pt:94
+#: n/skins/generic/main_template_macros.pt:112
+#: n/skins/generic/main_template_macros.pt:113
+#: n/skins/photo_theme/main_template_macros.pt:100
+#: n/skins/photo_theme/main_template_macros.pt:100
+#: n/skins/photo_theme/main_template_macros.pt:113
+#: n/skins/photo_theme/main_template_macros.pt:113
msgid "Paste"
msgstr ""
-#: skins/generic/pending_members.pt:14
-msgid "Email"
+#: n/skins/generic/main_template_macros.pt:109
+#: n/skins/photo_theme/main_template_macros.pt:110
+msgid "Exit boxes editing"
msgstr ""
-#: skins/generic/pending_members.pt:35
-msgid "Register"
+#: n/skins/generic/pending_members.pt:9
+msgid "Review members registration"
msgstr ""
-#: skins/generic/pending_members.pt:9
-msgid "Review members registration"
+#: n/skins/generic/pending_members.pt:14
+msgid "Email"
+msgstr ""
+
+#: n/skins/generic/pending_members.pt:35
+msgid "Register"
msgstr ""
-#: skins/generic/recent_news.pt:21
-#: skins/generic/widgets.pt:123
+#: n/skins/generic/recent_news.pt:21
+#: n/skins/generic/widgets.pt:123
msgid "News"
msgstr ""
-#: skins/generic/recent_news.pt:36
+#: n/skins/generic/recent_news.pt:36
msgid "by:"
msgstr ""
-#: skins/generic/recent_news.pt:49
+#: n/skins/generic/recent_news.pt:49
#. Default: "Read More"
msgid "read_more"
msgstr ""
-#: skins/generic/recent_news.pt:57
+#: n/skins/generic/recent_news.pt:57
msgid "No news is good news!"
msgstr ""
-#: skins/generic/reject_member_form.pt:14
+#: n/skins/generic/reject_member_form.pt:9
+msgid "Reject registration of ${fullname}"
+msgstr ""
+
+#: n/skins/generic/reject_member_form.pt:14
msgid "From:"
msgstr ""
-#: skins/generic/reject_member_form.pt:20
+#: n/skins/generic/reject_member_form.pt:20
msgid "To:"
msgstr ""
-#: skins/generic/reject_member_form.pt:27
-#: skins/generic/send_email_form.pt:96
+#: n/skins/generic/reject_member_form.pt:27
+#: n/skins/generic/send_email_form.pt:96
msgid "Subject:"
msgstr ""
-#: skins/generic/reject_member_form.pt:31
+#: n/skins/generic/reject_member_form.pt:31
msgid "Membership request denied"
msgstr ""
-#: skins/generic/reject_member_form.pt:35
-#: skins/generic/send_email_form.pt:101
+#: n/skins/generic/reject_member_form.pt:35
+#: n/skins/generic/send_email_form.pt:101
msgid "Message body:"
msgstr ""
-#: skins/generic/reject_member_form.pt:39
+#: n/skins/generic/reject_member_form.pt:39
msgid "I'm sorry to have to inform you that your request has been denied. Please contact the site administrator."
msgstr ""
-#: skins/generic/reject_member_form.pt:45
+#: n/skins/generic/reject_member_form.pt:45
msgid "Send"
msgstr ""
-#: skins/generic/reject_member_form.pt:9
-msgid "Reject registration of ${fullname}"
+#: n/skins/generic/request_password_reset_form.pt:11
+msgid "Password reset"
+msgstr ""
+
+#: n/skins/generic/request_password_reset_form.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 ""
+
+#: n/skins/generic/request_password_reset_form.pt:18
+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 ""
-#: skins/generic/revision_context_header.pt:10
+#: n/skins/generic/request_password_reset_form.pt:25
+#. Default: "Send"
+msgid " Send "
+msgstr ""
+
+#: n/skins/generic/revision_context_header.pt:10
msgid "This is an old revision of this content, as edited by ${user} at ${datetime}."
msgstr ""
-#: skins/generic/revision_context_header.pt:16
+#: n/skins/generic/revision_context_header.pt:16
msgid "Restore this revision"
msgstr ""
-#: skins/generic/revision_context_header.pt:22
+#: n/skins/generic/revision_context_header.pt:22
msgid "\342\206\220 previous revision"
msgstr ""
-#: skins/generic/revision_context_header.pt:27
+#: n/skins/generic/revision_context_header.pt:27
msgid "current revision"
msgstr ""
-#: skins/generic/revision_context_header.pt:29
+#: n/skins/generic/revision_context_header.pt:29
msgid "next revision \342\206\222"
msgstr ""
-#: skins/generic/search.py:109
-#: skins/generic/search.py:113
+#: n/skins/generic/search.py:109
+#: n/skins/generic/search.py:113
msgid "ascending sort"
msgstr ""
-#: skins/generic/search_results_template.pt:16
+#: n/skins/generic/search_results_template.pt:16
msgid "Search Results"
msgstr ""
-#: skins/generic/search_results_template.pt:23
+#: n/skins/generic/search_results_template.pt:23
msgid "Found ${count} ${item_s_match} '${text}'."
msgstr ""
-#: skins/generic/search_results_template.pt:27
+#: n/skins/generic/search_results_template.pt:27
msgid "Found 1 item."
msgstr ""
-#: skins/generic/search_results_template.pt:28
+#: n/skins/generic/search_results_template.pt:28
msgid "Found ${count} items."
msgstr ""
-#: skins/generic/search_results_template.pt:41
-msgid "Creator"
-msgstr ""
-
-#: skins/generic/search_results_template.pt:45
+#: n/skins/generic/search_results_template.pt:45
msgid "Last modified"
msgstr ""
-#: skins/generic/search_results_template.pt:65
-msgid "(No title)"
-msgstr ""
-
-#: skins/generic/search_results_template.pt:83
+#: n/skins/generic/search_results_template.pt:83
msgid "Save this search as topic"
msgstr ""
-#: skins/generic/search_results_template.pt:84
+#: n/skins/generic/search_results_template.pt:84
msgid "Title:"
msgstr ""
-#: skins/generic/search_results_template.pt:89
+#: n/skins/generic/search_results_template.pt:89
msgid "There are no items matching your specified criteria."
msgstr ""
-#: skins/generic/send_email_form.pt:107
-msgid "Send email"
-msgstr ""
-
-#: skins/generic/send_email_form.pt:110
-msgid "Note: This message will be stored in content history."
+#: n/skins/generic/send_email_form.pt:25
+msgid "Send an email"
msgstr ""
-#: skins/generic/send_email_form.pt:29
+#: n/skins/generic/send_email_form.pt:29
msgid "Recipients:"
msgstr ""
-#: skins/generic/send_email_form.pt:47
+#: n/skins/generic/send_email_form.pt:47
msgid "(as copy)"
msgstr ""
-#: skins/generic/send_email_form.pt:62
+#: n/skins/generic/send_email_form.pt:62
msgid "All (${nofpers} persons)"
msgstr ""
-#: skins/generic/send_email_form.pt:69
+#: n/skins/generic/send_email_form.pt:69
msgid "Show list"
msgstr ""
-#: skins/generic/send_email_form.pt:79
+#: n/skins/generic/send_email_form.pt:79
msgid "(not required)"
msgstr ""
-#: skins/generic/send_email_form.pt:90
+#: n/skins/generic/send_email_form.pt:90
msgid "Others (on address by line)"
msgstr ""
-#: skins/generic/wf_macros.pt:17
+#: n/skins/generic/send_email_form.pt:107
+msgid "Send email"
+msgstr ""
+
+#: n/skins/generic/send_email_form.pt:110
+msgid "Note: This message will be stored in content history."
+msgstr ""
+
+#: n/skins/generic/wf_macros.pt:17
msgid "Actor"
msgstr ""
-#: skins/generic/wf_macros.pt:18
+#: n/skins/generic/wf_macros.pt:18
msgid "Action"
msgstr ""
-#: skins/generic/wf_macros.pt:20
+#: n/skins/generic/wf_macros.pt:20
msgid "Email sent to"
msgstr ""
-#: skins/generic/wf_macros.pt:28
+#: n/skins/generic/wf_macros.pt:28
msgid "(no comments)"
msgstr ""
-#: skins/generic/wf_macros.pt:33
+#: n/skins/generic/wf_macros.pt:33
msgid "(no email sent)"
msgstr ""
-#: skins/generic/widgets.pt:128
-msgid "News Item"
-msgstr ""
-
-#: skins/generic/widgets.pt:32
-#: skins/generic/widgets.pt:33
+#: n/skins/generic/widgets.pt:32
+#: n/skins/generic/widgets.pt:33
msgid "Edit metadata"
msgstr ""
-#: skins/generic/widgets.pt:53
+#: n/skins/generic/widgets.pt:53
msgid "Clipboard"
msgstr ""
-#: skins/generic/wysiwyg_support.pt:112
+#: n/skins/generic/widgets.pt:128
+msgid "News Item"
+msgstr ""
+
+#: n/skins/generic/wysiwyg_support.pt:47
msgid "Structured text"
msgstr ""
-#: skins/generic/wysiwyg_support.pt:118
+#: n/skins/generic/wysiwyg_support.pt:53
msgid "HTML"
msgstr ""
-#: skins/generic/wysiwyg_support.pt:124
+#: n/skins/generic/wysiwyg_support.pt:59
msgid "Plain text"
msgstr ""
+#: n/skins/photo_theme/logout.py:15
+msgid "You have been logged out."
+msgstr ""
+
+#: n/skins/photo_theme/main_template_macros.pt:55
+msgid "Loading progress..."
+msgstr ""
+
+#: n/skins/photo_theme/realis_main_macros.pt:28
+msgid "Join"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:12
+msgid "Title"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:13
+msgid "Creator"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:14
+msgid "Type"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:15
+msgid "Date"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:32
+msgid "(No title)"
+msgstr ""
+
+#: n/skins/photo_theme/search_results_macros.pt:45
+msgid "(No description)"
+msgstr ""
+
+# from plinn-manual
+
+msgid "${month}/${day}/${year} ${hour}:${minute}:${second}"
+msgstr ""
+
+msgid "1 Day"
+msgstr ""
+
+msgid "2 Days"
+msgstr ""
+
+msgid "5 Days"
+msgstr ""
+
+msgid "1 Week"
+msgstr ""
+
+msgid "2 Weeks"
+msgstr ""
+
+msgid "1 Month"
+msgstr ""
+
+msgid "3 Months"
+msgstr ""
+
+msgid "6 Months"
+msgstr ""
+
+msgid "1 Year"
+msgstr ""
+
+msgid "2 years"
+msgstr ""
+
+msgid "Action Box Block"
+msgstr ""
+
+msgid "Action box settings"
+msgstr ""
+
+msgid "Activity block"
+msgstr ""
+
+msgid "Add a document..."
+msgstr ""
+
+msgid "Add an activity"
+msgstr ""
+
+msgid "Add node"
+msgstr ""
+
+msgid "Advanced search"
+msgstr ""
+
+msgid "Anonymous registration"
+msgstr ""
+
+msgid "Appointment"
+msgstr ""
+
+msgid "Append Roles"
+msgstr ""
+
+msgid "Append or remove groups"
+msgstr ""
+
+msgid "Append or remove members"
+msgstr ""
+
+msgid "April"
+msgstr ""
+
+msgid "April_abbr"
+msgstr ""
+
+msgid "Assign local roles: Search Members"
+msgstr ""
+
+msgid "Assign local roles: Search Results"
+msgstr ""
+
+msgid "August"
+msgstr ""
+
+msgid "August_abbr"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "Backlinks"
+msgstr ""
+
+msgid "Base folder of members' folders"
+msgstr ""
+
+msgid "Box title:"
+msgstr ""
+
+msgid "catalog_index_allowedRolesAndUsers"
+msgstr ""
+
+msgid "catalog_index_created"
+msgstr ""
+
+msgid "catalog_index_Creator"
+msgstr ""
+
+msgid "catalog_index_Date"
+msgstr ""
+
+msgid "catalog_index_DateTimeOriginal"
+msgstr ""
+
+msgid "catalog_index_Description"
+msgstr ""
+
+msgid "catalog_index_effective"
+msgstr ""
+
+msgid "catalog_index_expires"
+msgstr ""
+
+msgid "catalog_index_fTitle"
+msgstr ""
+
+msgid "catalog_index_getId"
+msgstr ""
+
+msgid "catalog_index_listCreators"
+msgstr ""
+
+msgid "catalog_index_modified"
+msgstr ""
+
+msgid "catalog_index_path"
+msgstr ""
+
+msgid "catalog_index_portal_type"
+msgstr ""
+
+msgid "catalog_index_review_state"
+msgstr ""
+
+msgid "catalog_index_SearchableText"
+msgstr ""
+
+msgid "catalog_index_Subject"
+msgstr ""
+
+msgid "catalog_index_Title"
+msgstr ""
+
+msgid "Categories:"
+msgstr ""
+
+msgid "Change"
+msgstr ""
+
+msgid "Change image:"
+msgstr ""
+
+msgid "Click here to modify roles..."
+msgstr ""
+
+msgid "Click to get raw image"
+msgstr ""
+
+msgid "Click to see image full-size"
+msgstr ""
+
+msgid "Close"
+msgstr ""
+
+msgid "Collapse"
+msgstr ""
+
+msgid "Comment"
+msgstr ""
+
+msgid "Configure ${portal_calendar} Tool"
+msgstr ""
+
+msgid "Container block"
+msgstr ""
+
+msgid "Contributor"
+msgstr ""
+
+msgid "Convention"
+msgstr ""
+
+msgid "Copy"
+msgstr ""
+
+msgid "Create a mosaic document"
+msgstr ""
+
+msgid "Saved changes."
+msgstr ""
+
+msgid "Import a photo zipped file"
+msgstr ""
+
+msgid "send_email"
+msgstr ""
+
+msgid "Set Mapping"
+msgstr ""
+
+msgid "shared_submit"
+msgstr ""
+
+msgid "sort_by_index_created"
+msgstr ""
+
+msgid "sort_by_index_DateTimeOriginal"
+msgstr ""
+
+msgid "Criteria"
+msgstr ""
+
+msgid "coordonateur"
+msgstr ""
+
+msgid "Currently assigned local roles"
+msgstr ""
+
+msgid "DateTimeOriginal"
+msgstr ""
+
+msgid "Day"
+msgstr ""
+
+msgid "December"
+msgstr ""
+
+msgid "December_abbr"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "depublish"
+msgstr ""
+
+msgid "depublish_to_private"
+msgstr ""
+
+msgid "depublish_to_shared"
+msgstr ""
+
+msgid "Direct_publish"
+msgstr ""
+
+msgid "Directories"
+msgstr ""
+
+msgid "Do you realy want to delete ?"
+msgstr ""
+
+msgid "confirm_layer_delete"
+msgstr ""
+
+msgid "eleve"
+msgstr ""
+
+msgid "Empty image: upload an image file in \"Edit\" tab."
+msgstr ""
+
+msgid "ExifImageWidth"
+msgstr ""
+
+msgid "ExifImageHeight"
+msgstr ""
+
+msgid "Expand"
+msgstr ""
+
+msgid "Export as zip"
+msgstr ""
+
+msgid "ExposureTime"
+msgstr ""
+
+msgid "February"
+msgstr ""
+
+msgid "February_abbr"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "File Block"
+msgstr ""
+
+msgid "Filter (meta_type list) :"
+msgstr ""
+
+msgid "FNumber"
+msgstr ""
+
+msgid "FocalLength"
+msgstr ""
+
+msgid "Folder contents"
+msgstr ""
+
+msgid "Folders are created upon first login."
+msgstr ""
+
+msgid "Fri"
+msgstr ""
+
+msgid "Friday"
+msgstr ""
+
+msgid "Friendly Date Criterion"
+msgstr ""
+
+msgid "Global actions"
+msgstr ""
+
+msgid "Group folder area"
+msgstr ""
+
+msgid "Group's roles settings"
+msgstr ""
+
+msgid "GroupManager"
+msgstr ""
+
+msgid "Height:"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+msgid "Image block"
+msgstr ""
+
+msgid "Implicitly member of groups"
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Insert image"
+msgstr ""
+
+msgid "Insert inside text"
+msgstr ""
+
+msgid "Insert new block:"
+msgstr ""
+
+msgid "Integer Criterion"
+msgstr ""
+
+msgid "ISOSpeedRatings"
+msgstr ""
+
+msgid "January"
+msgstr ""
+
+msgid "January_abbr"
+msgstr ""
+
+msgid "July"
+msgstr ""
+
+msgid "July_abbr"
+msgstr ""
+
+msgid "June"
+msgstr ""
+
+msgid "June_abbr"
+msgstr ""
+
+msgid "immediately"
+msgstr ""
+
+msgid "KB"
+msgstr ""
+
+msgid "lang_iso"
+msgstr ""
+
+msgid "Layer"
+msgstr ""
+
+msgid "Left boxes"
+msgstr ""
+
+msgid "List Criterion"
+msgstr ""
+
+msgid "List Folder"
+msgstr ""
+
+msgid "List parent folder"
+msgstr ""
+
+msgid "Listen"
+msgstr ""
+
+msgid "Local Roles"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "make_private"
+msgstr ""
+
+msgid "Manage Groups"
+msgstr ""
+
+msgid "Manage boxes"
+msgstr ""
+
+msgid "Manage group's datas"
+msgstr ""
+
+msgid "Manage group's members"
+msgstr ""
+
+msgid "Manage portal's groups"
+msgstr ""
+
+msgid "Manage portal's members"
+msgstr ""
+
+msgid "Manager"
+msgstr ""
+
+msgid "March"
+msgstr ""
+
+msgid "March_abbr"
+msgstr ""
+
+msgid "May"
+msgstr ""
+
+msgid "May_abbr"
+msgstr ""
+
+msgid "Meeting"
+msgstr ""
+
+msgid "Member"
+msgstr ""
+
+msgid "Members"
+msgstr ""
+
+msgid "Members folder id"
+msgstr ""
+
+msgid "Member of groups"
+msgstr ""
+
+msgid "Member properties"
+msgstr ""
+
+msgid "member_creation_area_explanations"
+msgstr ""
+
+msgid "member_creation_area_title"
+msgstr ""
+
+msgid "Membership role mappings"
+msgstr ""
+
+msgid "membership_role_mapping_explanations"
+msgstr ""
+
+msgid "Metadata"
+msgstr ""
+
+msgid "Sort Criterion"
+msgstr ""
+
+msgid "sort_by_index_modified"
+msgstr ""
+
+msgid "Modify"
+msgstr ""
+
+msgid "Mon"
+msgstr ""
+
+msgid "Monday"
+msgstr ""
+
+msgid "Move down"
+msgstr ""
+
+msgid "Move left"
+msgstr ""
+
+msgid "Move right"
+msgstr ""
+
+msgid "Move up"
+msgstr ""
+
+msgid "never"
+msgstr ""
+
+msgid "New layer"
+msgstr ""
+
+msgid "No document"
+msgstr ""
+
+msgid "Node block"
+msgstr ""
+
+msgid "November"
+msgstr ""
+
+msgid "November_abbr"
+msgstr ""
+
+msgid "Now"
+msgstr ""
+
+msgid "Number of br:"
+msgstr ""
+
+msgid "October"
+msgstr ""
+
+msgid "October_abbr"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "person selected"
+msgstr ""
+
+msgid "persons selected"
+msgstr ""
+
+msgid "Play"
+msgstr ""
+
+msgid "Portal manager registration"
+msgstr ""
+
+msgid "Portal Role"
+msgstr ""
+
+msgid "Portlets"
+msgstr ""
+
+msgid "Preview..."
+msgstr ""
+
+msgid "private_submit"
+msgstr ""
+
+msgid "Properties of: ${memberFullName}"
+msgstr ""
+
+msgid "publish"
+msgstr ""
+
+msgid "Reader"
+msgstr ""
+
+msgid "Right boxes"
+msgstr ""
+
+msgid "Remove layer"
+msgstr ""
+
+msgid "Reply..."
+msgstr ""
+
+msgid "Represent a simple field-match for a string value."
+msgstr ""
+
+msgid "retract_to_private"
+msgstr ""
+
+msgid "retract_to_shared"
+msgstr ""
+
+msgid "Reviewed registration"
+msgstr ""
+
+msgid "Reviewer"
+msgstr ""
+
+msgid "Role(s)"
+msgstr ""
+
+msgid "Role mapping mismatch : click Validate to solve this problem !"
+msgstr ""
+
+msgid "Roles to assign:"
+msgstr ""
+
+msgid "Root object expression:"
+msgstr ""
+
+msgid "Sat"
+msgstr ""
+
+msgid "Saturday"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search by"
+msgstr ""
+
+msgid "Search Term"
+msgstr ""
+
+msgid "Section block"
+msgstr ""
+
+msgid "Select date indexes"
+msgstr ""
+
+msgid "Select default time range displayed in calendar week view"
+msgstr ""
+
+msgid "Select member area folder type to construct:"
+msgstr ""
+
+msgid "Select Member(s) and a role(s) to assign:"
+msgstr ""
+
+msgid "Select registration mode"
+msgstr ""
+
+msgid "September"
+msgstr ""
+
+msgid "September_abbr"
+msgstr ""
+
+msgid "Set Roles"
+msgstr ""
+
+msgid "share"
+msgstr ""
+
+msgid "Show layer"
+msgstr ""
+
+msgid "Slide show"
+msgstr ""
+
+msgid "Social Event"
+msgstr ""
+
+msgid "Sorry, no members matched your search."
+msgstr ""
+
+msgid "Source file:"
+msgstr ""
+
+msgid "Spacer block"
+msgstr ""
+
+msgid "(start and end time in hour)"
+msgstr ""
+
+msgid "Status history"
+msgstr ""
+
+msgid "Stop"
+msgstr ""
+
+msgid "String Criterion"
+msgstr ""
+
+msgid "Sun"
+msgstr ""
+
+msgid "Sunday"
+msgstr ""
+
+msgid "Text block"
+msgstr ""
+
+msgid "These users currently have local roles assigned in this folder:"
+msgstr ""
+
+
+msgid "This folder has to be in the same container as the membership tool."
+msgstr ""
+
+msgid "Thu"
+msgstr ""
+
+msgid "Thursday"
+msgstr ""
+
+msgid "Title :"
+msgstr ""
+
+msgid "Tree Box Block"
+msgstr ""
+
+msgid "Tree box settings"
+msgstr ""
+
+msgid "Tree viewed by: ${memberFullName}"
+msgstr ""
+
+msgid "Tue"
+msgstr ""
+
+msgid "Tuesday"
+msgstr ""
+
+msgid "Turn folder creation off"
+msgstr ""
+
+msgid "Turn folder creation on"
+msgstr ""
+
+msgid "Two images block"
+msgstr ""
+
+msgid "Upload"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "User Folder-defined Role"
+msgstr ""
+
+msgid "UserManager"
+msgstr ""
+
+msgid "Untitled-"
+msgstr ""
+
+msgid "Validate pending documents"
+msgstr ""
+
+msgid "Visitor"
+msgstr ""
+
+msgid "View"
+msgstr ""
+
+msgid "View history"
+msgstr ""
+
+msgid "View local roles"
+msgstr ""
+
+msgid "Wed"
+msgstr ""
+
+msgid "Wednesday"
+msgstr ""
+
+msgid "Width:"
+msgstr ""
+
+msgid "width / height:"
+msgstr ""
+
+msgid "Work"
+msgstr ""
+
+msgid "Workflow chain"
+msgstr ""
+
+msgid "You are not allowed to delete: "
+msgstr ""
+
+msgid "collaborator"
+msgstr ""
+
+msgid "collapse"
+msgstr ""
+
+msgid "expand"
+msgstr ""
+
+msgid "file type:"
+msgstr ""
+
+msgid "Hide layer"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "name"
+msgstr ""
+
+msgid "No Folders are created."
+msgstr ""
+
+msgid ""
+"Put a friendly interface on date range searches, like 'where effective "
+"date is less than 5 days old'."
+msgstr ""
+
+msgid ""
+"Represent a criterion which is a list of values (for an 'OR' search)."
+msgstr ""
+
+msgid ""
+"Represent a simple field-match for an integer value, including catalog "
+"range searches."
+msgstr ""
+
+msgid ""
+"Represent a mock criterion, to allow spelling the sort order and reversal "
+"items in a catalog query."
+msgstr ""
+
+msgid ""
+"WARNING: The current portal type is unknown. You must change the value to "
+"enable the member area creation."
+msgstr ""
+
+msgid "Approve"
+msgstr ""
+
+msgid "approved"
+msgstr ""
+
+msgid "Disapprove"
+msgstr ""
+
+msgid "pending"
+msgstr ""
+
+msgid "private"
+msgstr ""
+
+msgid "items matching"
+msgstr ""
+
+msgid "item matching"
+msgstr ""
+
+msgid "mail_to"
+msgstr ""
+
+msgid "mail_cc"
+msgstr ""
+
+msgid "mail_bcc"
+msgstr ""
diff --git a/update-i18n.sh b/update-i18n.sh
new file mode 100755
index 0000000..d2283eb
--- /dev/null
+++ b/update-i18n.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+i18nextract --path . --site_zcml ../../etc/site.zcml --domain plinn -o locales
+
+cat locales/plinn.pot locales/plinn-manual.pot > locales/plinn-all.pot
+mv locales/plinn-all.pot locales/plinn.pot
+
+msgmerge --update --no-fuzzy-matching locales/fr/LC_MESSAGES/plinn.po locales/plinn.pot
+msgmerge --update --no-fuzzy-matching locales/en/LC_MESSAGES/plinn.po locales/plinn.pot
--
2.20.1
From 6a89240a614c8f9654ea91b0614170e6cab59ac7 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Mon, 29 Jul 2013 15:19:20 +0200
Subject: [PATCH 05/16] =?utf8?q?Mise=20=C3=A0=20jour=20localisation.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
locales/en/LC_MESSAGES/plinn.mo | Bin 2328 -> 2313 bytes
locales/fr/LC_MESSAGES/plinn.mo | Bin 36503 -> 37466 bytes
locales/fr/LC_MESSAGES/plinn.po | 30 +++++++++++++++---------------
3 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/locales/en/LC_MESSAGES/plinn.mo b/locales/en/LC_MESSAGES/plinn.mo
index 021fbfd23813947c68db55a2aba52d2d87677478..4f25697537c04e0ce265ac24ab9bdc7874ca9f4a 100644
GIT binary patch
delta 880
zcmYk)KWLLd7{~D^O-yZTZGCN%YP5Y@4Y(AVqy`KfDrC|K4h41W&?ZBg;t&uVGNenv
zK?t>_o9Ln-{t1FDbm&kagJ3BRf`1@T=w!F*AmaBIFW~Xs`?)*reeb#FZp~ZvD&M@&
zic#X!bJT3W>@pTRcu}Tieg79ABcoe}~Mk
z*n1lK(H?4nCJy2c^e_}M8^$P}!89t+o2YpUcp9rXhO2IT6QlG$y8Z!b-XA=R-Z8TX
z>)SXDEtEwqa0@lzE)L)WROF9Qfjmbo+`tHa$2Vl{2#MLAb^h~(^EL9=Ti4%mZcEm;
z9XHT$esJzOKRG`m!P{3XSi
z8v2PMSDLjG{X`{99cs1AMp41EOPofGsz9{~WvX4y)6fQWJPJ(rKu0{Rk%3x&FnURO
z_`mpcE>N{ET`OHVopvo3EYvrG)sCSXizWYBx#%aa_=(9(BArR3{NzL;RhtQyx^uIo
Ue0erMm+|Y{;YgtVrE@Cq7YRO0y8r+H
delta 895
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
delta 12739
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
diff --git a/locales/fr/LC_MESSAGES/plinn.po b/locales/fr/LC_MESSAGES/plinn.po
index ca6297c..e3576be 100755
--- a/locales/fr/LC_MESSAGES/plinn.po
+++ b/locales/fr/LC_MESSAGES/plinn.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Plinn 2.0\n"
"POT-Creation-Date: Mon Jul 29 14:16:13 2013\n"
-"PO-Revision-Date: 2009-10-30 14:43+0100\n"
+"PO-Revision-Date: 2013-07-29 15:16+0200\n"
"Last-Translator: Benoît PIN\n"
"Language-Team: CRI http://cri.ensmp.fr\n"
"Language: \n"
@@ -34,23 +34,23 @@ msgstr "Page d'accueil de %s"
#: n/RegistrationTool.py:217
msgid "Invalid reset password request."
-msgstr ""
+msgstr "Demande de réinitialisation de mot de passe invalide."
#: n/RegistrationTool.py:222
msgid "Invalid userid."
-msgstr ""
+msgstr "Login invalide."
#: n/RegistrationTool.py:226
msgid "Your reset password request has expired. You can ask a new one."
-msgstr ""
+msgstr "Votre demande de réinitialisation de mot de passe a expiré. Vous pouvez en demander une nouvelle."
#: n/RegistrationTool.py:235
msgid "Password successfully resetted."
-msgstr ""
+msgstr "Mot de passe correctement réinitialisé."
#: n/RegistrationTool.py:237
msgid "\"%s\" username not found."
-msgstr ""
+msgstr "Nom : « %s » non trouvé."
#: n/profiles/default/workflows/default_workflow/scripts/sendNotificationEmail.py:52
#: n/profiles/default/workflows/folder_workflow/scripts/sendNotificationEmail.py:52
@@ -91,11 +91,11 @@ msgstr "votre inscription a été acceptée"
#: n/profiles/photo/workflows/order_workflow/scripts/sendNotificationEmail.py:51
msgid "Tracking number"
-msgstr ""
+msgstr "Numéro de suivi"
#: n/profiles/photo/workflows/order_workflow/scripts/sendNotificationEmail.py:55
msgid "Tracking url"
-msgstr ""
+msgstr "Url de suivi"
#: n/skins/content/cal_calendar_view.pt:30
msgid "Add a new event..."
@@ -1095,24 +1095,24 @@ msgstr "Envoyer"
#: n/skins/generic/request_password_reset_form.pt:11
msgid "Password reset"
-msgstr ""
+msgstr "Réinitialisation de mot de passe"
#: n/skins/generic/request_password_reset_form.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 ""
+msgstr "Entrez 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_form.pt:18
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 ""
+msgstr "Si cela ne marche pas dans votre cas (par exemple si vous avez oublié votre login ou si vous n'aviez pas entré une adresse email), vous pouvez envoyer un email à ${admin_email}."
#. Default: "Send"
#: n/skins/generic/request_password_reset_form.pt:25
msgid " Send "
-msgstr ""
+msgstr " Envoyer "
#: n/skins/generic/revision_context_header.pt:10
msgid ""
@@ -1255,7 +1255,7 @@ msgstr "Texte brut"
#: n/skins/photo_theme/logout.py:15
msgid "You have been logged out."
-msgstr ""
+msgstr "Vous avez été déconnecté."
#: n/skins/photo_theme/main_template_macros.pt:55
msgid "Loading progress..."
@@ -1263,7 +1263,7 @@ msgstr "Chargement en cours..."
#: n/skins/photo_theme/realis_main_macros.pt:28
msgid "Join"
-msgstr ""
+msgstr "S'inscrire"
#: n/skins/photo_theme/search_results_macros.pt:12
msgid "Title"
@@ -1287,7 +1287,7 @@ msgstr "(Sans titre)"
#: n/skins/photo_theme/search_results_macros.pt:45
msgid "(No description)"
-msgstr ""
+msgstr "(Sans description)"
msgid "${month}/${day}/${year} ${hour}:${minute}:${second}"
msgstr "${day}/${month}/${year} ${hour}:${minute}:${second}"
--
2.20.1
From eac806a4950766d01679df800f20201b4f58cbd2 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Mon, 29 Jul 2013 15:19:54 +0200
Subject: [PATCH 06/16] =?utf8?q?Activation=20du=20lien=20vers=20le=20formu?=
=?utf8?q?laire=20de=20r=C3=A9initialisation=20du=20mot=20de=20passe.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
skins/custom_generic/login_form.pt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/skins/custom_generic/login_form.pt b/skins/custom_generic/login_form.pt
index 0ebaefc..3ab0724 100644
--- a/skins/custom_generic/login_form.pt
+++ b/skins/custom_generic/login_form.pt
@@ -45,9 +45,9 @@
-
+
Having trouble logging in? Make sure to enable cookies in your web
browser.
--
2.20.1
From 773a32c20340b63d244d2a43d6fd62103e723bc5 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Mon, 29 Jul 2013 16:49:50 +0200
Subject: [PATCH 07/16] =?utf8?q?Quelques=20pr=C3=A9paratifs=20avant=20l'im?=
=?utf8?q?pl=C3=A9mentation=20de=20l'envoi=20du=20rappel.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
RegistrationTool.py | 2 +-
skins/generic/request_password_reset_form.py | 16 ++++++++++++++++
...orm.pt => request_password_reset_template.pt} | 4 ++--
3 files changed, 19 insertions(+), 3 deletions(-)
create mode 100644 skins/generic/request_password_reset_form.py
rename skins/generic/{request_password_reset_form.pt => request_password_reset_template.pt} (86%)
diff --git a/RegistrationTool.py b/RegistrationTool.py
index 7d2f29b..109a0d6 100644
--- a/RegistrationTool.py
+++ b/RegistrationTool.py
@@ -204,7 +204,7 @@ class RegistrationTool(BaseRegistrationTool) :
security.declarePrivate('clearExpiredPasswordResetRequests')
def clearExpiredPasswordResetRequests(self):
now = DateTime()
- for uuid, record in self._passwordResetRequest.items() :
+ for uuid, record in self._passwordResetRequests.items() :
userid, date = record
if date < now :
del self._passwordResetRequests[uuid]
diff --git a/skins/generic/request_password_reset_form.py b/skins/generic/request_password_reset_form.py
new file mode 100644
index 0000000..69a34c3
--- /dev/null
+++ b/skins/generic/request_password_reset_form.py
@@ -0,0 +1,16 @@
+##parameters=userid='', requestReset=''
+from Products.CMFCore.utils import getUtilityByInterfaceName
+from Products.Plinn.utils import Message as _
+utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
+rtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IRegistrationTool')
+
+if requestReset :
+ uuid = rtool.requestPasswordReset(userid)
+ context.setStatus(True, _('request for resetting password sent'))
+ return 'yeah !'
+
+options={}
+target = '%s/request_password_reset_form' % utool()
+options['action'] = target
+
+return context.request_password_reset_template(**options)
\ No newline at end of file
diff --git a/skins/generic/request_password_reset_form.pt b/skins/generic/request_password_reset_template.pt
similarity index 86%
rename from skins/generic/request_password_reset_form.pt
rename to skins/generic/request_password_reset_template.pt
index fe7c384..1047b66 100644
--- a/skins/generic/request_password_reset_form.pt
+++ b/skins/generic/request_password_reset_template.pt
@@ -20,9 +20,9 @@
tal:content="ptool/email_from_address" href="mailto:me@here.com"
i18n:name="admin_email">me@here.com.
-
--
2.20.1
From ad865412e1d18480a242f20b48043f27a20f0a94 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Mon, 29 Jul 2013 16:52:12 +0200
Subject: [PATCH 08/16] tabulation converties en espaces.
---
RegistrationTool.py | 356 ++++++++++++++++++++++----------------------
1 file changed, 178 insertions(+), 178 deletions(-)
diff --git a/RegistrationTool.py b/RegistrationTool.py
index 109a0d6..85133ff 100644
--- a/RegistrationTool.py
+++ b/RegistrationTool.py
@@ -18,7 +18,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #
#######################################################################################
""" Plinn registration tool: implements 3 modes to register members:
- anonymous, manager, reviewed.
+ anonymous, manager, reviewed.
@@ -60,181 +60,181 @@ security.declarePublic('DEFAULT_MEMBER_GROUP')
class RegistrationTool(BaseRegistrationTool) :
- """ Create and modify users by making calls to portal_membership.
- """
-
- meta_type = "Plinn Registration Tool"
-
- manage_options = ({'label' : 'Registration mode', 'action' : 'manage_regmode'}, ) + \
- BaseRegistrationTool.manage_options
-
- security = ClassSecurityInfo()
-
- security.declareProtected( ManagePortal, 'manage_regmode' )
- manage_regmode = PageTemplateFile('www/configureRegistrationTool', globals(),
- __name__='manage_regmode')
-
- def __init__(self) :
- self._mode = MODE_ANONYMOUS
- self._chain = ''
- self._passwordResetRequests = OOBTree()
-
- security.declareProtected(ManagePortal, 'configureTool')
- def configureTool(self, registration_mode, chain, REQUEST=None) :
- """ """
-
- if registration_mode not in MODES :
- raise ValueError, "Unknown mode: " + registration_mode
- else :
- self._mode = registration_mode
- self._updatePortalRoleMappingForMode(registration_mode)
-
- wtool = getToolByName(self, 'portal_workflow')
-
- if registration_mode == MODE_REVIEWED :
- if not hasattr(wtool, '_chains_by_type') :
- wtool._chains_by_type = PersistentMapping()
- wfids = []
- chain = chain.strip()
-
- if chain == '(Default)' :
- try : del wtool._chains_by_type['Member Data']
- except KeyError : pass
- self._chain = chain
- else :
- for wfid in chain.replace(',', ' ').split(' ') :
- if wfid :
- if not wtool.getWorkflowById(wfid) :
- raise ValueError, '"%s" is not a workflow ID.' % wfid
- wfids.append(wfid)
-
- wtool._chains_by_type['Member Data'] = tuple(wfids)
- self._chain = ', '.join(wfids)
- else :
- wtool._chains_by_type['Member Data'] = tuple()
-
- if REQUEST :
- REQUEST.RESPONSE.redirect(self.absolute_url() + '/manage_regmode?manage_tabs_message=Saved changes.')
-
- def _updatePortalRoleMappingForMode(self, mode) :
-
- urlTool = getToolByName(self, 'portal_url')
- portal = urlTool.getPortalObject()
-
- if mode in [MODE_ANONYMOUS, MODE_REVIEWED] :
- portal.manage_permission(AddPortalMember, roles = ['Anonymous', 'Manager'], acquire=1)
- elif mode == MODE_MANAGER :
- portal.manage_permission(AddPortalMember, roles = ['Manager', 'UserManager'], acquire=0)
-
- security.declarePublic('getMode')
- def getMode(self) :
- # """ return current mode """
- return self._mode[:]
-
- security.declarePublic('getWfId')
- def getWfChain(self) :
- # """ return current workflow id """
- return self._chain
-
- security.declarePublic('roleMappingMismatch')
- def roleMappingMismatch(self) :
- # """ test if the role mapping is correct for the currrent mode """
-
- mode = self._mode
- urlTool = getToolByName(self, 'portal_url')
- portal = urlTool.getPortalObject()
-
- def rolesOfAddPortalMemberPerm() :
- p=Permission(AddPortalMember, [], portal)
- return p.getRoles()
-
- if mode in [MODE_ANONYMOUS, MODE_REVIEWED] :
- if 'Anonymous' in rolesOfAddPortalMemberPerm() : return False
-
- elif mode == MODE_MANAGER :
- roles = rolesOfAddPortalMemberPerm()
- if 'Manager' in roles or 'UserManager' in roles and len(roles) == 1 and type(roles) == TupleType :
- return False
-
- return True
-
- security.declareProtected(AddPortalMember, 'addMember')
- def addMember(self, id, password, roles=(), groups=(DEFAULT_MEMBER_GROUP,), domains='', properties=None) :
- """ Idem CMFCore but without default role """
- BaseRegistrationTool.addMember(self, id, password, roles=roles,
- domains=domains, properties=properties)
-
- if self.getMode() in [MODE_ANONYMOUS, MODE_MANAGER] :
- gtool = getToolByName(self, 'portal_groups')
- mtool = getToolByName(self, 'portal_membership')
- utool = getToolByName(self, 'portal_url')
- portal = utool.getPortalObject()
- isGrpManager = mtool.checkPermission(ManageGroups, portal) ## TODO : CMF2.1 compat
- aclu = self.aq_inner.acl_users
-
- for gid in groups:
- g = gtool.getGroupById(gid)
- if not isGrpManager :
- if gid != DEFAULT_MEMBER_GROUP:
- raise AccessControl_Unauthorized, 'You are not allowed to join arbitrary group.'
-
- if g is None :
- gtool.addGroup(gid)
- aclu.changeUser(aclu.getGroupPrefix() +gid, roles=['Member', ])
- g = gtool.getGroupById(gid)
- g.addMember(id)
-
-
- def afterAdd(self, member, id, password, properties):
- """ notify member creation """
- member.notifyWorkflowCreated()
- member.indexObject()
-
-
- security.declarePublic('requestPasswordReset')
- def requestPasswordReset(self, userid):
- """ add uuid / (userid, expiration) pair and return uuid """
- self.clearExpiredPasswordResetRequests()
- mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
- if mtool.getMemberById(userid) :
- uuid = str(uuid4())
- self._passwordResetRequests[uuid] = (userid, DateTime() + 1)
- return uuid
-
- security.declarePrivate('clearExpiredPasswordResetRequests')
- def clearExpiredPasswordResetRequests(self):
- now = DateTime()
- for uuid, record in self._passwordResetRequests.items() :
- userid, date = record
- if date < now :
- del self._passwordResetRequests[uuid]
-
-
- security.declarePublic('resetPassword')
- def resetPassword(self, userid, uuid, password, confirm) :
- record = self._passwordResetRequests.get(uuid)
- if not record :
- return _('Invalid reset password request.')
-
- recUserid, expiration = record
-
- if recUserid != userid :
- return _('Invalid userid.')
-
- if expiration < now :
- self.clearExpiredPasswordResetRequests()
- return _('Your reset password request has expired. You can ask a new one.')
-
- msg = self.testPasswordValidity(password, confirm=confirm)
- if not msg : # None if everything ok. Err message otherwise.
- mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
- member = mtool.getMemberById(userid)
- if member :
- member.setSecurityProfile(password=password)
- del self._passwordResetRequests[uuid]
- return _('Password successfully resetted.')
- else :
- return _('"%s" username not found.') % userid
-
-
+ """ Create and modify users by making calls to portal_membership.
+ """
+
+ meta_type = "Plinn Registration Tool"
+
+ manage_options = ({'label' : 'Registration mode', 'action' : 'manage_regmode'}, ) + \
+ BaseRegistrationTool.manage_options
+
+ security = ClassSecurityInfo()
+
+ security.declareProtected( ManagePortal, 'manage_regmode' )
+ manage_regmode = PageTemplateFile('www/configureRegistrationTool', globals(),
+ __name__='manage_regmode')
+
+ def __init__(self) :
+ self._mode = MODE_ANONYMOUS
+ self._chain = ''
+ self._passwordResetRequests = OOBTree()
+
+ security.declareProtected(ManagePortal, 'configureTool')
+ def configureTool(self, registration_mode, chain, REQUEST=None) :
+ """ """
+
+ if registration_mode not in MODES :
+ raise ValueError, "Unknown mode: " + registration_mode
+ else :
+ self._mode = registration_mode
+ self._updatePortalRoleMappingForMode(registration_mode)
+
+ wtool = getToolByName(self, 'portal_workflow')
+
+ if registration_mode == MODE_REVIEWED :
+ if not hasattr(wtool, '_chains_by_type') :
+ wtool._chains_by_type = PersistentMapping()
+ wfids = []
+ chain = chain.strip()
+
+ if chain == '(Default)' :
+ try : del wtool._chains_by_type['Member Data']
+ except KeyError : pass
+ self._chain = chain
+ else :
+ for wfid in chain.replace(',', ' ').split(' ') :
+ if wfid :
+ if not wtool.getWorkflowById(wfid) :
+ raise ValueError, '"%s" is not a workflow ID.' % wfid
+ wfids.append(wfid)
+
+ wtool._chains_by_type['Member Data'] = tuple(wfids)
+ self._chain = ', '.join(wfids)
+ else :
+ wtool._chains_by_type['Member Data'] = tuple()
+
+ if REQUEST :
+ REQUEST.RESPONSE.redirect(self.absolute_url() + '/manage_regmode?manage_tabs_message=Saved changes.')
+
+ def _updatePortalRoleMappingForMode(self, mode) :
+
+ urlTool = getToolByName(self, 'portal_url')
+ portal = urlTool.getPortalObject()
+
+ if mode in [MODE_ANONYMOUS, MODE_REVIEWED] :
+ portal.manage_permission(AddPortalMember, roles = ['Anonymous', 'Manager'], acquire=1)
+ elif mode == MODE_MANAGER :
+ portal.manage_permission(AddPortalMember, roles = ['Manager', 'UserManager'], acquire=0)
+
+ security.declarePublic('getMode')
+ def getMode(self) :
+ # """ return current mode """
+ return self._mode[:]
+
+ security.declarePublic('getWfId')
+ def getWfChain(self) :
+ # """ return current workflow id """
+ return self._chain
+
+ security.declarePublic('roleMappingMismatch')
+ def roleMappingMismatch(self) :
+ # """ test if the role mapping is correct for the currrent mode """
+
+ mode = self._mode
+ urlTool = getToolByName(self, 'portal_url')
+ portal = urlTool.getPortalObject()
+
+ def rolesOfAddPortalMemberPerm() :
+ p=Permission(AddPortalMember, [], portal)
+ return p.getRoles()
+
+ if mode in [MODE_ANONYMOUS, MODE_REVIEWED] :
+ if 'Anonymous' in rolesOfAddPortalMemberPerm() : return False
+
+ elif mode == MODE_MANAGER :
+ roles = rolesOfAddPortalMemberPerm()
+ if 'Manager' in roles or 'UserManager' in roles and len(roles) == 1 and type(roles) == TupleType :
+ return False
+
+ return True
+
+ security.declareProtected(AddPortalMember, 'addMember')
+ def addMember(self, id, password, roles=(), groups=(DEFAULT_MEMBER_GROUP,), domains='', properties=None) :
+ """ Idem CMFCore but without default role """
+ BaseRegistrationTool.addMember(self, id, password, roles=roles,
+ domains=domains, properties=properties)
+
+ if self.getMode() in [MODE_ANONYMOUS, MODE_MANAGER] :
+ gtool = getToolByName(self, 'portal_groups')
+ mtool = getToolByName(self, 'portal_membership')
+ utool = getToolByName(self, 'portal_url')
+ portal = utool.getPortalObject()
+ isGrpManager = mtool.checkPermission(ManageGroups, portal) ## TODO : CMF2.1 compat
+ aclu = self.aq_inner.acl_users
+
+ for gid in groups:
+ g = gtool.getGroupById(gid)
+ if not isGrpManager :
+ if gid != DEFAULT_MEMBER_GROUP:
+ raise AccessControl_Unauthorized, 'You are not allowed to join arbitrary group.'
+
+ if g is None :
+ gtool.addGroup(gid)
+ aclu.changeUser(aclu.getGroupPrefix() +gid, roles=['Member', ])
+ g = gtool.getGroupById(gid)
+ g.addMember(id)
+
+
+ def afterAdd(self, member, id, password, properties):
+ """ notify member creation """
+ member.notifyWorkflowCreated()
+ member.indexObject()
+
+
+ security.declarePublic('requestPasswordReset')
+ def requestPasswordReset(self, userid):
+ """ add uuid / (userid, expiration) pair and return uuid """
+ self.clearExpiredPasswordResetRequests()
+ mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
+ if mtool.getMemberById(userid) :
+ uuid = str(uuid4())
+ self._passwordResetRequests[uuid] = (userid, DateTime() + 1)
+ return uuid
+
+ security.declarePrivate('clearExpiredPasswordResetRequests')
+ def clearExpiredPasswordResetRequests(self):
+ now = DateTime()
+ for uuid, record in self._passwordResetRequests.items() :
+ userid, date = record
+ if date < now :
+ del self._passwordResetRequests[uuid]
+
+
+ security.declarePublic('resetPassword')
+ def resetPassword(self, userid, uuid, password, confirm) :
+ record = self._passwordResetRequests.get(uuid)
+ if not record :
+ return _('Invalid reset password request.')
+
+ recUserid, expiration = record
+
+ if recUserid != userid :
+ return _('Invalid userid.')
+
+ if expiration < now :
+ self.clearExpiredPasswordResetRequests()
+ return _('Your reset password request has expired. You can ask a new one.')
+
+ msg = self.testPasswordValidity(password, confirm=confirm)
+ if not msg : # None if everything ok. Err message otherwise.
+ mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
+ member = mtool.getMemberById(userid)
+ if member :
+ member.setSecurityProfile(password=password)
+ del self._passwordResetRequests[uuid]
+ return _('Password successfully resetted.')
+ else :
+ return _('"%s" username not found.') % userid
+
+
InitializeClass(RegistrationTool)
\ No newline at end of file
--
2.20.1
From 7b145f8e9dea2adbf9616bd40f80be71e557c9bd Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Tue, 30 Jul 2013 15:27:38 +0200
Subject: [PATCH 09/16] =?utf8?q?Suite=20de=20l'impl=C3=A9mentation=20de=20?=
=?utf8?q?la=20r=C3=A9initialisation=20de=20mot=20de=20passe.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
RegistrationTool.py | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/RegistrationTool.py b/RegistrationTool.py
index 85133ff..953e008 100644
--- a/RegistrationTool.py
+++ b/RegistrationTool.py
@@ -196,10 +196,17 @@ class RegistrationTool(BaseRegistrationTool) :
""" add uuid / (userid, expiration) pair and return uuid """
self.clearExpiredPasswordResetRequests()
mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
- if mtool.getMemberById(userid) :
+ member = mtool.getMemberById(userid)
+ if member :
uuid = str(uuid4())
self._passwordResetRequests[uuid] = (userid, DateTime() + 1)
- return uuid
+ mailhost = getUtilityByInterfaceName('Products.MailHost.interfaces.IMailHost')
+ ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
+ utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
+ sender = ptool.getProperty('email_from_address')
+ to = member.getProperty('email')
+ message = self.echange_mail_template(From=sender,
+ To=to)
security.declarePrivate('clearExpiredPasswordResetRequests')
def clearExpiredPasswordResetRequests(self):
--
2.20.1
From 7e74f1754d15f96bd33bae06b855c48c87db2498 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Tue, 30 Jul 2013 22:48:42 +0200
Subject: [PATCH 10/16] Conversion tabulations -> espaces.
---
utils.py | 378 +++++++++++++++++++++++++++----------------------------
1 file changed, 189 insertions(+), 189 deletions(-)
diff --git a/utils.py b/utils.py
index 863b94e..470b49a 100755
--- a/utils.py
+++ b/utils.py
@@ -49,234 +49,234 @@ security = ModuleSecurityInfo( 'Products.Plinn.utils' )
security.declarePublic('thisObjectComeFromPortalSkin')
def thisObjectComeFromPortalSkin(ob, portal=None):
- """ check if ob comes from portal_skins """
- if not portal :
- portal = getToolByName(ob, 'portal_url')
- portal = portal.getPortalObject()
-
- if ob.aq_self == portal.aq_self :
- return False
-
- obId = ob.id
- if callable(obId) :
- obId = obId()
-
- sob = getattr(portal, obId, None)
-
- if sob is None :
- return False
- elif not(sob.aq_inner.aq_self is ob.aq_inner.aq_self) :
- return False
- else :
- try :
- portal._checkId(obId)
- return True
- except BadRequest :
- return False
+ """ check if ob comes from portal_skins """
+ if not portal :
+ portal = getToolByName(ob, 'portal_url')
+ portal = portal.getPortalObject()
+
+ if ob.aq_self == portal.aq_self :
+ return False
+
+ obId = ob.id
+ if callable(obId) :
+ obId = obId()
+
+ sob = getattr(portal, obId, None)
+
+ if sob is None :
+ return False
+ elif not(sob.aq_inner.aq_self is ob.aq_inner.aq_self) :
+ return False
+ else :
+ try :
+ portal._checkId(obId)
+ return True
+ except BadRequest :
+ return False
security.declarePublic('listActionProviders_')
def listActionProviders_(context) :
- atool = getToolByName(context, 'portal_actions')
- return atool.listActionProviders()
+ atool = getToolByName(context, 'portal_actions')
+ return atool.listActionProviders()
def capitalizeCompoundGivenName(givenName) :
- givenName = givenName.strip()
- givenNames = ' '.join(givenName.split('-')).split()
- givenNameCapitalized = '-'.join(map(string.capitalize, givenNames))
- return givenNameCapitalized
-
-
+ givenName = givenName.strip()
+ givenNames = ' '.join(givenName.split('-')).split()
+ givenNameCapitalized = '-'.join(map(string.capitalize, givenNames))
+ return givenNameCapitalized
+
+
def formatFullName(memberName, memberGivenName, memberId, nameBefore=1) :
- memberName = memberName.decode('utf-8')
- memberGivenName = memberGivenName.decode('utf-8')
- memberFullName = u''
- if memberName and memberGivenName :
- if nameBefore :
- memberFullName = memberName.upper() + ' ' + capitalizeCompoundGivenName(memberGivenName)
- else :
- memberFullName = capitalizeCompoundGivenName(memberGivenName) + ' ' + memberName.upper()
-
- elif memberName and not memberGivenName :
- memberFullName = memberName.upper()
-
- elif not memberName and memberGivenName :
- memberFullName = capitalizeCompoundGivenName(memberGivenName)
-
- else :
- memberFullName = memberId
-
- return memberFullName.encode('utf-8')
+ memberName = memberName.decode('utf-8')
+ memberGivenName = memberGivenName.decode('utf-8')
+ memberFullName = u''
+ if memberName and memberGivenName :
+ if nameBefore :
+ memberFullName = memberName.upper() + ' ' + capitalizeCompoundGivenName(memberGivenName)
+ else :
+ memberFullName = capitalizeCompoundGivenName(memberGivenName) + ' ' + memberName.upper()
+
+ elif memberName and not memberGivenName :
+ memberFullName = memberName.upper()
+
+ elif not memberName and memberGivenName :
+ memberFullName = capitalizeCompoundGivenName(memberGivenName)
+
+ else :
+ memberFullName = memberId
+
+ return memberFullName.encode('utf-8')
# from OFS.ObjectManager #63
bad_url_chars = re.compile(r'[^a-zA-Z0-9-_~,.$\(\)@]')
security.declarePublic('makeValidId')
def makeValidId(self, id, allow_dup=0):
- id = Utf8Utils.desacc(id)
- id = bad_url_chars.sub('-', id)
- # If allow_dup is false, an error will be raised if an object
- # with the given id already exists. If allow_dup is true,
- # only check that the id string contains no illegal chars;
- # check_valid_id() will be called again later with allow_dup
- # set to false before the object is added.
-
- makeRandomId = False
- if id in ('.', '..'):
- makeRandomId = True
- if id.startswith('_'):
- id = id.lstrip('_')
- if id.startswith('aq_'):
- id = id[3:]
-
- while id.endswith('__') :
- id = id[:-1]
- if not allow_dup:
- obj = getattr(self, id, None)
- if obj is not None:
- # An object by the given id exists either in this
- # ObjectManager or in the acquisition path.
- flags = getattr(obj, '__replaceable__', NOT_REPLACEABLE)
- if hasattr(aq_base(self), id):
- # The object is located in this ObjectManager.
- if not flags & REPLACEABLE:
- makeRandomId = True
- # else the object is replaceable even if the UNIQUE
- # flag is set.
- elif flags & UNIQUE:
- makeRandomId = True
- if id == 'REQUEST':
- makeRandomId = True
-
- if makeRandomId is True :
- id = str(randrange(2,10000)) + id
- return id
-
-
+ id = Utf8Utils.desacc(id)
+ id = bad_url_chars.sub('-', id)
+ # If allow_dup is false, an error will be raised if an object
+ # with the given id already exists. If allow_dup is true,
+ # only check that the id string contains no illegal chars;
+ # check_valid_id() will be called again later with allow_dup
+ # set to false before the object is added.
+
+ makeRandomId = False
+ if id in ('.', '..'):
+ makeRandomId = True
+ if id.startswith('_'):
+ id = id.lstrip('_')
+ if id.startswith('aq_'):
+ id = id[3:]
+
+ while id.endswith('__') :
+ id = id[:-1]
+ if not allow_dup:
+ obj = getattr(self, id, None)
+ if obj is not None:
+ # An object by the given id exists either in this
+ # ObjectManager or in the acquisition path.
+ flags = getattr(obj, '__replaceable__', NOT_REPLACEABLE)
+ if hasattr(aq_base(self), id):
+ # The object is located in this ObjectManager.
+ if not flags & REPLACEABLE:
+ makeRandomId = True
+ # else the object is replaceable even if the UNIQUE
+ # flag is set.
+ elif flags & UNIQUE:
+ makeRandomId = True
+ if id == 'REQUEST':
+ makeRandomId = True
+
+ if makeRandomId is True :
+ id = str(randrange(2,10000)) + id
+ return id
+
+
def _checkMemberPermission(userid, permission, obj, StringType = type('')):
- user = obj.aq_inner.acl_users.getUser(userid)
- roles = rolesForPermissionOn(permission, obj)
- if type(roles) is StringType:
- roles=[roles]
- if user.allowed( obj, roles ):
- return 1
- return 0
-
+ user = obj.aq_inner.acl_users.getUser(userid)
+ roles = rolesForPermissionOn(permission, obj)
+ if type(roles) is StringType:
+ roles=[roles]
+ if user.allowed( obj, roles ):
+ return 1
+ return 0
+
def getCPInfo(self) :
- try: cp = _cb_decode(self.REQUEST['__cp'])
- except: return None
- return cp
+ try: cp = _cb_decode(self.REQUEST['__cp'])
+ except: return None
+ return cp
def popCP(self, indexes=None) :
- try: cp = _cb_decode(self.REQUEST['__cp'])
- except: return
-
- paths = list(cp[1])
- if indexes is not None :
- indexes = list(indexes)
- indexes.sort()
- indexes.reverse()
- for index in indexes :
- paths.pop(index)
- else :
- paths.pop()
-
- if not paths :
- self.REQUEST.RESPONSE.expireCookie('__cp', path=self.REQUEST['BASEPATH1'] or "/")
- else :
- paths = tuple(paths)
- cp = _cb_encode( (cp[0], paths) )
- resp = self.REQUEST['RESPONSE']
- resp.setCookie('__cp', cp, path='%s' % cookie_path(self.REQUEST))
+ try: cp = _cb_decode(self.REQUEST['__cp'])
+ except: return
+
+ paths = list(cp[1])
+ if indexes is not None :
+ indexes = list(indexes)
+ indexes.sort()
+ indexes.reverse()
+ for index in indexes :
+ paths.pop(index)
+ else :
+ paths.pop()
+
+ if not paths :
+ self.REQUEST.RESPONSE.expireCookie('__cp', path=self.REQUEST['BASEPATH1'] or "/")
+ else :
+ paths = tuple(paths)
+ cp = _cb_encode( (cp[0], paths) )
+ resp = self.REQUEST['RESPONSE']
+ resp.setCookie('__cp', cp, path='%s' % cookie_path(self.REQUEST))
security.declarePublic('Message')
Message = MessageFactory('plinn')
security.declarePublic('translate')
def translate(message, context):
- """ Translate i18n message.
- """
- if isinstance(message, Exception):
- try:
- message = message[0]
- except (TypeError, IndexError):
- pass
- return i18ntranslate(message, domain='plinn', context=context.REQUEST)
+ """ Translate i18n message.
+ """
+ if isinstance(message, Exception):
+ try:
+ message = message[0]
+ except (TypeError, IndexError):
+ pass
+ return i18ntranslate(message, domain='plinn', context=context.REQUEST)
security.declarePublic('desacc')
desacc = Utf8Utils.desacc
security.declarePublic('getPreferredLanguages')
def getPreferredLanguages(context):
- """ returns browser prefered languages"""
- request = getattr(context, 'REQUEST', None)
- if request is not None :
- adapter = IUserPreferredLanguages(request, None)
- if adapter is not None :
- return adapter.getPreferredLanguages()
- return []
+ """ returns browser prefered languages"""
+ request = getattr(context, 'REQUEST', None)
+ if request is not None :
+ adapter = IUserPreferredLanguages(request, None)
+ if adapter is not None :
+ return adapter.getPreferredLanguages()
+ return []
security.declarePublic('getBestTranslationLanguage')
def getBestTranslationLanguage(langs, context):
- """ returns best translation language according
- availables languages (param langs)
- and user preferences (retrieves by context)
- """
- request = getattr(context, 'REQUEST', None)
- if request :
- negociator = getUtilityByInterfaceName('zope.i18n.interfaces.INegotiator')
- return negociator.getLanguage(langs, request) or langs[0]
- else :
- return langs[0]
+ """ returns best translation language according
+ availables languages (param langs)
+ and user preferences (retrieves by context)
+ """
+ request = getattr(context, 'REQUEST', None)
+ if request :
+ negociator = getUtilityByInterfaceName('zope.i18n.interfaces.INegotiator')
+ return negociator.getLanguage(langs, request) or langs[0]
+ else :
+ return langs[0]
security.declarePublic('getAdapterByInterface')
def getAdapterByInterface(ob, dotted_name, default=_marker) :
- """ Get the adapter which provides the interface on the given object.
- """
- try:
- iface = resolve_dotted_name(dotted_name)
- except ImportError:
- if default is _marker:
- raise ComponentLookupError, dotted_name
- return default
+ """ Get the adapter which provides the interface on the given object.
+ """
+ try:
+ iface = resolve_dotted_name(dotted_name)
+ except ImportError:
+ if default is _marker:
+ raise ComponentLookupError, dotted_name
+ return default
- adapter = queryAdapter(ob, iface, default=default)
- if adapter is _marker :
- raise ComponentLookupError, "no adapter providing %r found on %r" % (dotted_name, ob)
+ adapter = queryAdapter(ob, iface, default=default)
+ if adapter is _marker :
+ raise ComponentLookupError, "no adapter providing %r found on %r" % (dotted_name, ob)
- # the adapter must be wrapped to allow security mahinery to work.
- if adapter != default :
- return adapter.__of__(ob)
- else :
- return default
+ # the adapter must be wrapped to allow security mahinery to work.
+ if adapter != default :
+ return adapter.__of__(ob)
+ else :
+ return default
def _sudo(func, userid=None) :
- """
- execute func or any callable object
- without restriction. Used to switch off
- security assertions (eg. checkPermission) encountered
- during the execution.
- """
-
- sm = getSecurityManager()
- restrictedUser = sm.getUser()
-
- if not userid :
- userid = restrictedUser.getId()
-
- sm._context.user = UnrestrictedUser(userid, '', (), ())
+ """
+ execute func or any callable object
+ without restriction. Used to switch off
+ security assertions (eg. checkPermission) encountered
+ during the execution.
+ """
+
+ sm = getSecurityManager()
+ restrictedUser = sm.getUser()
+
+ if not userid :
+ userid = restrictedUser.getId()
+
+ sm._context.user = UnrestrictedUser(userid, '', (), ())
- deferedEx = None
- try :
- ret = func()
- except Exception, e :
- deferedEx = e
-
- sm._context.user = restrictedUser
-
- if deferedEx is not None :
- raise e
+ deferedEx = None
+ try :
+ ret = func()
+ except Exception, e :
+ deferedEx = e
+
+ sm._context.user = restrictedUser
+
+ if deferedEx is not None :
+ raise e
- return ret
-
\ No newline at end of file
+ return ret
+
\ No newline at end of file
--
2.20.1
From 63f5e85cdbd05ac9a00a6dab60548c226981fb62 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Wed, 31 Jul 2013 06:46:38 +0200
Subject: [PATCH 11/16] =?utf8?q?Impl=C3=A9mentation=20de=20l'envoi=20d'ema?=
=?utf8?q?il=20de=20r=C3=A9initialisation=20de=20mot=20de=20passe=20(texte?=
=?utf8?q?=20du=20message=20ultra-minimaliste=20pour=20l'instant).?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
RegistrationTool.py | 26 +++++++++++++++++++++-----
utils.py | 6 ++++++
2 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/RegistrationTool.py b/RegistrationTool.py
index 953e008..c35cb6a 100644
--- a/RegistrationTool.py
+++ b/RegistrationTool.py
@@ -36,9 +36,11 @@ from Products.CMFCore.utils import getToolByName
from Products.CMFCore.utils import getUtilityByInterfaceName
from Products.GroupUserFolder.GroupsToolPermissions import ManageGroups
from Products.Plinn.utils import Message as _
+from Products.Plinn.utils import encodeQuopriEmail
from DateTime import DateTime
from types import TupleType, ListType
from uuid import uuid4
+from quopri import encodestring
security = ModuleSecurityInfo('Products.Plinn.RegistrationTool')
MODE_ANONYMOUS = 'anonymous'
@@ -200,13 +202,27 @@ class RegistrationTool(BaseRegistrationTool) :
if member :
uuid = str(uuid4())
self._passwordResetRequests[uuid] = (userid, DateTime() + 1)
- mailhost = getUtilityByInterfaceName('Products.MailHost.interfaces.IMailHost')
- ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
- sender = ptool.getProperty('email_from_address')
- to = member.getProperty('email')
+ ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
+ # fuck : mailhost récupéré avec getUtilityByInterfaceName n'est pas correctement
+ # wrappé. Un « unrestrictedTraverse » ne marche pas.
+ # mailhost = getUtilityByInterfaceName('Products.MailHost.interfaces.IMailHost')
+ portal = utool.getPortalObject()
+ mailhost = portal.MailHost
+ sender = encodeQuopriEmail(ptool.getProperty('email_from_name'), ptool.getProperty('email_from_address'))
+ to = encodeQuopriEmail(member.getMemberFullName(nameBefore=0), member.getProperty('email'))
+ subject = "=?utf-8?q?%s?=" % encodestring('Password reset')
+ lines = []
+ pr = lines.append
+ pr('%s/password_reset_form/%s' % (utool(), uuid))
+ body = '\n'.join(lines)
message = self.echange_mail_template(From=sender,
- To=to)
+ To=to,
+ Subject=subject,
+ ContentType = 'text/plain',
+ charset = 'UTF-8',
+ body=body)
+ mailhost.send(message)
security.declarePrivate('clearExpiredPasswordResetRequests')
def clearExpiredPasswordResetRequests(self):
diff --git a/utils.py b/utils.py
index 470b49a..252af4e 100755
--- a/utils.py
+++ b/utils.py
@@ -27,6 +27,7 @@ import re
from types import StringType
from random import randrange
from Acquisition import aq_base
+from quopri import encodestring
from AccessControl.PermissionRole import rolesForPermissionOn
from AccessControl import ModuleSecurityInfo
from AccessControl import getSecurityManager
@@ -251,6 +252,11 @@ def getAdapterByInterface(ob, dotted_name, default=_marker) :
else :
return default
+def encodeQuopriEmail(name, email) :
+ qpName = encodestring(name).replace('=\n', '')
+ return '''"=?utf-8?q?%s?=" <%s>''' % (qpName, email)
+
+
def _sudo(func, userid=None) :
"""
execute func or any callable object
--
2.20.1
From 125a6289be7a631a256f948bda5415451aca6d98 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Wed, 31 Jul 2013 11:06:53 +0200
Subject: [PATCH 12/16] =?utf8?q?Impl=C3=A9mentation=20compl=C3=A8te=20(mai?=
=?utf8?q?s=20minimale)=20de=20la=20r=C3=A9initialisation=20de=20mot=20de?=
=?utf8?q?=20passe.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
RegistrationTool.py | 9 ++---
skins/control/reset_password_control.py | 9 +++++
skins/generic/password_reset_form.py | 19 ++++++++++
skins/generic/password_reset_template.pt | 46 ++++++++++++++++++++++++
4 files changed, 77 insertions(+), 6 deletions(-)
create mode 100644 skins/control/reset_password_control.py
create mode 100644 skins/generic/password_reset_form.py
create mode 100644 skins/generic/password_reset_template.pt
diff --git a/RegistrationTool.py b/RegistrationTool.py
index c35cb6a..b46a13b 100644
--- a/RegistrationTool.py
+++ b/RegistrationTool.py
@@ -234,16 +234,13 @@ class RegistrationTool(BaseRegistrationTool) :
security.declarePublic('resetPassword')
- def resetPassword(self, userid, uuid, password, confirm) :
+ def resetPassword(self, uuid, password, confirm) :
record = self._passwordResetRequests.get(uuid)
if not record :
return _('Invalid reset password request.')
- recUserid, expiration = record
-
- if recUserid != userid :
- return _('Invalid userid.')
-
+ userid, expiration = record
+ now = DateTime()
if expiration < now :
self.clearExpiredPasswordResetRequests()
return _('Your reset password request has expired. You can ask a new one.')
diff --git a/skins/control/reset_password_control.py b/skins/control/reset_password_control.py
new file mode 100644
index 0000000..f903e24
--- /dev/null
+++ b/skins/control/reset_password_control.py
@@ -0,0 +1,9 @@
+##parameters=uuid='', password='', confirm='', **kw
+from Products.CMFCore.utils import getUtilityByInterfaceName
+rtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IRegistrationTool')
+
+msg = rtool.resetPassword(uuid, password, confirm)
+if msg :
+ return context.setStatus(False, msg)
+else :
+ return True
\ No newline at end of file
diff --git a/skins/generic/password_reset_form.py b/skins/generic/password_reset_form.py
new file mode 100644
index 0000000..b783b63
--- /dev/null
+++ b/skins/generic/password_reset_form.py
@@ -0,0 +1,19 @@
+##parameters=validate=''
+from Products.CMFCore.utils import getUtilityByInterfaceName
+utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
+atool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IActionsTool')
+
+form = context.REQUEST.form
+uuid = traverse_subpath[0]
+
+if validate and \
+ context.validatePassword(**form) and \
+ context.reset_password_control(uuid=uuid, **form) and \
+ context.setRedirect(atool, 'user/join', ajax=form.get('ajax')) :
+ return
+
+options = {}
+options['uuid'] = uuid
+options['action'] = '%s/password_reset_form/%s' % (utool(), uuid)
+
+return context.password_reset_template(**options)
\ No newline at end of file
diff --git a/skins/generic/password_reset_template.pt b/skins/generic/password_reset_template.pt
new file mode 100644
index 0000000..30c46b4
--- /dev/null
+++ b/skins/generic/password_reset_template.pt
@@ -0,0 +1,46 @@
+
+
+ Password reset form
+
+
+
+
+
+
+
--
2.20.1
From 3f032bd10705f163d90cb7b9dfedc64c91ce727c Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Wed, 31 Jul 2013 11:17:49 +0200
Subject: [PATCH 13/16] =?utf8?q?On=20ne=20sait=20jamais=20ce=20que=20le=20?=
=?utf8?q?hasard=20nous=20r=C3=A9serve=20:-D.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
RegistrationTool.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/RegistrationTool.py b/RegistrationTool.py
index b46a13b..f34b4a5 100644
--- a/RegistrationTool.py
+++ b/RegistrationTool.py
@@ -201,6 +201,8 @@ class RegistrationTool(BaseRegistrationTool) :
member = mtool.getMemberById(userid)
if member :
uuid = str(uuid4())
+ while self._passwordResetRequests.has_key(uuid) :
+ uuid = str(uuid4())
self._passwordResetRequests[uuid] = (userid, DateTime() + 1)
utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
--
2.20.1
From 797d6a6d2797c8ff4ac50e7a107c585f838ff282 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Wed, 31 Jul 2013 12:37:14 +0200
Subject: [PATCH 14/16] =?utf8?q?Ajouts=20messages=20de=20retour=20du=20for?=
=?utf8?q?mulaire=20de=20demande=20de=20r=C3=A9initialisation=20de=20mot?=
=?utf8?q?=20de=20passe.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
RegistrationTool.py | 3 +++
skins/generic/request_password_reset_form.py | 12 ++++++++----
2 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/RegistrationTool.py b/RegistrationTool.py
index f34b4a5..f31a5c6 100644
--- a/RegistrationTool.py
+++ b/RegistrationTool.py
@@ -225,6 +225,9 @@ class RegistrationTool(BaseRegistrationTool) :
charset = 'UTF-8',
body=body)
mailhost.send(message)
+ return
+
+ return _('Unknown user name. Please retry.')
security.declarePrivate('clearExpiredPasswordResetRequests')
def clearExpiredPasswordResetRequests(self):
diff --git a/skins/generic/request_password_reset_form.py b/skins/generic/request_password_reset_form.py
index 69a34c3..1e9b57c 100644
--- a/skins/generic/request_password_reset_form.py
+++ b/skins/generic/request_password_reset_form.py
@@ -1,13 +1,17 @@
-##parameters=userid='', requestReset=''
+##parameters=userid='', requestReset='', ajax=''
from Products.CMFCore.utils import getUtilityByInterfaceName
from Products.Plinn.utils import Message as _
utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
rtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IRegistrationTool')
if requestReset :
- uuid = rtool.requestPasswordReset(userid)
- context.setStatus(True, _('request for resetting password sent'))
- return 'yeah !'
+ msg = rtool.requestPasswordReset(userid)
+ if not msg :
+ context.setStatus(True, _('Request for resetting password sent to your contact email.'))
+ context.setRedirect(utool.getPortalObject(), 'object/view', ajax=ajax)
+ return
+
+ context.setStatus(False, msg)
options={}
target = '%s/request_password_reset_form' % utool()
--
2.20.1
From ba5dfbeadced3f2773dfee1bad46c9b86d4f4a86 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Wed, 31 Jul 2013 12:47:40 +0200
Subject: [PATCH 15/16] =?utf8?q?Localisation=20des=20messages=20relatifs?=
=?utf8?q?=20=C3=A0=20la=20r=C3=A9initialisation=20de=20son=20mot=20de=20p?=
=?utf8?q?asse.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
locales/en/LC_MESSAGES/plinn.mo | Bin 2313 -> 2313 bytes
locales/en/LC_MESSAGES/plinn.po | 39 ++++++++----
locales/fr/LC_MESSAGES/plinn.mo | Bin 37466 -> 37942 bytes
locales/fr/LC_MESSAGES/plinn.po | 59 +++++++++++++------
locales/plinn.pot | 39 ++++++++----
skins/generic/request_password_reset_form.py | 4 +-
6 files changed, 99 insertions(+), 42 deletions(-)
diff --git a/locales/en/LC_MESSAGES/plinn.mo b/locales/en/LC_MESSAGES/plinn.mo
index 4f25697537c04e0ce265ac24ab9bdc7874ca9f4a..575c3e6d5a7099661858798e50a246e254fd4ec9 100644
GIT binary patch
delta 32
ncmeAa>J-|b&L$k5nxf!UnxkNBs9J-|b&L-@epQqqenxkN3sbFYgWoTw)XuR2q?K~3zlClV|
diff --git a/locales/en/LC_MESSAGES/plinn.po b/locales/en/LC_MESSAGES/plinn.po
index aa5bd56..af1cc7f 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: Mon Jul 29 14:16:13 2013\n"
+"POT-Creation-Date: Wed Jul 31 12:38:09 2013\n"
"PO-Revision-Date: 2007-10-17 14:43+0200\n"
"Last-Translator: Benoît PIN\n"
"Language-Team: CRI http://cri.ensmp.fr\n"
@@ -32,23 +32,23 @@ msgstr ""
msgid "%s's front page"
msgstr ""
-#: n/RegistrationTool.py:217
-msgid "Invalid reset password request."
+#: n/RegistrationTool.py:230
+msgid "Unknown user name. Please retry."
msgstr ""
-#: n/RegistrationTool.py:222
-msgid "Invalid userid."
+#: n/RegistrationTool.py:245
+msgid "Invalid reset password request."
msgstr ""
-#: n/RegistrationTool.py:226
+#: n/RegistrationTool.py:251
msgid "Your reset password request has expired. You can ask a new one."
msgstr ""
-#: n/RegistrationTool.py:235
+#: n/RegistrationTool.py:260
msgid "Password successfully resetted."
msgstr ""
-#: n/RegistrationTool.py:237
+#: n/RegistrationTool.py:262
msgid "\"%s\" username not found."
msgstr ""
@@ -559,6 +559,7 @@ msgstr ""
#: n/skins/custom_generic/talkback_tree.pt:82
#: n/skins/generic/gruf_macros.pt:77 n/skins/generic/gruf_macros.pt:410
#: n/skins/generic/header_widgets.pt:32 n/skins/generic/header_widgets.pt:173
+#: n/skins/generic/password_reset_template.pt:39
#: n/skins/generic/send_email_form.pt:79
msgid "Validate"
msgstr ""
@@ -813,10 +814,12 @@ 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:25
msgid "Password"
msgstr ""
#: n/skins/generic/gruf_macros.pt:274 n/skins/generic/gruf_macros.pt:396
+#: n/skins/generic/password_reset_template.pt:31
msgid "Confirm"
msgstr ""
@@ -992,6 +995,14 @@ msgstr ""
msgid "Exit boxes editing"
msgstr ""
+#: n/skins/generic/password_reset_template.pt:13
+msgid "Password resetting"
+msgstr ""
+
+#: n/skins/generic/password_reset_template.pt:18
+msgid "Please enter a new password and clic on \"Validate\" button."
+msgstr ""
+
#: n/skins/generic/pending_members.pt:9
msgid "Review members registration"
msgstr ""
@@ -1057,24 +1068,28 @@ msgstr ""
msgid "Send"
msgstr ""
-#: n/skins/generic/request_password_reset_form.pt:11
+#: n/skins/generic/request_password_reset_form.py:10
+msgid "Request for resetting password sent to your contact email."
+msgstr ""
+
+#: n/skins/generic/request_password_reset_template.pt:11
msgid "Password reset"
msgstr ""
-#: n/skins/generic/request_password_reset_form.pt:12
+#: 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 ""
-#: n/skins/generic/request_password_reset_form.pt:18
+#: n/skins/generic/request_password_reset_template.pt:18
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_form.pt:25
+#: n/skins/generic/request_password_reset_template.pt:25
msgid " Send "
msgstr ""
diff --git a/locales/fr/LC_MESSAGES/plinn.mo b/locales/fr/LC_MESSAGES/plinn.mo
index f791fe9bb47f0cb11a4a4bf4d9a8711a29f6f13c..c496a11501b322e3441655726ead48cdaa1362e0 100644
GIT binary patch
delta 12772
zcmZwN33yG{-pBEsL1Yq1%n=+h#*j!5f(kW{H4in093SQsYp9xPzNN#hwn|${>;3-DUgy4j-sjy<|2}K2z4n^-PO81M$^Y$b{+_GRfy*tf
zX8x8Hi;tr$%P+vPE>}^hWnE9Std)2JgK$zk%PNc0F&bB60`A0qco~~x!z9b9ig{QE
zSE1@3!!mdgYgm@Yx=Vt8ta8bgRU12@`ksIxxCV>kW{ktPFcL3dD1MKscOQ%4->CZG
z^(`v`V^I^UjYY6M7R9a@ME_PFZ^E($88b|U(Z*a1=7GuP{!Ejfj~d7_Q@+{cU&j)Z
zA3zP@G^*q4$iiB;F$#acX!^GvlhBBZH?U_=3H4xIRL9Lw_uHVBzBg*-E)2s0ERC~J
zTeKF#aU*J}ccY&B7*+oUY6b3~MIFw(+PX?Tl*hSyTrjQ4P7!4=16v
z;5n>>vvDVGG3C8dEGv-wVAS)&QT=75u>LB@ryv@iLpA)8skjC;fLE~s?#5L70!w3X
zBhC$0LhW%XY9M`36B~+J!4aq#yG?!qs@}9ltiNu|qo6V_F%|csI({ED^G{9wJZdX$
zp$7V!x$oE5o>2s9rsYs)qayM`Sc#~K4#l!K64m}R4+#xmA!?*6P)oQDbp{S%Mf?KQ
z@EugczoHIP0L!80ilQ2fM738DOJa4@mNrEVU@&UtPArQaHwn#TE~>+2CchE2N4ro<
zzYq0VUO)}xvC*%IeVT(%11O8yn(C&G?MDf6?6k9yQPh7_Rp}sF}TFB~T5QM=fbJ
zRK*0;jGLhb&=SjGXVl7#Kn)-VtKke($J;O-cVQ{Kh-&X=)WrV6Ao{obp0eN5VAN7M
zP#slA%_zy_TcAE1olr|W2z5B~P#sP;<#SO3UWb~{CRDvQP-kO5s{JGAQNb4^^uRgH
z#IMo&!Qn&Bj|HnY>Vbav0uD#b{0?e>53xK3r`ZFkiZSGCqw2La_CO6}FlviNr?LK;
z(NuF|5i0)*R>EDVB|C}g=n87UKcX7Cj~cjN3)>*njKfU6l*z}SCQ=o(wKY%!sMo?{
z&$JZTon_D+*9E_n-za4>hAzs0KEpmi}EVfd^6dzeII(4b{$fsCIucK1K~F
z)YHiznsD?eLfy^~7LUphbHGp*{zY#Ui
z?Z{Sntlf6P+J_qXQB*@GQG0tH^}uD+7TiSb@m+KOk;z-F?E0ao0T)MYMGZ{C`q&hm
z$eU+vz*2huuabzP;6AG1GOhVuV`bEUx}yd%5cz>-rK9%#Wz@=TN3Fnq)QTL%06b&z
z=THOx1~svJsKfgR1L)rhZet&YaMXvQIBFo(P-h|$)o>>)g8fk)4nZ|M3N@e!SPAE0
z5!{a2(%qf|;ll*orDYfcg*}MLlrVR6lDwu>M6!?4dv---nv{Y1ES6G5JTR2g-D`
zJFJUZ+7#4^wMXwvk&mG@0M+hl)ERjdbtnr_XX6A0<4F$*?a2ky>vaV+vp-M`26eLY
z#ZVo^VhGkm4KNwwu?6Y_l!g3cwx(hod>8e)-ojY?8`WR=&i3;j2Z>M$5>O4Nq6W|k
z!?1@bAB;uFk3xNrT&Mv)j~d84R68qC?QBGC-A+?}0K>_DjMecgq#uv<*xU%~Vpk}O
zYN#4&AoWlqPD3@^8nvWdQ5_6HEwvl9q!UmBn}%v<4(gCEK|Q}0wFMub_xJz9BvkPe
ztb=EfUxY2cuJ+IK6ig#O5NqLDY=y^>s#e%D{AP^(u`2FGb#M_ipev}AyNw#?kEj9O
z$5wj(ACb@lY29pFp&n?5;n)R>}B_DzsNCrAE3$=vv(I1ziX0j4he;um5O{lYT0JQ?2paysb
zRqqaJV!w80|JC6W3UvA-d)OnZg<0g2Q6qi@)$s;Y13OS1??$c6JEr_NY6U*SV)!-c
zi}<}Uq^I3aJT9laRZrG`6^V-!u$@+JFMF>KqdNBQZObbEZ&Ol9c1L}3$?;%lAv*`xEL*=+9?M<<(GI)70d9qF%pDRQ;)_
zrCoxhaVM(7qo|I~qwe2DEqQofdqU+*F+z
zLCqi^tKtmQK(?Z0{D~?52K8J>fBWo2p$1qQqxADXmW1{$0X5
zPx-N=xQzV7LH3M_4YnIDgQ}l`3D^NyZEGSn$I}>(kwfg?FPfmvOg8EaO&h}cwV8+$3J*YSah`E<
zy2qZ;3<|U~FQS%eF>2{op_YCV>cQ>i{+lNM9+si}kjY;_E$ua|j6b8!K-4h%`SPgt
z<4^;vr(+V%!bbQGY9)R~J@6;0eqe@eDEg6)M9n-JYhWC{iycub7vMDY
zQ3H%bw#s9bH3fB1Gi!)C-Q7+35Y+2364h`4w!#e_kDSPnO%
zw&oz}P~SwY$OF_$K0&Q)L>BAcj)Wu2{$`It9lGbSG44lobRQSu11y4bM%yc}07J>Y
ziW>M%<6Edxe*nYqGOEMxjDMn5Hawg4*WSfu+cU0(YN!EfX3bC?wlU?Mj6G4G;sL0c
z6`)?vX{doOHRYdSP4Zu&>OV$pUCbDJVu>CS>Zm^I{cVQY<8G*d^hUk^gHU_vLcJw(
zPEw_yqTo
z4|Cfqa|qSYF?8Ss)Px?Q&W!(9`}ug(1RJ7Ossr)`^jHH)sDWJ60A^t^T!1OK2KC?>
z)M2`fs`nT*!@zO&3`0=mB~j(E#>&R(=udfV)RrY+X}$jqNvMO)sJ$BMy}`frq8eO}
zQMe5wai7VbKyAqt)Qo>eebb+yCQv%Z9!OQx8Hz{UPsC_!i~f55`;*WE1F<${VKlBV
zzJ@w9@1q8K8a0qx=Kk*(K|Unc?y#(}0%`(rsJEz=F#$E;Wb|k$nv#gdr%@y9je0N}
z^*-le4P1zNt=>lc)cXqc+#S>etUUX<2xDnfM-@>6sDWCE+Ndo`%47X?8dE4Jfh~-^
zPy-u?n25P|Xpa!%bWAGSiAU9A0yo;*$&_hBq
z_{-b~nP5K>R%OraRdZSj#
zi42Ip|0kgb3$Q9qM>Vj;lz)cW%d@C6@(Y&1z{z$#7PV6KP!o6xd*BpQd#5l3f5QP-
z=Q(?Y=3+U$|9ePi0H2{cK5P6F)v#lV{nM;2mLlH`wE`nhOPYf^3sX=l@)GvP6{wm1
zf;zMhu{?%PwfDXzdjI~v4hc0_A8TP6#$pz#gE<(3OHd8%M4kRasI5AQPvLc}jTM2R$!3Hk3zjRZY+(tsE+4h
z5nO|s*#=aHuc5ZE5Y^!!lYfY6Cujysp$wgI*j*G0}Y#RFKuzubEQx-u7q0Qsu+f;Se*W?
zHYBtcy^RB~GWm4W44y~LXt~MnK%IpH7=~Y<26hS6!FQ+?`3rS+LSMAcL=3840%~B*
z(4!AYTM|0uy-kIgsF^K64Qw+8;SLPNJ*b8bU@)G*t9TamX)at~Z^a1=BmX68AlFb6
z`We-)-$L{LM=rDEYH3H9@+{*REJpcQbm3Iw2dQ-jwSpNh@n6Pp
zHmbe)i|lq%P!nphi1pXrwKO;Sp=LA?^?=hj3N`c5s2PsOa<~xH&^FYP?m`{H_mIV~
zKEz1uy4bRY;tW5DGW%j?{@9`sJt|9m|5klD&
z)XM0pK@?%x)ZQrK8u!0LUC)tzM7&En5MLxp=>6Y7BF9_B{v*z$+aufN{cG9n)M-G&
zUy`p!_>Wm~azX$@d6dmx(v@{_9%C!x>l_|G(=lg<;%l
zgYk5}hV&WIADYUo$^S_DNAz81NT(C+P1(0Ni1?Tab!lTY={X+$XiTOuQH5wpJ`%q|
zUD_kI+S+LHPNVKMA@ayi#$@6SX`S|X)c2w(ahUL3GfkqmuK+#T>t~5DI_=1V#Rp
zU?s}yk$wjYaRPCHs7SP>OxHQ$9rEW0-_?#pZStYCQIvR%d=fVQN1dAFzwk5bKaCqt
z6P>A;q6bL->1)ln$~^op<3*fH{K5T5Q>KqqF`n0Tl6dS*@p}aK^%^!O?wPu}HDCQF
zQ&5|Sc4I1`*HBk5Wx?c2VLS9)-;;ip;MYT|D-I`e3H?o}pXpq6hmbFA^5Nur5f^mB
zTwAywtMivaVl(kEp(}`o#*^0XbiPaP?ih1lWqjbQVZ>(BZRB#}et`p7tz^lER3{YMKJL^LFpQs)CaZR&cz)8uu{
zA}TPz9=M2TMd+I5{gVmt%t~S_`F~?i-}|roNkkJ06R{~)Rw37Kq;*xr?KlNL$62Pl
zIvwg~!t>BAkbH{lbmkiCE$Z`B#V_
z(jnZRNcuCvcTJ?6FSO;4uM($8zk#}bCyJB)w>M{5*G>5X@>OZ;D0xpbi7^!XWGacl
zrlQj8NteVf#J5Ca@-+zk|DtutPbK}B_=>cyE2ImtDEh7fllX+PP$GgjPg#Av|K&)0
zLqQagMY<^suORKahLU)J*yJlP-oom{H^hIaub-B_s|xw+zKrn^zD=YN$4yxSKdnEP
ziwAxpz9xM{d7>{-ns8IT3w0eM?Ymwg{i(?uCml_cF!w7Pi{YC@O_RTc)6FxNN$bBq
zc+X%hGJ8muVD`Ri0cCHIS%(%;!`#az-H)P1bD@>o9IXQ
zu8St&IYc6X8~WuT5to}APW+xYYVx_pf3lWLKF@T=7-BOqjQl-pK-?e_8ANBwHjv&%
z=z2i@KbWVvze%DM1=a8gK12AfNu>Fo{OQ^F&GNy!VfLe`)`JrQlx}gR}83Q(-A-U46+PCh8E?h+pku>kB+VUYF_H
z`)|2>$ycP{2k#wz-KNfd(q$-nfNja|z~O{voN3?%BW2$I-EuGa70UddYcBadL@gSd
zO`R~(Rfyu`Z{rclYT+V0OUxrO$?K|ZV;#VF;+TE*?b10=gvz=ih$NGKhO~opOFT&E
zO0oIxpW{qw7xi8?&$Yoz#7N?2?th6_u>iXf?-SnsGrS3YVKA!rZ_?9=Pe`vLdXesL
z?!S&768ng!Oj#haA4U2+QJzR6>hRo0#BYSILzLaOlU760y7X5w-Yc3vH&Ix|+}LW=
z%_cOis}A~6K7dFi9e`!A2d*VvA#@$Y$;36%FA}GSDC$+k`b0j_jA%$%^UtZ+n#}t|
z90fzkmnA+Ud{-Bfc2F?SSBQUGg$omZEnc`NZFiB79A~aGFE7(Ia%oDNZuOn6JZFw0
z-QjXhaEwjQ&7I)R$#A5*G91IRGlx6eE=OFS^z6)x^gL&rV_1G(p4*jBIJHe`K+*_z
zj^n>g{qLi>H0a24I||(SIga6OS6=$?Jcn~kdS-Uv&i20-tvK4{p5Sui=hCSweT*}~
z(JkAVp6jHkyqtoB!u8#{hL-5-%y4wf&vw*LawH`;so%Isz0{?C102D2zCm(f{D6Zc
z3m>>o1})t@zJy=?()Y%X?MS~lG@9>nxZL^Uo$2|GG44D^hSNJV{>;zJ)ttuVQz@6R
zWjh_i-1*GMad^k!_1;N3a}KXRyg#9^(u89Hfn%A#(*5o#wVbZ;?t&w)IUPsVJI1@|
z#F3uC#2K@9TI#~gv+&ZS`yq*4-D4aXHS+T^vomv9HoD4mQNfj;;OOJb&&Sknl86xrF%m10X(kdx%%~Zwc5N|hkJ_UgwQAI=QMB4pN^7(ltExlY
zOVz3xtyQH|)oxL}l>h7fJD)uMJ&%4ozw3PGIlteJdv|Q`JG<7;{i&e;QirR$pW~Fk
zD+L_qZ_=A$RO&bjlN@I`F2X=8SIKe0F&PVDQ%uBe*b!gDI(QXhF*ez8Dqs^-`!QG)
zXJdlnxXx-4{O26xkMj5!HFiRZ7=rCF8v9}>&cZyn0@ZFU2ICe~`#qQ+52F@#
z4g>HJ=EA2K$oNiRWp8D{W+7CA;${p6kuPucRV-fY6pv;Rvc;h1XR09)!2Vk)S#d=*0Y9vPy-J}t$c#zUqv0&Qq)A(S^ZYjioQUt
z^dRclIEuUo&PCKhL({yYD2nR8l1oApsDqkmBh(hQL_Gt;uoO;4b-W7I@fy^_l!dx)
zC#u7*Q2ianLUj$D<%UP(2Y%;f^
zp5`5>34DV(n$xKMZlRvBCsyxQ!)q6c?2PM_BB8TyiDj^tITy9UZ8#Qpp(a$RrniEc
zsC+}zk+eb$*aOwyFw}~tTK#ORUxAwF2F$1Te+LO|**?_P971jBDOAIsP%FNP8t@)Q
z;1kr&6{+P-AR6Pyr=SMzh-EPo3*&55fA63cwiyE%-`Pr{DDFaS)pw|YPNPyEA}6sJo@^Ki3E~yT#n2hMLj0sFfT+ZRJ^1
z!-uGH|L45-xd7^nx9knnomM3Ye+r=up4VYWi`-w`!|Ow0F1Ch9r^N$9MGn-fqo
zpN{Hi0qShuK&|X8)Df&f-M7{1KePN-mj4zt;bW+yxQ5C2C)UKc`i@ge?|)AcdOzRB
zXxxVC_y2h`3DMD4&t)X`1HocOxsm!T%U7PYV}%*Xi7
zXC&0{8}!4&s0kfIP2?)-nYe@MIB!F5Cn8V-Mxr_{gOOOx>N}v0vKwjv!_XfmU}<#G
z)t0O#p)ERr8t5Xb2b;9G!{S8~0)g#%1v113O|2euV1(
z1m?o)s0rW8VE?t^peEkd#-j2ms2iTgAnb$M$|0x~xu_M)MLyh|*HIlGM?DK?P!Hel
zsH633>h%+dI)V_?TU5v;p%o>fI;?H^2B?ABVs6Yto&5kTi(^qAG^>$sR%bg_z&ohd
zvP3iQ7g1HzfNfCscfdT@7uByjoP;JY0rTQ)t5}KweNpxXV7YUi}jj&c5ZN$>;LNy9iCg6X&z%i#&Ek57^RoO;hY
zPG?+*v3LVDKxj*ELWNK}R}wYR7}UV!QT?Q#+K-Wp?@S<}8zy5uoQ@&5$nvXEGv0!F
zs6It~y&gyH*iF>K`51Nf!L7UkwJlGnuQv8
zC#r+JsDbxm2p+NW3#gS}#$ddMk@(DvY~u}-j!P-;ge&k4a$3&pw%!r{*p~g*z~Sw@
z6_h}A9EX}n6)cE#P#+krQ9IHfb>AS==fp5nyBSytm!np?6HDN6RJ+@#*Vezi_gxe2
zl2AoW)S0xl`~WOOUiG?R32JLMpeC{pHQ-s)K)0+u7ax0ihN4kNl4SWbRDTUE-x+lz
zZa)&*+Ht6@oP}EXGSm(4q9(8%eXo_3-#|SpP6zLZ0#VOGFzR8Auzajp3Dtis)DAaA
zCg?hyNN57RyaHzg>fxAZPD8C|F2>?=)I>fkgtzPjPDF0p)Gq8HRJcOByK`&*|(^Uf5gK07Z$CqUtN57SIy)_H;ns
zLQoIuV2r`xs0l7XR~@b=@m&tK6qk^n-_=`DOgFFNil`f!VKnVE`uhL&LlZp1oxAM0Y}OwPY4iBXx}8Gnho;V_oROQ?Z^dwBIxsGX{aYL|xE
zi5945qz{JUOQM6`W~*=;YSo`>vyAW{0i0JfaQ;2QSzrPe;c*6
z4^R(dKu>Rg1l0Y>sQc4U6Re9-*a5ZU<1jzYcP+6B^{{P1t@v})50USz{HFO2YHRcN
z@&<@TwJ(RIu(sJ1^*T;Ot^8Hg0vDm4g*Px6-8V^8BXI<^wE?}o8$wYx6f>hR2l;r^
z%FAE^rr|E^fm(S)AMd^>)DFa>jw;de^-&9JhCJM^)6XhKqh6OusE!w4ecXxB_!#w&
zmFnyL(#b%*9iveLPeZMAj=2Q&OuUWS>W!#R#N8N&`_T9I|LY_)@IzF?pclOr7DaWK
zfa)k2HDDc7N6j%1+oSI_!|LP*TlxE_&;HG*{=Y@_ci#LJtMdFgcS)#&_-QPQ!!sx1DNfKIF0>)!i
ztb|=LC(gqlT!c}$5+m?4)X|(mJ=Kpe5c3c4cCs*P<+0cpQ?VFMMm=*Y25|mqB#u*{
zf$|Jw6__6ba209?-ore&3v=N<^APH(KY?1=AE*JJnxTWdosC8jCT~t3!2eJP_
zB-&7*0lQd5Pjdj4r2Hk+$`+trw`Hh_e_-X8u?+d^sP+X1dlRpOT3AEWI89KmZyVGR
zzvzlbx=E!VfCF+
z_xHs)=nf&F8y;a^%stezFm5AX8nrX0Q5~JfD7=kYQOGdwnF&YTpN?8#Gt^FHqCNpf
zpzfcIn!uYFtoQ#t5~&ny#Sr`r)xjgwLzQp1cSAI4rR6XWCRuq6E3aoZHk+d#?OLOb
zt{rM3T~Pgxz%q>Q%(RM+P&3<)n(0vt#h)#I4|Oy-U-DL70@Yz0vJ$5jYJyEsJJ!e)37E0qdCcQ47dGJ#?+i
zcBrH3h}wysSP=W8s})Qnp&MUEz1J%-0k@%Euk)yHzsFb*!$x{5h)3O5#jJ%Ir~zsM
zEl@kr8a2@lsE4vEhT)4N*?%P_P@tL3N8Pv-b>j-ufbXDI{0ZtI+lzVzj-V#+BkFDW
z8TAZ3!J3$F6n|aA40A4)CVv#m;N4N|zqU4FwD*Zr4mEHuvp+sZekc~ekIk=9D?N#t
z@CDR_E}=f*ZlWfVYm7I+qNsL}s0GAWd6G*)H&nxX*ao%bnW%=7Q4h-;t6z>2V_LDazKP#s^x7`%;YS8$y7
z^;rz}kgtm>{|B|=fbrhW6h=*?6so=~#$qzY;R{~5>%2@tXEz{5sT*oW}?ZoahZ4g&MGo`8=w>Q5dcF{}mF2DOihI`EJzA_oH^?
zIBF+;!A|%)`kwNay@#^}7N@)i>Wp7TwV#6O?^P^^i?IZLf$IMp7Gr$pR}y;4b4>D{
z@P*zc`=O3xJnFTZjd~3iqZY6nU2XYl
zE7*?l6-vZT7XVie*QTO-5bR2@!aWm?z
zxTYC4CQ;-S@3rfW?Z{8U{`ftv#F|sRADyRB1LU0Mb)3r#MolmbHE?n4g0ZMApJMeh
zPz#=i+My*b39WQ3Y6aU-Tk|#Q;W>iQcm{P;Pf$;D=yY$wsaS@5d(4TGQ7fK`;W!KR
zxv(15-wyQ0uTc|m4_L)ft2m2V$we!_h84*FiTWUln&H(aVoCC;=#TAC&qOEG4h+I5
z9A){X$eZcBjhbl0OkX?KDM>;D#-q+Q5w#O(R^AZxdbU6f&>QtSjm8vw7d4R+xE1f=
zJbdp}zIZTsmiKSN)6kFnHPkr2V=&L3bKffbW_wS00O}zON6j<|1F$mY#_FgQ*GFw_
z25M`&q0V#ws{MG=#nR+wpcb$mwV+RxXME=v2|WXsP#yh&+UlpM0rJi9cBC|FfJD@@
zPzTkn4d%uksBg)EsHc0p)o(z(zB^D8JBWdJ4Bb2=PLohamoNzL;7|An^-=u8T$S=a}{+|BNnjTI1N>Q#k`3<$=}CP_`*V-9~_N|xDK_zlcqXvKcR}U*TYdy;>s@Syb5R5TVC5Gvg!~QE);`7KnD@I*b*uBTn^|@Sx&vmM+8omZa_^d3|E0k@q8ChtO94
zj;YpG6W0}(L+4M!zp2z!&cm5PK7}+@zUyammbJ62?;oL*?oIgyT#2dN6iWK6wJmI3
zR70+f#2R7%(NORIha?KxNTX={8&Q_nM|?|N9_q^DkAyCN%C)7sdJ>C?M9OsO^=d?V
zxaBuv7G>2f-xu}j9wtr@8sB&2rQ$PEr!4;`>KxY-pHepr>k^Ad@4>H$`b2X=*E$a;
z!4{%yCT$PmR6Ir`Q+EP&RVE!nxUZ7=lfo1-dvPc+$k&8FNQV%*_7h!6>n-^A#m_$H
zAIkX+<1DqduVPhe^n`Rl(j$nY#2oVbuqF1-UVm*0juX0S60NDMuN#R+ME3Pfb^@zW
zK9d+hlqNp_PZRpY+(C>bx|1)bRgzvy{6YQ!v6a|Q_-fYs5^OEmk4Qfx^y)=%<9X5r
zR8CAH{W`vb+X-DOa5y$5^3lE-`BGMQ#w<;_uGy9!X!;5@v(3a~;zcT6CgzcT%Nq5=
zO62p>$xC>M_>8g-@G{Yk^bbl~`v@CsE@knQ@r%v(iwB(3`h)8!@tiNk`pa^|O}n`r
zg})NPXm5rh-(FP*v?4+ej=X9+4kvbxSbD(g8Msr?k;^hR~<$o5UE(J|J2V
zC9GX>KlXpMHKvX8E$KI~(7#rq@~f2Z#kcVWq3a9tJJP|l{~wN~>@_05>ek{7%F~EK
zr0){9h%SV#uUr!PS)?nRm_j5IO^EEPl_joV5xcP$>CU7xh;zhX^8dvZSdGxNn(!y8
z*_-QKn13at@LXqCWdtNWKP{UbsnrlPf?%-`To`k=757FNyJ_|9#aYKhp}Hv$`Hw
zhIsO?hLaW_FCXS^Q3=ETZZ$8_sxfhis7J(6J{GgD_eqx_)14^Heb=%p@OA2bAubZ7
zsM}?ArOE56gsm}>x{0K>>1%B|iFYZiNa1!IX^sCT{T=D|h;yW~um4$n7`{zmgyoaX
z_bAIt+#&S;)h%k}3(4zBCzca~edQeMSu#av_!ZWmusms9KiiF=mY-|+AnG3YTJY{s
zwu$(Js6*KpBEPl!g7kILK}22RKKUy2^#XoElp?O^vA#*76OoVTKun{ostvk^w5~1Y
z=cMQRO85a!S)`>yFoFCbA`el)%0)i%9}>?K9}`*GQrR`Psgl_s7SONgSuVt=8X-%s?Us
zvpPv(2I<_mglI}S5^pO=XJ0>&*R=y1VNF$h+jx25dPe>hx|m+Ju#Y?MfxZfqpmXQiXhJWQv5)mtg4k;
zk&kJX$+Eg|{8WFpSU{p}j;x=O{s;*kI;Q8~0ezxIkL){QK%cB5=~)4b7dLE_Rj5&N
z&a5d-Zsy9G*ScAruolCHMl~HhI4Y%jRC1LX$*DDxD=)s$B`Qeys^qi6x_((Gp!u+V
i1BPZD7=AWz@xHOWvc`|wlQV14%hz*feK_;A;Qs?DaF8Yd
diff --git a/locales/fr/LC_MESSAGES/plinn.po b/locales/fr/LC_MESSAGES/plinn.po
index e3576be..06f3233 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: Mon Jul 29 14:16:13 2013\n"
-"PO-Revision-Date: 2013-07-29 15:16+0200\n"
+"POT-Creation-Date: Wed Jul 31 12:38:09 2013\n"
+"PO-Revision-Date: 2013-07-31 12:42+0200\n"
"Last-Translator: Benoît PIN\n"
"Language-Team: CRI http://cri.ensmp.fr\n"
"Language: \n"
@@ -32,23 +32,25 @@ msgstr "Accueil : %s"
msgid "%s's front page"
msgstr "Page d'accueil de %s"
-#: n/RegistrationTool.py:217
+#: n/RegistrationTool.py:230
+msgid "Unknown user name. Please retry."
+msgstr "Nom d'utilisateur inconnu. Veuillez réessayer."
+
+#: n/RegistrationTool.py:245
msgid "Invalid reset password request."
msgstr "Demande de réinitialisation de mot de passe invalide."
-#: n/RegistrationTool.py:222
-msgid "Invalid userid."
-msgstr "Login invalide."
-
-#: n/RegistrationTool.py:226
+#: n/RegistrationTool.py:251
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."
+msgstr ""
+"Votre demande de réinitialisation de mot de passe a expiré. Vous pouvez en "
+"demander une nouvelle."
-#: n/RegistrationTool.py:235
+#: n/RegistrationTool.py:260
msgid "Password successfully resetted."
msgstr "Mot de passe correctement réinitialisé."
-#: n/RegistrationTool.py:237
+#: n/RegistrationTool.py:262
msgid "\"%s\" username not found."
msgstr "Nom : « %s » non trouvé."
@@ -575,6 +577,7 @@ msgstr "Corps"
#: n/skins/custom_generic/talkback_tree.pt:82
#: n/skins/generic/gruf_macros.pt:77 n/skins/generic/gruf_macros.pt:410
#: n/skins/generic/header_widgets.pt:32 n/skins/generic/header_widgets.pt:173
+#: n/skins/generic/password_reset_template.pt:39
#: n/skins/generic/send_email_form.pt:79
msgid "Validate"
msgstr "Valider"
@@ -847,10 +850,12 @@ 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:25
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:31
msgid "Confirm"
msgstr "Confirmation"
@@ -1026,6 +1031,14 @@ msgstr "Coller"
msgid "Exit boxes editing"
msgstr "Quitter l'édition des boîtes"
+#: n/skins/generic/password_reset_template.pt:13
+msgid "Password resetting"
+msgstr "Réinitialisation du mot de passe"
+
+#: n/skins/generic/password_reset_template.pt:18
+msgid "Please enter a new password and clic on \"Validate\" button."
+msgstr "Veuillez entrer un nouveau mot de passe puis cliquer sur le bouton « Valider »."
+
#: n/skins/generic/pending_members.pt:9
msgid "Review members registration"
msgstr "Modérer l'inscription des membres"
@@ -1093,24 +1106,33 @@ msgstr ""
msgid "Send"
msgstr "Envoyer"
-#: n/skins/generic/request_password_reset_form.pt:11
+#: n/skins/generic/request_password_reset_form.py:10
+msgid "Request for resetting password sent to your contact email."
+msgstr "Requête pour réinitialisation de mot de passe envoyée à votre adresse email de contact."
+
+#: n/skins/generic/request_password_reset_template.pt:11
msgid "Password reset"
msgstr "Réinitialisation de mot de passe"
-#: n/skins/generic/request_password_reset_form.pt:12
+#: 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."
+msgstr ""
+"Entrez 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_form.pt:18
+#: n/skins/generic/request_password_reset_template.pt:18
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 "Si cela ne marche pas dans votre cas (par exemple si vous avez oublié votre login ou si vous n'aviez pas entré une adresse email), vous pouvez envoyer un email à ${admin_email}."
+msgstr ""
+"Si cela ne marche pas dans votre cas (par exemple si vous avez oublié votre "
+"login ou si vous n'aviez pas entré une adresse email), vous pouvez envoyer "
+"un email à ${admin_email}."
#. Default: "Send"
-#: n/skins/generic/request_password_reset_form.pt:25
+#: n/skins/generic/request_password_reset_template.pt:25
msgid " Send "
msgstr " Envoyer "
@@ -2171,6 +2193,9 @@ msgstr "Cc"
msgid "mail_bcc"
msgstr "Cci"
+#~ msgid "Invalid userid."
+#~ msgstr "Login invalide."
+
#~ msgid "List"
#~ msgstr "Lister"
diff --git a/locales/plinn.pot b/locales/plinn.pot
index daff451..f8519ef 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: Mon Jul 29 14:16:13 2013\n"
+"POT-Creation-Date: Wed Jul 31 12:38:09 2013\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Zope 3 Developers \n"
@@ -39,23 +39,23 @@ msgstr ""
msgid "%s's front page"
msgstr ""
-#: n/RegistrationTool.py:217
-msgid "Invalid reset password request."
+#: n/RegistrationTool.py:230
+msgid "Unknown user name. Please retry."
msgstr ""
-#: n/RegistrationTool.py:222
-msgid "Invalid userid."
+#: n/RegistrationTool.py:245
+msgid "Invalid reset password request."
msgstr ""
-#: n/RegistrationTool.py:226
+#: n/RegistrationTool.py:251
msgid "Your reset password request has expired. You can ask a new one."
msgstr ""
-#: n/RegistrationTool.py:235
+#: n/RegistrationTool.py:260
msgid "Password successfully resetted."
msgstr ""
-#: n/RegistrationTool.py:237
+#: n/RegistrationTool.py:262
msgid "\"%s\" username not found."
msgstr ""
@@ -566,6 +566,7 @@ msgstr ""
#: n/skins/generic/gruf_macros.pt:410
#: n/skins/generic/header_widgets.pt:32
#: n/skins/generic/header_widgets.pt:173
+#: n/skins/generic/password_reset_template.pt:39
#: n/skins/generic/send_email_form.pt:79
msgid "Validate"
msgstr ""
@@ -829,11 +830,13 @@ msgstr ""
#: n/skins/generic/gruf_macros.pt:268
#: n/skins/generic/gruf_macros.pt:390
+#: n/skins/generic/password_reset_template.pt:25
msgid "Password"
msgstr ""
#: n/skins/generic/gruf_macros.pt:274
#: n/skins/generic/gruf_macros.pt:396
+#: n/skins/generic/password_reset_template.pt:31
msgid "Confirm"
msgstr ""
@@ -1014,6 +1017,14 @@ msgstr ""
msgid "Exit boxes editing"
msgstr ""
+#: n/skins/generic/password_reset_template.pt:13
+msgid "Password resetting"
+msgstr ""
+
+#: n/skins/generic/password_reset_template.pt:18
+msgid "Please enter a new password and clic on \"Validate\" button."
+msgstr ""
+
#: n/skins/generic/pending_members.pt:9
msgid "Review members registration"
msgstr ""
@@ -1078,19 +1089,23 @@ msgstr ""
msgid "Send"
msgstr ""
-#: n/skins/generic/request_password_reset_form.pt:11
+#: n/skins/generic/request_password_reset_form.py:10
+msgid "Request for resetting password sent to your contact email."
+msgstr ""
+
+#: n/skins/generic/request_password_reset_template.pt:11
msgid "Password reset"
msgstr ""
-#: n/skins/generic/request_password_reset_form.pt:12
+#: 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 ""
-#: n/skins/generic/request_password_reset_form.pt:18
+#: n/skins/generic/request_password_reset_template.pt:18
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_form.pt:25
+#: n/skins/generic/request_password_reset_template.pt:25
#. Default: "Send"
msgid " Send "
msgstr ""
diff --git a/skins/generic/request_password_reset_form.py b/skins/generic/request_password_reset_form.py
index 1e9b57c..a08d980 100644
--- a/skins/generic/request_password_reset_form.py
+++ b/skins/generic/request_password_reset_form.py
@@ -1,6 +1,8 @@
##parameters=userid='', requestReset='', ajax=''
from Products.CMFCore.utils import getUtilityByInterfaceName
-from Products.Plinn.utils import Message as _
+from Products.Plinn.utils import translate
+
+_ = lambda msg : translate(msg, context)
utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
rtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IRegistrationTool')
--
2.20.1
From b74a186d8da401c587c4154c6008ff5bcf85e9cf Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?=
Date: Wed, 31 Jul 2013 16:12:57 +0200
Subject: [PATCH 16/16] =?utf8?q?On=20utilise=20la=20requ=C3=AAte=20globale?=
=?utf8?q?=20pour=20traduire.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
utils.py | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/utils.py b/utils.py
index 252af4e..7c5ceb7 100755
--- a/utils.py
+++ b/utils.py
@@ -28,6 +28,7 @@ from types import StringType
from random import randrange
from Acquisition import aq_base
from quopri import encodestring
+from zope.globalrequest import getRequest
from AccessControl.PermissionRole import rolesForPermissionOn
from AccessControl import ModuleSecurityInfo
from AccessControl import getSecurityManager
@@ -195,7 +196,7 @@ security.declarePublic('Message')
Message = MessageFactory('plinn')
security.declarePublic('translate')
-def translate(message, context):
+def translate(message, context=None):
""" Translate i18n message.
"""
if isinstance(message, Exception):
@@ -203,7 +204,11 @@ def translate(message, context):
message = message[0]
except (TypeError, IndexError):
pass
- return i18ntranslate(message, domain='plinn', context=context.REQUEST)
+ if not context :
+ request = getRequest()
+ else :
+ request = context.REQUEST
+ return i18ntranslate(message, domain='plinn', context=request)
security.declarePublic('desacc')
desacc = Utf8Utils.desacc
--
2.20.1