From 355876724cfe062ac838ed66398f133a47e2212a Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Fri, 19 Sep 2025 17:05:07 +0530 Subject: [PATCH 1/4] fix: translation separator should be `::` not `:` Signed-off-by: Akhil Narang --- frappe/website/doctype/web_form/web_form.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py index f875f7cab4..455e02e649 100644 --- a/frappe/website/doctype/web_form/web_form.py +++ b/frappe/website/doctype/web_form/web_form.py @@ -287,7 +287,7 @@ def get_context(context): "Are you sure you want to discard the changes?", "Mandatory fields required::Error message in web form", "Invalid values for fields::Error message in web form", - "Error:Title of error message in web form", + "Error::Title of error message in web form", "Page {0} of {1}", "Couldn't save, please check the data you have entered", "Validation Error", From 033c7e518d4c6968afe136894f3893321f023526 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:12:44 +0200 Subject: [PATCH 2/4] fix(Webform): add translatable strings, order alphabetically --- frappe/website/doctype/web_form/web_form.py | 73 ++++++++++++--------- 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py index 455e02e649..be6182ba59 100644 --- a/frappe/website/doctype/web_form/web_form.py +++ b/frappe/website/doctype/web_form/web_form.py @@ -274,53 +274,62 @@ def get_context(context): def load_translations(self, context): messages = [ - "Sr", - "Attach", - "Next", - "Previous", - "Discard?", - "Cancel", - "Discard:Button in web form", - "Edit:Button in web form", - "See previous responses::Button in web form", - "Edit your response::Button in web form", + "{0} if you are not redirected within {1} seconds", + "← Back to upload files", "Are you sure you want to discard the changes?", - "Mandatory fields required::Error message in web form", - "Invalid values for fields::Error message in web form", - "Error::Title of error message in web form", - "Page {0} of {1}", - "Couldn't save, please check the data you have entered", - "Validation Error", - "No {0} found", - "Create a new {0}", + "Attach a web link", + "Attach", + "Attachments", "Camera", - "Delete", + "Cancel", + "Capture", + "Click here", + "Comments", + "Couldn't save, please check the data you have entered", + "Create a new {0}", + "Delete::Button in web form", + "Discard::Button in web form", + "Discard?", "Drag and drop files here or upload from", + "Drop files here", + "Edit your response::Button in web form", + "Edit::Button in web form", + "Error::Title of error message in web form", "Following fields have missing values::Error message in web form", + "Invalid values for fields::Error message in web form", + "Link", "Link", "Load More", + "Mandatory fields required::Error message in web form", "Message", - "Missing Values Required:Error message in web form", + "Missing Values Required::Error message in web form", "My Device", + "New", + "Next", + "No {0} found", "No comments yet.", + "No Images", "No more items to display", + "Not Saved", + "Optimize", + "Page {0} of {1}", + "Preview", + "Previous", + "Private", + "Public", + "See previous responses::Button in web form", "Set all private", "Set all public", + "Sr", "Start a new discussion", - "Upload", - "Link", - "Public", - "Private", - "Optimize", - "Drop files here", + "Submit another response::Button in web form", + "Submit::Button in web form", + "Submitted", "Take Photo", - "No Images", + "Thank you for spending your valuable time to fill this form", "Total Images", - "Preview", - "Submit", - "Capture", - "Attach a web link", - "← Back to upload files", + "Upload", + "Validation Error", self.title, self.introduction_text, self.success_title, From 07037754958140b1eae95566b3ffd0dee822561d Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:14:38 +0200 Subject: [PATCH 3/4] refactor: merge consecutive appends into a single extend --- frappe/website/doctype/web_form/web_form.py | 67 ++++++++++----------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py index be6182ba59..97dbefbe89 100644 --- a/frappe/website/doctype/web_form/web_form.py +++ b/frappe/website/doctype/web_form/web_form.py @@ -347,46 +347,45 @@ def get_context(context): # When at least one field in self.web_form_fields has fieldtype "Table" then add "No data" to messages if any(field.fieldtype == "Table" for field in self.web_form_fields): - messages.append("Move") - messages.append("Insert Above") - messages.append("Insert Below") - messages.append("Duplicate") - messages.append("Shortcuts") - messages.append("Ctrl + Up") - messages.append("Ctrl + Down") - messages.append("ESC") - messages.append("Editing Row") - messages.append("Add / Remove Columns") - messages.append("Fieldname") - messages.append("Column Width") - messages.append("Configure Columns") - messages.append("Select Fields") - messages.append("Select All") - messages.append("Update") - messages.append("Reset to default") - messages.append("No Data") - messages.append("Delete") - messages.append("Delete All") - messages.append("Add Row") - messages.append("Add Multiple") - messages.append("Download") - messages.append("of") - messages.append("Upload") - messages.append("Last") - messages.append("First") - messages.append("No.") - + messages.extend( + ( + "Move", + "Insert Above", + "Insert Below", + "Duplicate", + "Shortcuts", + "Ctrl + Up", + "Ctrl + Down", + "ESC", + "Editing Row", + "Add / Remove Columns", + "Fieldname", + "Column Width", + "Configure Columns", + "Select Fields", + "Select All", + "Update", + "Reset to default", + "No Data", + "Delete", + "Delete All", + "Add Row", + "Add Multiple", + "Download", + "of", + "Upload", + "Last", + "First", + "No.", + ) + ) # Phone Picker if any(field.fieldtype == "Phone" for field in self.web_form_fields): messages.append("Search for countries...") # Dates if any(field.fieldtype == "Date" for field in self.web_form_fields): - messages.append("Now") - messages.append("Today") - messages.append("Date {0} must be in format: {1}") - messages.append("{0} to {1}") - + messages.extend(("Now", "Today", "Date {0} must be in format: {1}", "{0} to {1}")) # Time if any(field.fieldtype == "Time" for field in self.web_form_fields): messages.append("Now") From fb22c946d0c59fb5a29569feb6f1a70bc9427ba8 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Wed, 1 Oct 2025 14:42:26 +0200 Subject: [PATCH 4/4] fix(Web Form): handle context in translations --- frappe/website/doctype/web_form/web_form.py | 45 +++++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py index 97dbefbe89..fa8fb0fae8 100644 --- a/frappe/website/doctype/web_form/web_form.py +++ b/frappe/website/doctype/web_form/web_form.py @@ -276,6 +276,7 @@ def get_context(context): messages = [ "{0} if you are not redirected within {1} seconds", "← Back to upload files", + "Are you sure you want to delete this record?", "Are you sure you want to discard the changes?", "Attach a web link", "Attach", @@ -285,24 +286,25 @@ def get_context(context): "Capture", "Click here", "Comments", + ("Confirm", "Title of confirmation dialog"), "Couldn't save, please check the data you have entered", "Create a new {0}", - "Delete::Button in web form", - "Discard::Button in web form", + ("Delete", "Button in web form"), + "Deleted!", + ("Discard", "Button in web form"), "Discard?", "Drag and drop files here or upload from", "Drop files here", - "Edit your response::Button in web form", - "Edit::Button in web form", - "Error::Title of error message in web form", - "Following fields have missing values::Error message in web form", - "Invalid values for fields::Error message in web form", + ("Edit your response", "Button in web form"), + ("Edit", "Button in web form"), + ("Error", "Title of error message in web form"), + "Following fields have missing values:", + ("Invalid values for fields", "Error message in web form"), "Link", "Link", "Load More", - "Mandatory fields required::Error message in web form", "Message", - "Missing Values Required::Error message in web form", + "Missing Values Required", "My Device", "New", "Next", @@ -310,6 +312,7 @@ def get_context(context): "No comments yet.", "No Images", "No more items to display", + ("No", "Dismiss confirmation dialog"), "Not Saved", "Optimize", "Page {0} of {1}", @@ -317,19 +320,23 @@ def get_context(context): "Previous", "Private", "Public", - "See previous responses::Button in web form", + ("See previous responses", "Button in web form"), "Set all private", "Set all public", "Sr", "Start a new discussion", - "Submit another response::Button in web form", - "Submit::Button in web form", + ("Submit another response", "Button in web form"), + ("Submit", "Button in web form"), "Submitted", "Take Photo", "Thank you for spending your valuable time to fill this form", "Total Images", + "Updated", "Upload", "Validation Error", + ("View your response", "Button in web form"), + ("Yes", "Approve confirmation dialog"), + "Your form has been successfully updated", self.title, self.introduction_text, self.success_title, @@ -392,7 +399,19 @@ def get_context(context): messages.extend(col.get("label") if col else "" for col in self.list_columns) - context.translated_messages = frappe.as_json({message: _(message) for message in messages if message}) + translation_dict = {} + for key in messages: + if not key: + continue + + if isinstance(key, tuple): + msg, ctx = key + # Use the original tuple as the key for backward compatibility + translation_dict[f"{msg}:{ctx}"] = _(msg, context=ctx) + else: + translation_dict[key] = _(key) + + context.translated_messages = frappe.as_json(translation_dict) def load_list_data(self, context): if not self.list_columns: