From 66d6d3e8c09d2eabfe338f816606ca668dd4377a Mon Sep 17 00:00:00 2001 From: Corentin Forler Date: Wed, 31 Jul 2024 11:40:11 +0200 Subject: [PATCH 001/812] fix(desk): Improve fieldname parsing in sort selector --- .../public/js/frappe/ui/group_by/group_by.js | 2 +- frappe/public/js/frappe/ui/sort_selector.js | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/frappe/public/js/frappe/ui/group_by/group_by.js b/frappe/public/js/frappe/ui/group_by/group_by.js index 349a7140d5..08cc91633d 100644 --- a/frappe/public/js/frappe/ui/group_by/group_by.js +++ b/frappe/public/js/frappe/ui/group_by/group_by.js @@ -189,7 +189,7 @@ frappe.ui.GroupBy = class { apply_settings(settings) { let get_fieldname = (name) => name.split(".")[1].replace(/`/g, ""); - let get_doctype = (name) => name.split(".")[0].replace(/`/g, "").replace("tab", ""); + let get_doctype = (name) => name.split(".")[0].replace(/`/g, "").replace(/^tab/, ""); if (!settings.group_by.startsWith("`tab")) { settings.group_by = "`tab" + this.doctype + "`.`" + settings.group_by + "`"; diff --git a/frappe/public/js/frappe/ui/sort_selector.js b/frappe/public/js/frappe/ui/sort_selector.js index ef19905015..28743e926a 100644 --- a/frappe/public/js/frappe/ui/sort_selector.js +++ b/frappe/public/js/frappe/ui/sort_selector.js @@ -63,9 +63,15 @@ frappe.ui.SortSelector = class SortSelector { var order_by = this.args; this.args = {}; - if (order_by.includes("`.`")) { - // scrub table name (separated by dot), like `tabTime Log`.`creation` desc` - order_by = order_by.split(".")[1]; + if (order_by.includes(",")) { + // only keep first + order_by = order_by.split(",")[0]; + } + + if (order_by.includes("`.")) { + // scrub table name (separated by dot), like "`tabTime Log`.`creation` desc" + // and is robust to missing backticks + order_by = order_by.split(".")[1].replace("`", ""); } var parts = order_by.split(" "); @@ -196,12 +202,12 @@ frappe.ui.SortSelector = class SortSelector { } } get_sql_string() { - // build string like: `tabSales Invoice`.subject, `tabSales Invoice`.name desc + // build string like: `tabSales Invoice`.`subject`, `tabSales Invoice`.`name` desc const table_name = "`tab" + this.doctype + "`"; - const sort_by = `${table_name}.${this.sort_by}`; + const sort_by = `${table_name}.\`${this.sort_by}\``; if (!["name", "creation", "modified"].includes(this.sort_by)) { // add name column for deterministic ordering - return `${sort_by} ${this.sort_order}, ${table_name}.name ${this.sort_order}`; + return `${sort_by} ${this.sort_order}, ${table_name}.\`name\` ${this.sort_order}`; } else { return `${sort_by} ${this.sort_order}`; } From 2400d4626888d4b6ce62c26b95c97f85b0a4ce05 Mon Sep 17 00:00:00 2001 From: devdiogenes Date: Mon, 2 Dec 2024 18:02:51 +0000 Subject: [PATCH 002/812] fix: Link Selector links replicating --- frappe/public/js/frappe/form/link_selector.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/link_selector.js b/frappe/public/js/frappe/form/link_selector.js index ae27dd5400..4d2de57ac5 100644 --- a/frappe/public/js/frappe/form/link_selector.js +++ b/frappe/public/js/frappe/form/link_selector.js @@ -116,7 +116,15 @@ frappe.ui.form.LinkSelector = class LinkSelector { if (me.target.is_grid) { // set in grid // call search after value is set to get latest filtered results - me.set_in_grid(value).then(() => me.search()); + me.set_in_grid(value).then(() => { + let previous_start = me.start; + let previous_page_length = me.page_length; + me.start = 0; + me.page_length = previous_start + previous_page_length; + me.search(); + me.start = previous_start; + me.page_length = previous_page_length; + }); } else { if (me.target.doctype) me.target.parse_validate_and_set_in_model(value); From 40ff06d2c63ebb6c048becd4fb038f067f9df117 Mon Sep 17 00:00:00 2001 From: devdiogenes Date: Tue, 3 Dec 2024 11:59:39 +0000 Subject: [PATCH 003/812] style: After run pre-commit --- frappe/public/js/frappe/form/link_selector.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/link_selector.js b/frappe/public/js/frappe/form/link_selector.js index 4d2de57ac5..4069958a6b 100644 --- a/frappe/public/js/frappe/form/link_selector.js +++ b/frappe/public/js/frappe/form/link_selector.js @@ -123,7 +123,7 @@ frappe.ui.form.LinkSelector = class LinkSelector { me.page_length = previous_start + previous_page_length; me.search(); me.start = previous_start; - me.page_length = previous_page_length; + me.page_length = previous_page_length; }); } else { if (me.target.doctype) From 3926160b90e4b1f36baac14dc7fb5c199fdbc977 Mon Sep 17 00:00:00 2001 From: Abdul Mannan Shaikh Date: Fri, 26 Sep 2025 10:37:31 +0000 Subject: [PATCH 004/812] fix: ignore_user_permission unchecked for for_value in User Permission doctype --- frappe/core/doctype/user_permission/user_permission.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frappe/core/doctype/user_permission/user_permission.json b/frappe/core/doctype/user_permission/user_permission.json index 197972261d..aabf8bc093 100644 --- a/frappe/core/doctype/user_permission/user_permission.json +++ b/frappe/core/doctype/user_permission/user_permission.json @@ -40,7 +40,6 @@ { "fieldname": "for_value", "fieldtype": "Dynamic Link", - "ignore_user_permissions": 1, "in_list_view": 1, "in_standard_filter": 1, "label": "For Value", @@ -90,8 +89,8 @@ } ], "links": [], - "modified": "2024-03-23 16:04:00.823875", - "modified_by": "Administrator", + "modified": "2025-09-26 16:05:22.995835", + "modified_by": "abdul.shaikh@esoftech.com", "module": "Core", "name": "User Permission", "owner": "Administrator", @@ -109,9 +108,10 @@ "write": 1 } ], + "row_format": "Dynamic", "sort_field": "creation", "sort_order": "DESC", "states": [], "title_field": "user", "track_changes": 1 -} \ No newline at end of file +} From ef83da2b0f57aa2fdce75c45b88a06457187828a Mon Sep 17 00:00:00 2001 From: Abdul Mannan Shaikh Date: Fri, 26 Sep 2025 10:58:33 +0000 Subject: [PATCH 005/812] fix: commit user set to Administrator --- frappe/core/doctype/user_permission/user_permission.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/core/doctype/user_permission/user_permission.json b/frappe/core/doctype/user_permission/user_permission.json index aabf8bc093..12b6c3b9d0 100644 --- a/frappe/core/doctype/user_permission/user_permission.json +++ b/frappe/core/doctype/user_permission/user_permission.json @@ -89,8 +89,8 @@ } ], "links": [], - "modified": "2025-09-26 16:05:22.995835", - "modified_by": "abdul.shaikh@esoftech.com", + "modified": "2025-09-26 16:28:06.035382", + "modified_by": "Administrator", "module": "Core", "name": "User Permission", "owner": "Administrator", From cb9d69033c8cc90ada5a72840d010ff741b670ba Mon Sep 17 00:00:00 2001 From: Abdul Mannan Shaikh Date: Fri, 26 Sep 2025 11:10:31 +0000 Subject: [PATCH 006/812] fix: removed row_format property --- frappe/core/doctype/user_permission/user_permission.json | 1 - 1 file changed, 1 deletion(-) diff --git a/frappe/core/doctype/user_permission/user_permission.json b/frappe/core/doctype/user_permission/user_permission.json index 12b6c3b9d0..5911a6d90c 100644 --- a/frappe/core/doctype/user_permission/user_permission.json +++ b/frappe/core/doctype/user_permission/user_permission.json @@ -108,7 +108,6 @@ "write": 1 } ], - "row_format": "Dynamic", "sort_field": "creation", "sort_order": "DESC", "states": [], From 06d0122d29aeb1d981c9b2dbdb9a9a2fc639d045 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 1 Oct 2025 23:10:43 +0530 Subject: [PATCH 007/812] feat(event): add location and event notifications --- frappe/desk/doctype/event/event.json | 44 ++++++++++---- frappe/desk/doctype/event/event.py | 5 +- .../doctype/event_notifications/__init__.py | 0 .../event_notifications.json | 57 +++++++++++++++++++ .../event_notifications.py | 26 +++++++++ 5 files changed, 121 insertions(+), 11 deletions(-) create mode 100644 frappe/desk/doctype/event_notifications/__init__.py create mode 100644 frappe/desk/doctype/event_notifications/event_notifications.json create mode 100644 frappe/desk/doctype/event_notifications/event_notifications.py diff --git a/frappe/desk/doctype/event/event.json b/frappe/desk/doctype/event/event.json index 0d6a349180..f03deeb4ed 100644 --- a/frappe/desk/doctype/event/event.json +++ b/frappe/desk/doctype/event/event.json @@ -13,8 +13,8 @@ "event_category", "event_type", "color", - "send_reminder", "repeat_this_event", + "location", "column_break_4", "starts_on", "ends_on", @@ -43,14 +43,18 @@ "sunday", "section_break_8", "description", - "participants", + "participants_tab", "event_participants", + "links_tab", "section_break_jlqd", "reference_doctype", "column_break_pjkw", "reference_docname", "section_break_qemp", - "links" + "links", + "notifications_tab", + "send_reminder", + "notifications" ], "fields": [ { @@ -210,12 +214,6 @@ "print_width": "300px", "width": "300px" }, - { - "fieldname": "participants", - "fieldtype": "Section Break", - "label": "Participants", - "oldfieldtype": "Section Break" - }, { "fieldname": "event_participants", "fieldtype": "Table", @@ -327,13 +325,39 @@ { "fieldname": "section_break_qemp", "fieldtype": "Section Break" + }, + { + "fieldname": "notifications_tab", + "fieldtype": "Tab Break", + "label": "Notifications" + }, + { + "fieldname": "notifications", + "fieldtype": "Table", + "label": "Notifications", + "options": "Event Notifications" + }, + { + "fieldname": "location", + "fieldtype": "Data", + "label": "Location" + }, + { + "fieldname": "participants_tab", + "fieldtype": "Tab Break", + "label": "Participants" + }, + { + "fieldname": "links_tab", + "fieldtype": "Tab Break", + "label": "Links" } ], "grid_page_length": 50, "icon": "fa fa-calendar", "idx": 1, "links": [], - "modified": "2025-08-12 13:37:36.319985", + "modified": "2025-10-01 14:36:42.780094", "modified_by": "Administrator", "module": "Desk", "name": "Event", diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index 3b999a3aa8..f2bec8f15d 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -53,6 +53,7 @@ class Event(Document): if TYPE_CHECKING: from frappe.core.doctype.dynamic_link.dynamic_link import DynamicLink + from frappe.desk.doctype.event_notifications.event_notifications import EventNotifications from frappe.desk.doctype.event_participants.event_participants import EventParticipants from frappe.types import DF @@ -68,9 +69,11 @@ class Event(Document): google_calendar: DF.Link | None google_calendar_event_id: DF.Data | None google_calendar_id: DF.Data | None - google_meet_link: DF.Data | None + google_meet_link: DF.SmallText | None links: DF.Table[DynamicLink] + location: DF.Data | None monday: DF.Check + notifications: DF.Table[EventNotifications] pulled_from_google_calendar: DF.Check reference_docname: DF.DynamicLink | None reference_doctype: DF.Link | None diff --git a/frappe/desk/doctype/event_notifications/__init__.py b/frappe/desk/doctype/event_notifications/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frappe/desk/doctype/event_notifications/event_notifications.json b/frappe/desk/doctype/event_notifications/event_notifications.json new file mode 100644 index 0000000000..0673c68d49 --- /dev/null +++ b/frappe/desk/doctype/event_notifications/event_notifications.json @@ -0,0 +1,57 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-10-01 14:19:43.271468", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "type", + "before", + "interval", + "time" + ], + "fields": [ + { + "default": "Notification", + "fieldname": "type", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Type", + "options": "Notification\nEmail" + }, + { + "fieldname": "before", + "fieldtype": "Int", + "in_list_view": 1, + "label": "Before" + }, + { + "fieldname": "interval", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Interval" + }, + { + "fieldname": "time", + "fieldtype": "Time", + "in_list_view": 1, + "label": "Time" + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-10-01 14:26:21.526868", + "modified_by": "Administrator", + "module": "Desk", + "name": "Event Notifications", + "owner": "Administrator", + "permissions": [], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "sort_field": "creation", + "sort_order": "DESC", + "states": [] +} diff --git a/frappe/desk/doctype/event_notifications/event_notifications.py b/frappe/desk/doctype/event_notifications/event_notifications.py new file mode 100644 index 0000000000..46fe2654b0 --- /dev/null +++ b/frappe/desk/doctype/event_notifications/event_notifications.py @@ -0,0 +1,26 @@ +# Copyright (c) 2025, Frappe Technologies and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class EventNotifications(Document): + # begin: auto-generated types + # This code is auto-generated. Do not modify anything in this block. + + from typing import TYPE_CHECKING + + if TYPE_CHECKING: + from frappe.types import DF + + before: DF.Int + interval: DF.Literal[None] + parent: DF.Data + parentfield: DF.Data + parenttype: DF.Data + time: DF.Time | None + type: DF.Literal["Notification", "Email"] + # end: auto-generated types + + pass From 952f8ef165908e7b80e86ae8378a35f4a19723e5 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Mon, 6 Oct 2025 14:12:38 +0530 Subject: [PATCH 008/812] feat: add 'attending' field to event with options Yes, No, Maybe --- frappe/desk/doctype/event/event.json | 11 ++++++++++- frappe/desk/doctype/event/event.py | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/frappe/desk/doctype/event/event.json b/frappe/desk/doctype/event/event.json index f03deeb4ed..6e8af0b1df 100644 --- a/frappe/desk/doctype/event/event.json +++ b/frappe/desk/doctype/event/event.json @@ -19,6 +19,7 @@ "starts_on", "ends_on", "status", + "attending", "sender", "all_day", "sync_with_google_calendar", @@ -351,13 +352,21 @@ "fieldname": "links_tab", "fieldtype": "Tab Break", "label": "Links" + }, + { + "fieldname": "attending", + "fieldtype": "Select", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Attending", + "options": "Yes\nNo\nMaybe" } ], "grid_page_length": 50, "icon": "fa fa-calendar", "idx": 1, "links": [], - "modified": "2025-10-01 14:36:42.780094", + "modified": "2025-10-06 14:11:20.433505", "modified_by": "Administrator", "module": "Desk", "name": "Event", diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index f2bec8f15d..a59e785a71 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -59,6 +59,7 @@ class Event(Document): add_video_conferencing: DF.Check all_day: DF.Check + attending: DF.Literal["Yes", "No", "Maybe"] color: DF.Color | None description: DF.TextEditor | None ends_on: DF.Datetime | None From 4e1c000edfaffa12f5066cf6625036689163f26f Mon Sep 17 00:00:00 2001 From: shariquerik Date: Mon, 6 Oct 2025 14:53:08 +0530 Subject: [PATCH 009/812] refactor: removed attending field from event and added in event participants instead --- frappe/desk/doctype/event/event.json | 11 +---------- frappe/desk/doctype/event/event.py | 1 - .../event_participants/event_participants.json | 17 +++++++++++++---- .../event_participants/event_participants.py | 1 + 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/frappe/desk/doctype/event/event.json b/frappe/desk/doctype/event/event.json index 6e8af0b1df..8b8ca59694 100644 --- a/frappe/desk/doctype/event/event.json +++ b/frappe/desk/doctype/event/event.json @@ -19,7 +19,6 @@ "starts_on", "ends_on", "status", - "attending", "sender", "all_day", "sync_with_google_calendar", @@ -352,21 +351,13 @@ "fieldname": "links_tab", "fieldtype": "Tab Break", "label": "Links" - }, - { - "fieldname": "attending", - "fieldtype": "Select", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Attending", - "options": "Yes\nNo\nMaybe" } ], "grid_page_length": 50, "icon": "fa fa-calendar", "idx": 1, "links": [], - "modified": "2025-10-06 14:11:20.433505", + "modified": "2025-10-06 14:52:09.583526", "modified_by": "Administrator", "module": "Desk", "name": "Event", diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index a59e785a71..f2bec8f15d 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -59,7 +59,6 @@ class Event(Document): add_video_conferencing: DF.Check all_day: DF.Check - attending: DF.Literal["Yes", "No", "Maybe"] color: DF.Color | None description: DF.TextEditor | None ends_on: DF.Datetime | None diff --git a/frappe/desk/doctype/event_participants/event_participants.json b/frappe/desk/doctype/event_participants/event_participants.json index 454df5dda5..ddee4564b8 100644 --- a/frappe/desk/doctype/event_participants/event_participants.json +++ b/frappe/desk/doctype/event_participants/event_participants.json @@ -7,7 +7,8 @@ "field_order": [ "reference_doctype", "reference_docname", - "email" + "email", + "attending" ], "fields": [ { @@ -31,19 +32,27 @@ "fieldtype": "Data", "label": "Email", "options": "Email" + }, + { + "fieldname": "attending", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Attending", + "options": "\nYes\nNo\nMaybe" } ], "istable": 1, "links": [], - "modified": "2024-03-23 16:03:25.717745", - "modified_by": "Administrator", + "modified": "2025-10-06 15:03:36.186683", + "modified_by": "shariq@frappe.io", "module": "Desk", "name": "Event Participants", "owner": "Administrator", "permissions": [], "quick_entry": 1, + "row_format": "Dynamic", "sort_field": "creation", "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/frappe/desk/doctype/event_participants/event_participants.py b/frappe/desk/doctype/event_participants/event_participants.py index 48a3e37f3d..5e5b4bf326 100644 --- a/frappe/desk/doctype/event_participants/event_participants.py +++ b/frappe/desk/doctype/event_participants/event_participants.py @@ -12,6 +12,7 @@ class EventParticipants(Document): if TYPE_CHECKING: from frappe.types import DF + attending: DF.Literal["", "Yes", "No", "Maybe"] email: DF.Data | None parent: DF.Data parentfield: DF.Data From c1b7a537c38509a967a6728a8773a00d3c72e71e Mon Sep 17 00:00:00 2001 From: shariquerik Date: Tue, 7 Oct 2025 09:13:24 +0530 Subject: [PATCH 010/812] feat: add 'attending' field to event to capture organizer rsvp --- frappe/desk/doctype/event/event.json | 11 +++++++++-- frappe/desk/doctype/event/event.py | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/frappe/desk/doctype/event/event.json b/frappe/desk/doctype/event/event.json index 8b8ca59694..5b792d8d52 100644 --- a/frappe/desk/doctype/event/event.json +++ b/frappe/desk/doctype/event/event.json @@ -20,6 +20,7 @@ "ends_on", "status", "sender", + "attending", "all_day", "sync_with_google_calendar", "add_video_conferencing", @@ -351,14 +352,20 @@ "fieldname": "links_tab", "fieldtype": "Tab Break", "label": "Links" + }, + { + "fieldname": "attending", + "fieldtype": "Select", + "label": "Attending", + "options": "\nYes\nNo\nMaybe" } ], "grid_page_length": 50, "icon": "fa fa-calendar", "idx": 1, "links": [], - "modified": "2025-10-06 14:52:09.583526", - "modified_by": "Administrator", + "modified": "2025-10-07 08:53:24.732646", + "modified_by": "shariq@frappe.io", "module": "Desk", "name": "Event", "naming_rule": "Expression (old style)", diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index f2bec8f15d..9c754273b8 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -59,6 +59,7 @@ class Event(Document): add_video_conferencing: DF.Check all_day: DF.Check + attending: DF.Literal["", "Yes", "No", "Maybe"] color: DF.Color | None description: DF.TextEditor | None ends_on: DF.Datetime | None From f967a3fff239105b0052f842830fa363d102dcad Mon Sep 17 00:00:00 2001 From: shariquerik Date: Mon, 13 Oct 2025 14:32:44 +0530 Subject: [PATCH 011/812] feat: enhance permission checks for event participants --- frappe/desk/doctype/event/event.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index 9c754273b8..c47f173b88 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -242,13 +242,22 @@ def get_permission_query_conditions(user): query = f"""(`tabEvent`.`event_type`='Public' or `tabEvent`.`owner`={frappe.db.escape(user)})""" if shared_events := frappe.share.get_shared("Event", user=user): query += f" or `tabEvent`.`name` in ({', '.join([frappe.db.escape(e) for e in shared_events])})" + + query += f" or exists (select 'x' from `tabEvent Participants` ep where ep.parent=`tabEvent`.name and ep.email={frappe.db.escape(user)})" + return query -def has_permission(doc, user): +def has_permission(doc, ptype=None, user=None): if doc.event_type == "Public" or doc.owner == user: return True + for participant in doc.event_participants: + if participant.email == user: + if ptype in ["write", "create", "delete"]: + return False + return True + return False From e84fa7b36ae6903d0e7f9970865e36737aca1152 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Mon, 13 Oct 2025 14:33:00 +0530 Subject: [PATCH 012/812] feat: add function to update attending status for event participants --- frappe/desk/doctype/event/event.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index c47f173b88..d2cbcb3dfc 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -214,6 +214,19 @@ class Event(Document): ) +@frappe.whitelist() +def update_attending_status(event_name, attendee, status): + event_doc = frappe.get_doc("Event", event_name) + + for participant in event_doc.event_participants: + if participant.email == attendee: + frappe.db.set_value("Event Participants", participant.name, "attending", status) + return + + if not has_permission(event_doc, user=attendee): + frappe.throw(_("You are not allowed to update the status of this event.")) + + @frappe.whitelist() def delete_communication(event, reference_doctype, reference_docname): if isinstance(event, str): From bcf0813e9ebee329272fa162206114dd7d30acff Mon Sep 17 00:00:00 2001 From: shariquerik Date: Mon, 13 Oct 2025 14:43:57 +0530 Subject: [PATCH 013/812] feat: allow event organizers to update their own attending status --- frappe/desk/doctype/event/event.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index d2cbcb3dfc..7e7f06da72 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -218,6 +218,11 @@ class Event(Document): def update_attending_status(event_name, attendee, status): event_doc = frappe.get_doc("Event", event_name) + if frappe.session.user == attendee: + event_doc.attending = status + event_doc.save() + return + for participant in event_doc.event_participants: if participant.email == attendee: frappe.db.set_value("Event Participants", participant.name, "attending", status) From 4da3e38491572d44800073601ec371def889f7e4 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Mon, 13 Oct 2025 15:38:32 +0530 Subject: [PATCH 014/812] fix: update attending status only if the attendee is the event owner --- frappe/desk/doctype/event/event.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index 7e7f06da72..cdef5bd308 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -218,9 +218,8 @@ class Event(Document): def update_attending_status(event_name, attendee, status): event_doc = frappe.get_doc("Event", event_name) - if frappe.session.user == attendee: - event_doc.attending = status - event_doc.save() + if event_doc.owner == attendee == frappe.session.user: + frappe.db.set_value("Event", event_name, "attending", status) return for participant in event_doc.event_participants: From 39b523ea96940d62fbb942635531dd6005e8c07d Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Sat, 1 Nov 2025 21:41:49 +0000 Subject: [PATCH 015/812] feat: add check to apply module export filter in Export Customizations dialog --- frappe/custom/doctype/customize_form/customize_form.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/frappe/custom/doctype/customize_form/customize_form.js b/frappe/custom/doctype/customize_form/customize_form.js index 2d047d4c30..5d6b2ace2e 100644 --- a/frappe/custom/doctype/customize_form/customize_form.js +++ b/frappe/custom/doctype/customize_form/customize_form.js @@ -265,6 +265,15 @@ frappe.ui.form.on("Customize Form", { ), default: 0, }, + { + fieldtype: "Check", + fieldname: "apply_module_export_filter", + label: __("Apply Module Export Filter"), + description: __( + "Apply Module (for export) filter while exporting customizations." + ), + default: 0, + }, ], function (data) { frappe.call({ @@ -274,6 +283,7 @@ frappe.ui.form.on("Customize Form", { module: data.module, sync_on_migrate: data.sync_on_migrate, with_permissions: data.with_permissions, + apply_module_export_filter: data.apply_module_export_filter, }, }); }, From 4a538339a5a681c061351000b398de513bdf9194 Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Sat, 1 Nov 2025 21:45:33 +0000 Subject: [PATCH 016/812] feat: add option to apply module export filter in export_customizations function --- frappe/modules/utils.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/frappe/modules/utils.py b/frappe/modules/utils.py index 30713a684f..eb62d994b1 100644 --- a/frappe/modules/utils.py +++ b/frappe/modules/utils.py @@ -53,21 +53,35 @@ def get_doc_module(module: str, doctype: str, name: str) -> "ModuleType": @frappe.whitelist() def export_customizations( - module: str, doctype: str, sync_on_migrate: bool = False, with_permissions: bool = False + module: str, + doctype: str, + sync_on_migrate: bool = False, + with_permissions: bool = False, + apply_module_export_filter: bool = False, ): """Export Custom Field and Property Setter for the current document to the app folder. This will be synced with bench migrate""" sync_on_migrate = cint(sync_on_migrate) with_permissions = cint(with_permissions) + apply_module_export_filter = cint(apply_module_export_filter) + module_export_filter = module if apply_module_export_filter else "" if not frappe.conf.developer_mode: frappe.throw(_("Only allowed to export customizations in developer mode")) custom = { - "custom_fields": frappe.get_all("Custom Field", fields="*", filters={"dt": doctype}, order_by="name"), + "custom_fields": frappe.get_all( + "Custom Field", + fields="*", + filters={"dt": doctype, "module": module_export_filter}, + order_by="name", + ), "property_setters": frappe.get_all( - "Property Setter", fields="*", filters={"doc_type": doctype}, order_by="name" + "Property Setter", + fields="*", + filters={"doc_type": doctype, "module": module_export_filter}, + order_by="name", ), "custom_perms": [], "links": frappe.get_all("DocType Link", fields="*", filters={"parent": doctype}, order_by="name"), @@ -82,7 +96,9 @@ def export_customizations( # also update the custom fields and property setters for all child tables for d in frappe.get_meta(doctype).get_table_fields(): - export_customizations(module, d.options, sync_on_migrate, with_permissions) + export_customizations( + module, d.options, sync_on_migrate, with_permissions, apply_module_export_filter + ) if custom["custom_fields"] or custom["property_setters"] or custom["custom_perms"]: folder_path = os.path.join(get_module_path(module), "custom") From 2539e311f3def46a2f2e0207f3a4b20749b36532 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Thu, 6 Nov 2025 13:09:22 +0530 Subject: [PATCH 017/812] fix: remove deleted event from completed events in user settings on event deletion --- frappe/desk/doctype/event/event.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index cdef5bd308..37c10b3477 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -14,6 +14,7 @@ from frappe.desk.doctype.notification_settings.notification_settings import ( ) from frappe.desk.reportview import get_filters_cond from frappe.model.document import Document +from frappe.model.utils.user_settings import get_user_settings, sync_user_settings, update_user_settings from frappe.utils import ( add_days, add_months, @@ -128,6 +129,8 @@ class Event(Document): for communication in communications: frappe.delete_doc("Communication", communication, force=True) + self.remove_event_from_user_settings() + def sync_communication(self): if not self.event_participants: return @@ -213,6 +216,23 @@ class Event(Document): frappe.get_value("Contact", participant_contact, "email_id") if participant_contact else None ) + def remove_event_from_user_settings(self): + user_settings = get_user_settings("Event", for_update=True) + if user_settings: + user_settings = json.loads(user_settings) + + if "notifications" in user_settings: + notifications = user_settings.get("notifications") + completedEvents = notifications.get("completedEvents", []) + if self.name in completedEvents: + completedEvents.remove(self.name) + notifications["completedEvents"] = completedEvents + updated_notifications = notifications + user_settings["notifications"] = updated_notifications + + update_user_settings("Event", json.dumps(user_settings), for_update=True) + sync_user_settings() + @frappe.whitelist() def update_attending_status(event_name, attendee, status): From c517025d07d757d4603b73637c704590b76da873 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Wed, 19 Nov 2025 17:22:17 +0530 Subject: [PATCH 018/812] test: update expected field count in Event customization test --- frappe/custom/doctype/customize_form/test_customize_form.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/custom/doctype/customize_form/test_customize_form.py b/frappe/custom/doctype/customize_form/test_customize_form.py index 0051bb31fb..17708fc7b2 100644 --- a/frappe/custom/doctype/customize_form/test_customize_form.py +++ b/frappe/custom/doctype/customize_form/test_customize_form.py @@ -55,7 +55,7 @@ class TestCustomizeForm(IntegrationTestCase): d = self.get_customize_form("Event") self.assertEqual(d.doc_type, "Event") - self.assertEqual(len(d.get("fields")), 44) + self.assertEqual(len(d.get("fields")), 49) d = self.get_customize_form("Event") self.assertEqual(d.doc_type, "Event") From e934fe27824dfe34bf9451a775e2fbcbe3586739 Mon Sep 17 00:00:00 2001 From: "Abdallah A. Zaqout" <26047413+zaqoutabed@users.noreply.github.com> Date: Sun, 23 Nov 2025 14:09:58 +0300 Subject: [PATCH 019/812] fix: stop validation when click pervious btn --- frappe/public/js/frappe/web_form/web_form.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/public/js/frappe/web_form/web_form.js b/frappe/public/js/frappe/web_form/web_form.js index 5ee2c22128..71b167e065 100644 --- a/frappe/public/js/frappe/web_form/web_form.js +++ b/frappe/public/js/frappe/web_form/web_form.js @@ -103,9 +103,9 @@ export default class WebForm extends frappe.ui.FieldGroup { $(".web-form-footer .left-area").prepend(this.$previous_button); this.$previous_button.on("click", () => { - let is_validated = me.validate_section(); + // let is_validated = me.validate_section(); - if (!is_validated) return false; + // if (!is_validated) return false; /** The eslint utility cannot figure out if this is an infinite loop in backwards and From ed1aa5197ec77f9486fc3615a0c83a249fd85bd4 Mon Sep 17 00:00:00 2001 From: rehansari26 Date: Fri, 10 Oct 2025 12:04:37 +0530 Subject: [PATCH 020/812] feat: add child table field support to bulk operations --- .../desk/doctype/bulk_update/bulk_update.py | 24 ++++++++++++++++- .../public/js/frappe/list/bulk_operations.js | 24 ++++++++++++++--- frappe/public/js/frappe/list/list_view.js | 27 ++++++++++++++++++- 3 files changed, 69 insertions(+), 6 deletions(-) diff --git a/frappe/desk/doctype/bulk_update/bulk_update.py b/frappe/desk/doctype/bulk_update/bulk_update.py index 6396357e80..d595d3b6e8 100644 --- a/frappe/desk/doctype/bulk_update/bulk_update.py +++ b/frappe/desk/doctype/bulk_update/bulk_update.py @@ -90,7 +90,29 @@ def _bulk_action(doctype, docnames, action, data, task_id=None): doc.cancel() message = _("Cancelling {0}").format(doctype) elif action == "update" and not doc.docstatus.is_cancelled(): - doc.update(data) + # Handle child table updates + if data and "child_table_updates" in data: + child_table_updates = data["child_table_updates"] + for child_doctype, field_updates in child_table_updates.items(): + # Find the table field that contains this child doctype + table_fieldname = None + for field in doc.meta.get_table_fields(): + if field.options == child_doctype: + table_fieldname = field.fieldname + break + + if table_fieldname and hasattr(doc, table_fieldname): + child_docs = getattr(doc, table_fieldname) + for child_doc in child_docs: + for fieldname, value in field_updates.items(): + if hasattr(child_doc, fieldname): + setattr(child_doc, fieldname, value) + + # Handle regular field updates + regular_data = {k: v for k, v in data.items() if k != "child_table_updates"} + if regular_data: + doc.update(regular_data) + doc.save() message = _("Updating {0}").format(doctype) else: diff --git a/frappe/public/js/frappe/list/bulk_operations.js b/frappe/public/js/frappe/list/bulk_operations.js index 1c045bc6ae..8753007589 100644 --- a/frappe/public/js/frappe/list/bulk_operations.js +++ b/frappe/public/js/frappe/list/bulk_operations.js @@ -341,8 +341,24 @@ export default class BulkOperations { }, ], primary_action: ({ value }) => { - const fieldname = field_mappings[dialog.get_value("field")].fieldname; + const selected_field = field_mappings[dialog.get_value("field")]; + const fieldname = selected_field.fieldname; + const is_child_field = selected_field.is_child_field; + const child_doctype = selected_field.child_doctype; dialog.disable_primary_action(); + let update_data = {}; + if (is_child_field) { + // For child table fields, we need to update all rows in the child table + update_data = { + child_table_updates: { + [child_doctype]: { + [fieldname]: value || null, + }, + }, + }; + } else { + update_data[fieldname] = value || null; + } frappe .call({ method: "frappe.desk.doctype.bulk_update.bulk_update.submit_cancel_or_update_docs", @@ -351,9 +367,7 @@ export default class BulkOperations { freeze: true, docnames: docnames, action: "update", - data: { - [fieldname]: value || null, - }, + data: update_data, }, }) .then((r) => { @@ -399,6 +413,8 @@ export default class BulkOperations { new_df.onchange = show_help_text; delete new_df.depends_on; + delete new_df.is_child_field; + delete new_df.child_doctype; dialogObj.replace_field("value", new_df); show_help_text(); } diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index ff6f2e0ac6..231fe114c9 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -2273,7 +2273,32 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { frappe.meta.get_docfields(doctype).forEach((field_doc) => { if (is_field_editable(field_doc)) { - field_mappings[field_doc.label] = Object.assign({}, field_doc); + const field_key = `${field_doc.label} (${doctype})`; + field_mappings[field_key] = Object.assign({}, field_doc, { + is_child_field: false, + }); + } + }); + + // Add child table fields + const table_fields = frappe.meta + .get_docfields(doctype) + .filter((df) => df.fieldtype === "Table"); + table_fields.forEach((table_field) => { + if (table_field.options) { + const child_doctype = table_field.options; + const child_fields = frappe.meta.get_docfields(child_doctype); + + child_fields.forEach((child_field) => { + if (is_field_editable(child_field)) { + const field_key = `${child_field.label} (${table_field.label})`; + field_mappings[field_key] = Object.assign({}, child_field, { + is_child_field: true, + child_doctype: child_doctype, + parent_table_field: table_field.fieldname, + }); + } + }); } }); From a4c9dff1c665c96d5885579601e1166477f4b9de Mon Sep 17 00:00:00 2001 From: Rehan Ansari Date: Sat, 18 Oct 2025 21:43:35 +0530 Subject: [PATCH 021/812] refactor: optimize bulk operations --- .../desk/doctype/bulk_update/bulk_update.py | 21 +++++++++---------- .../public/js/frappe/list/bulk_operations.js | 4 +--- frappe/public/js/frappe/list/list_view.js | 15 +++++-------- 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/frappe/desk/doctype/bulk_update/bulk_update.py b/frappe/desk/doctype/bulk_update/bulk_update.py index d595d3b6e8..25b5354e73 100644 --- a/frappe/desk/doctype/bulk_update/bulk_update.py +++ b/frappe/desk/doctype/bulk_update/bulk_update.py @@ -91,27 +91,26 @@ def _bulk_action(doctype, docnames, action, data, task_id=None): message = _("Cancelling {0}").format(doctype) elif action == "update" and not doc.docstatus.is_cancelled(): # Handle child table updates - if data and "child_table_updates" in data: - child_table_updates = data["child_table_updates"] + if child_table_updates := data.pop("child_table_updates", None): + table_fields = doc.meta.get_table_fields() for child_doctype, field_updates in child_table_updates.items(): # Find the table field that contains this child doctype - table_fieldname = None - for field in doc.meta.get_table_fields(): - if field.options == child_doctype: - table_fieldname = field.fieldname - break + table_fieldname = next( + (field.fieldname for field in table_fields if field.options == child_doctype), + None, + ) if table_fieldname and hasattr(doc, table_fieldname): + child_meta = frappe.get_meta(child_doctype) child_docs = getattr(doc, table_fieldname) for child_doc in child_docs: for fieldname, value in field_updates.items(): - if hasattr(child_doc, fieldname): + if child_meta.has_field(fieldname): setattr(child_doc, fieldname, value) # Handle regular field updates - regular_data = {k: v for k, v in data.items() if k != "child_table_updates"} - if regular_data: - doc.update(regular_data) + if data: + doc.update(data) doc.save() message = _("Updating {0}").format(doctype) diff --git a/frappe/public/js/frappe/list/bulk_operations.js b/frappe/public/js/frappe/list/bulk_operations.js index 8753007589..90336bf8ee 100644 --- a/frappe/public/js/frappe/list/bulk_operations.js +++ b/frappe/public/js/frappe/list/bulk_operations.js @@ -342,9 +342,7 @@ export default class BulkOperations { ], primary_action: ({ value }) => { const selected_field = field_mappings[dialog.get_value("field")]; - const fieldname = selected_field.fieldname; - const is_child_field = selected_field.is_child_field; - const child_doctype = selected_field.child_doctype; + const { fieldname, is_child_field, child_doctype } = selected_field; dialog.disable_primary_action(); let update_data = {}; if (is_child_field) { diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index 231fe114c9..c1e21b99be 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -2278,24 +2278,19 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { is_child_field: false, }); } - }); - // Add child table fields - const table_fields = frappe.meta - .get_docfields(doctype) - .filter((df) => df.fieldtype === "Table"); - table_fields.forEach((table_field) => { - if (table_field.options) { - const child_doctype = table_field.options; + // Add child table fields for Table fieldtype + if (field_doc.fieldtype === "Table" && field_doc.options) { + const child_doctype = field_doc.options; const child_fields = frappe.meta.get_docfields(child_doctype); child_fields.forEach((child_field) => { if (is_field_editable(child_field)) { - const field_key = `${child_field.label} (${table_field.label})`; + const field_key = `${child_field.label} (${field_doc.label})`; field_mappings[field_key] = Object.assign({}, child_field, { is_child_field: true, child_doctype: child_doctype, - parent_table_field: table_field.fieldname, + parent_table_field: field_doc.fieldname, }); } }); From 4b31d72297470144dd236432e97c859828b86276 Mon Sep 17 00:00:00 2001 From: Rehan Ansari Date: Tue, 4 Nov 2025 21:17:33 +0530 Subject: [PATCH 022/812] test: add test case for bulk record update --- .../desk/doctype/bulk_update/bulk_update.py | 2 +- .../doctype/bulk_update/test_bulk_update.py | 57 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/frappe/desk/doctype/bulk_update/bulk_update.py b/frappe/desk/doctype/bulk_update/bulk_update.py index 25b5354e73..f1e86de3f4 100644 --- a/frappe/desk/doctype/bulk_update/bulk_update.py +++ b/frappe/desk/doctype/bulk_update/bulk_update.py @@ -91,7 +91,7 @@ def _bulk_action(doctype, docnames, action, data, task_id=None): message = _("Cancelling {0}").format(doctype) elif action == "update" and not doc.docstatus.is_cancelled(): # Handle child table updates - if child_table_updates := data.pop("child_table_updates", None): + if child_table_updates := data.get("child_table_updates", None): table_fields = doc.meta.get_table_fields() for child_doctype, field_updates in child_table_updates.items(): # Find the table field that contains this child doctype diff --git a/frappe/desk/doctype/bulk_update/test_bulk_update.py b/frappe/desk/doctype/bulk_update/test_bulk_update.py index cafa662bae..3d26ea0aca 100644 --- a/frappe/desk/doctype/bulk_update/test_bulk_update.py +++ b/frappe/desk/doctype/bulk_update/test_bulk_update.py @@ -14,6 +14,7 @@ class TestBulkUpdate(IntegrationTestCase): def setUpClass(cls) -> None: super().setUpClass() cls.doctype = new_doctype(is_submittable=1, custom=1).insert().name + cls.child_doctype = new_doctype(istable=1, custom=1).insert().name frappe.db.commit() for _ in range(50): frappe.new_doc(cls.doctype, some_fieldname=frappe.mock("name")).insert() @@ -46,3 +47,59 @@ class TestBulkUpdate(IntegrationTestCase): submitted = frappe.get_all(self.doctype, {"docstatus": 1}, limit=20, pluck="name") submit_cancel_or_update_docs(self.doctype, submitted, action="cancel") self.wait_for_assertion(lambda: check_docstatus(submitted, 2)) + + def test_bulk_update_parent_fields(self): + docnames = frappe.get_all(self.doctype, {"docstatus": 0}, limit=5, pluck="name") + failed = submit_cancel_or_update_docs( + self.doctype, docnames, action="update", data={"some_fieldname": "_Test Sync"} + ) + self.assertEqual(failed, []) + + def check_field_values(docs, expected): + frappe.db.rollback() + values = frappe.get_all(self.doctype, {"name": ["in", docs]}, ["name", "some_fieldname"]) + return all(v.some_fieldname == expected for v in values) + + docnames_bg = frappe.get_all(self.doctype, {"docstatus": 0}, limit=20, pluck="name") + submit_cancel_or_update_docs( + self.doctype, docnames_bg, action="update", data={"some_fieldname": "_Test Background"} + ) + + self.wait_for_assertion(lambda: check_field_values(docnames_bg, "_Test Background")) + + def test_bulk_update_child_fields(self): + doctype_doc = frappe.get_doc("DocType", self.doctype) + doctype_doc.append( + "fields", {"fieldname": "child_table", "fieldtype": "Table", "options": self.child_doctype} + ) + doctype_doc.save() + frappe.db.commit() + + existing_docs = frappe.get_all(self.doctype, {"docstatus": 0}, pluck="name") + for docname in existing_docs: + doc = frappe.get_doc(self.doctype, docname) + doc.append("child_table", {"some_fieldname": "_Test Child Value"}) + doc.save() + frappe.db.commit() + + update_data = { + "child_table_updates": { + self.child_doctype: {"some_fieldname": "_Test Child Updated"}, + } + } + + def check_child_field(docs, expected): + frappe.db.rollback() + for docname in docs: + doc = frappe.get_doc(self.doctype, docname) + if not doc.child_table or doc.child_table[0].some_fieldname != expected: + return False + return True + + docnames = frappe.get_all(self.doctype, {"docstatus": 0}, limit=5, pluck="name") + failed = submit_cancel_or_update_docs(self.doctype, docnames, action="update", data=update_data) + self.assertEqual(failed, []) + + docnames_bg = frappe.get_all(self.doctype, {"docstatus": 0}, limit=20, pluck="name") + submit_cancel_or_update_docs(self.doctype, docnames_bg, action="update", data=update_data) + self.wait_for_assertion(lambda: check_child_field(docnames_bg, "_Test Child Updated")) From 9c66d74c01b209cac1ea297218d9e01c9c626a51 Mon Sep 17 00:00:00 2001 From: Rehan Ansari Date: Wed, 3 Dec 2025 21:56:21 +0530 Subject: [PATCH 023/812] fix: move child_table_updates outside loop --- frappe/desk/doctype/bulk_update/bulk_update.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/desk/doctype/bulk_update/bulk_update.py b/frappe/desk/doctype/bulk_update/bulk_update.py index f1e86de3f4..af065866cc 100644 --- a/frappe/desk/doctype/bulk_update/bulk_update.py +++ b/frappe/desk/doctype/bulk_update/bulk_update.py @@ -72,6 +72,7 @@ def _bulk_action(doctype, docnames, action, data, task_id=None): if data: data = frappe.parse_json(data) + child_table_updates = data.get("child_table_updates") if data else None failed = [] num_documents = len(docnames) @@ -91,7 +92,7 @@ def _bulk_action(doctype, docnames, action, data, task_id=None): message = _("Cancelling {0}").format(doctype) elif action == "update" and not doc.docstatus.is_cancelled(): # Handle child table updates - if child_table_updates := data.get("child_table_updates", None): + if child_table_updates: table_fields = doc.meta.get_table_fields() for child_doctype, field_updates in child_table_updates.items(): # Find the table field that contains this child doctype From afdcdfb8518ff88dc94d7d363841e621c0e1407f Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Fri, 5 Dec 2025 12:55:04 +0100 Subject: [PATCH 024/812] fix: input change handling in FieldGroup --- frappe/public/js/frappe/ui/field_group.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/frappe/public/js/frappe/ui/field_group.js b/frappe/public/js/frappe/ui/field_group.js index 760881770e..ed3368b1e1 100644 --- a/frappe/public/js/frappe/ui/field_group.js +++ b/frappe/public/js/frappe/ui/field_group.js @@ -48,13 +48,13 @@ frappe.ui.FieldGroup = class FieldGroup extends frappe.ui.form.Layout { $(this.wrapper) .find("input, select") - .on("change awesomplete-selectcomplete", () => { - this.dirty = true; - frappe.run_serially([ - () => frappe.timeout(0.1), - () => me.refresh_dependency(), - ]); - }); + .on( + "change input awesomplete-selectcomplete", + frappe.utils.debounce(() => { + this.dirty = true; + me.refresh_dependency(); + }, 100) + ); } } From b308ee813ab6eafc3b00b74d720025b4755ab201 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Mon, 8 Dec 2025 16:45:30 +0530 Subject: [PATCH 025/812] fix: per child level 'depends on' conditions --- frappe/public/js/frappe/form/grid.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index 7cce820f60..5a38dc7e43 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -531,7 +531,7 @@ export default class Grid { grid_row = new GridRow({ parent: $rows, parent_df: this.df, - docfields: this.docfields, + docfields: JSON.parse(JSON.stringify(this.docfields)), doc: d, frm: this.frm, grid: this, From 337a4bcfd21ae7c4b93c9d1ca060aa9a21ce44fe Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Tue, 9 Dec 2025 11:21:26 +0000 Subject: [PATCH 026/812] fix: apply module export filter only when checked --- frappe/modules/utils.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frappe/modules/utils.py b/frappe/modules/utils.py index 8ad5127cba..83fd7b3457 100644 --- a/frappe/modules/utils.py +++ b/frappe/modules/utils.py @@ -67,7 +67,13 @@ def export_customizations( sync_on_migrate = cint(sync_on_migrate) with_permissions = cint(with_permissions) apply_module_export_filter = cint(apply_module_export_filter) - module_export_filter = module if apply_module_export_filter else "" + + cf_filters = {"dt": doctype} + ps_filters = {"doc_type": doctype} + + if apply_module_export_filter: + cf_filters["module"] = module + ps_filters["module"] = module if not frappe.conf.developer_mode: frappe.throw(_("Only allowed to export customizations in developer mode")) @@ -76,13 +82,13 @@ def export_customizations( "custom_fields": frappe.get_all( "Custom Field", fields="*", - filters={"dt": doctype, "module": module_export_filter}, + filters=cf_filters, order_by="name", ), "property_setters": frappe.get_all( "Property Setter", fields="*", - filters={"doc_type": doctype, "module": module_export_filter}, + filters=ps_filters, order_by="name", ), "custom_perms": [], From 78e75510cc15db6c3f604f81c9261f1ae96d5776 Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Tue, 9 Dec 2025 11:47:25 +0000 Subject: [PATCH 027/812] refactor: enhance description for module export filter in Customize Form --- frappe/custom/doctype/customize_form/customize_form.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frappe/custom/doctype/customize_form/customize_form.js b/frappe/custom/doctype/customize_form/customize_form.js index 5d6b2ace2e..ed8f412d16 100644 --- a/frappe/custom/doctype/customize_form/customize_form.js +++ b/frappe/custom/doctype/customize_form/customize_form.js @@ -270,7 +270,10 @@ frappe.ui.form.on("Customize Form", { fieldname: "apply_module_export_filter", label: __("Apply Module Export Filter"), description: __( - "Apply Module (for export) filter while exporting customizations." + "Export only customizations assigned to the selected module.
\ + Note: You must set the Module (for export) field on Custom Field and Property Setter records before applying this filter.\ +

Warning: Customizations from other modules will be excluded.

\ + " ), default: 0, }, From d07a90092ff27be51f408d410d94efb0eb0b8384 Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Tue, 9 Dec 2025 12:30:18 +0000 Subject: [PATCH 028/812] test: add unit tests for exporting customizations with module filter --- frappe/tests/test_modules.py | 47 ++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/frappe/tests/test_modules.py b/frappe/tests/test_modules.py index 22a8359528..f54bddfc7e 100644 --- a/frappe/tests/test_modules.py +++ b/frappe/tests/test_modules.py @@ -84,6 +84,53 @@ class TestUtils(IntegrationTestCase): self.assertTrue(file_path.endswith("/custom/custom/note.json")) self.assertTrue(os.path.exists(file_path)) + @unittest.skipUnless( + os.access(frappe.get_app_path("frappe"), os.W_OK), "Only run if frappe app paths is writable" + ) + def test_export_customizations_with_module_filter(self): + # create two customizations, one matching the module, one under a different module + with note_customizations() as (custom_field, property_setter): + custom_field.db_set("module", "Custom") + property_setter.db_set("module", "Custom") + + # create module def called OtherModule + other_module = frappe.new_doc("Module Def") + + other_module.update({"module_name": "OtherModule", "app_name": "frappe"}) + other_module.save(ignore_permissions=True) + self.addCleanup(other_module.delete) + + # create a customization belonging to another module (should be excluded) + other_cf = create_custom_field( + "Note", + df={ + "fieldname": "other_mod_field", + "label": "Other Mod Field", + "fieldtype": "Data", + "module": "OtherModule", + }, + ) + + self.addCleanup(other_cf.delete) + + file_path = export_customizations( + module="Custom", + doctype="Note", + apply_module_export_filter=True, + ) + self.addCleanup(delete_file, path=file_path) + + self.assertTrue(os.path.exists(file_path)) + + with open(file_path) as f: + exported = frappe.parse_json(f.read()) + + exported_fields = {f["fieldname"] for f in exported.get("custom_fields", [])} + + self.assertIn("test_export_customizations_field", exported_fields) + + self.assertNotIn("other_mod_field", exported_fields) + @unittest.skipUnless( os.access(frappe.get_app_path("frappe"), os.W_OK), "Only run if frappe app paths is writable" ) From e5a237fc9d99e5e0fa257e8afb577ba624b83931 Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Tue, 9 Dec 2025 12:50:21 +0000 Subject: [PATCH 029/812] refactor: make description on single one line --- frappe/custom/doctype/customize_form/customize_form.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/frappe/custom/doctype/customize_form/customize_form.js b/frappe/custom/doctype/customize_form/customize_form.js index ed8f412d16..2bfd8d908f 100644 --- a/frappe/custom/doctype/customize_form/customize_form.js +++ b/frappe/custom/doctype/customize_form/customize_form.js @@ -270,10 +270,7 @@ frappe.ui.form.on("Customize Form", { fieldname: "apply_module_export_filter", label: __("Apply Module Export Filter"), description: __( - "Export only customizations assigned to the selected module.
\ - Note: You must set the Module (for export) field on Custom Field and Property Setter records before applying this filter.\ -

Warning: Customizations from other modules will be excluded.

\ - " + "Export only customizations assigned to the selected module.
Note: You must set the Module (for export) field on Custom Field and Property Setter records before applying this filter.

Warning: Customizations from other modules will be excluded.

" ), default: 0, }, From dbc144595cee4c3367f00dad1e64324d1ea00aab Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Tue, 9 Dec 2025 14:37:07 +0100 Subject: [PATCH 030/812] fix: link filters UX --- frappe/public/js/frappe/form/controls/link.js | 8 ++++++-- frappe/public/scss/common/awesomeplete.scss | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/frappe/public/js/frappe/form/controls/link.js b/frappe/public/js/frappe/form/controls/link.js index 778f286bc6..406d3d952e 100644 --- a/frappe/public/js/frappe/form/controls/link.js +++ b/frappe/public/js/frappe/form/controls/link.js @@ -315,6 +315,11 @@ frappe.ui.form.ControlLink = class ControlLink extends frappe.ui.form.ControlDat return false; } + if (item.value === "filter_description__link_option") { + e.preventDefault(); + return false; + } + if (item.action) { item.value = ""; item.label = ""; @@ -384,8 +389,7 @@ frappe.ui.form.ControlLink = class ControlLink extends frappe.ui.form.ControlDat if (filter_string) { r.message.push({ html: `${filter_string}`, - value: "", - action: () => {}, + value: "filter_description__link_option", }); } diff --git a/frappe/public/scss/common/awesomeplete.scss b/frappe/public/scss/common/awesomeplete.scss index 5cbc1b4863..23a28e2c48 100644 --- a/frappe/public/scss/common/awesomeplete.scss +++ b/frappe/public/scss/common/awesomeplete.scss @@ -37,6 +37,9 @@ & > li, & > [role="option"] { + &:has(p[title="filter_description__link_option"]) { + cursor: default; + } cursor: pointer; @include get_textstyle("sm", "regular"); padding: var(--padding-sm); From e86636a6228cb94f1a86986bec1daa65d93805a5 Mon Sep 17 00:00:00 2001 From: Raffael Meyer <14891507+barredterra@users.noreply.github.com> Date: Wed, 10 Dec 2025 15:36:35 +0100 Subject: [PATCH 031/812] fix: re-add action --- frappe/public/js/frappe/form/controls/link.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/public/js/frappe/form/controls/link.js b/frappe/public/js/frappe/form/controls/link.js index 406d3d952e..fd909fd8c5 100644 --- a/frappe/public/js/frappe/form/controls/link.js +++ b/frappe/public/js/frappe/form/controls/link.js @@ -390,6 +390,7 @@ frappe.ui.form.ControlLink = class ControlLink extends frappe.ui.form.ControlDat r.message.push({ html: `${filter_string}`, value: "filter_description__link_option", + action: () => {}, }); } From 721ef09dad316cb199166fea73f3127e19972209 Mon Sep 17 00:00:00 2001 From: DhavalGala999 Date: Thu, 11 Dec 2025 12:41:59 +0530 Subject: [PATCH 032/812] fix: safely handle null/NaN/empty in shorten_number Prevents 'Cannot read properties of null (reading "length")' in number cards when aggregate functions (AVG) return null or empty results. - Return empty string for null, undefined, empty string, NaN - Use digit count to decide if shortening is needed - Preserve behavior for valid numeric inputs --- frappe/public/js/frappe/utils/utils.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/frappe/public/js/frappe/utils/utils.js b/frappe/public/js/frappe/utils/utils.js index 49f9f77054..a50e8fa98a 100644 --- a/frappe/public/js/frappe/utils/utils.js +++ b/frappe/public/js/frappe/utils/utils.js @@ -1449,8 +1449,19 @@ Object.assign(frappe.utils, { * max_no_of_decimals - max number of decimals of the shortened number */ - // return number if total digits is lesser than min_length - const len = String(number).match(/\d/g).length; + // return empty for null, undefined, or empty string + if (number == null || number === "") { + return ""; + } + + // extract digits from the number + const digits = String(number).match(/\d/g); + if (!digits) { + return ""; + } + + // return number if total digits are less than min_length + const len = digits.length; if (len < min_length) { return number.toString(); } From 7f5935d4057e4f3c3c06d3a17efa083639492d2b Mon Sep 17 00:00:00 2001 From: tridotstech Date: Sat, 13 Dec 2025 19:26:16 +0530 Subject: [PATCH 033/812] fix: restore custom_buttons tracking in add_custom_button Fixes #34920 --- frappe/public/js/frappe/form/form.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 249f957d94..d3f774c503 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -1209,9 +1209,9 @@ frappe.ui.form.Form = class FrappeForm { this.dashboard.clear_headline(); this.dashboard.set_headline_alert( __("This form has been modified after you have loaded it") + - '", + '", "alert-warning" ); } else { @@ -1246,7 +1246,7 @@ frappe.ui.form.Form = class FrappeForm { add_web_link(path, label) { label = __(label) || __("See on Website"); this.web_link = this.sidebar - .add_user_action(__(label), function () {}) + .add_user_action(__(label), function () { }) .attr("href", path || this.doc.route) .attr("target", "_blank"); } @@ -1480,7 +1480,13 @@ frappe.ui.form.Form = class FrappeForm { if (group && group.indexOf("fa fa-") !== -1) group = null; let btn = this.page.add_inner_button(label, fn, group); + if (btn) { + let menu_item_label = group ? `${group} > ${label}` : label; + let menu_item = this.page.add_menu_item(menu_item_label, fn, false); + menu_item.parent().addClass("hidden-xl"); + this.custom_buttons[label] = btn; + } return btn; } @@ -2238,8 +2244,8 @@ frappe.ui.form.Form = class FrappeForm {
${__( + this.doctype + )}&ref_docname=${encodeURIComponent(this.docname)}'>${__( "All Submissions" )} `; From e8ed57df18477857982df790db552e368b5d3d21 Mon Sep 17 00:00:00 2001 From: tridotstech Date: Mon, 15 Dec 2025 11:30:21 +0530 Subject: [PATCH 034/812] style: apply prettier formatting --- frappe/public/js/frappe/form/form.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index d3f774c503..0c872db145 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -1209,9 +1209,9 @@ frappe.ui.form.Form = class FrappeForm { this.dashboard.clear_headline(); this.dashboard.set_headline_alert( __("This form has been modified after you have loaded it") + - '", + '", "alert-warning" ); } else { @@ -1246,7 +1246,7 @@ frappe.ui.form.Form = class FrappeForm { add_web_link(path, label) { label = __(label) || __("See on Website"); this.web_link = this.sidebar - .add_user_action(__(label), function () { }) + .add_user_action(__(label), function () {}) .attr("href", path || this.doc.route) .attr("target", "_blank"); } @@ -2244,8 +2244,8 @@ frappe.ui.form.Form = class FrappeForm {
${__( + this.doctype + )}&ref_docname=${encodeURIComponent(this.docname)}'>${__( "All Submissions" )} `; From eddd5b00b62850531b76a2954ab5ac2026516141 Mon Sep 17 00:00:00 2001 From: sokumon Date: Mon, 15 Dec 2025 18:30:44 +0530 Subject: [PATCH 035/812] feat: init form sidebar redesign --- frappe/core/doctype/docfield/docfield.json | 9 ++- frappe/public/js/frappe/form/layout.js | 3 +- .../js/frappe/form/sidebar/form_sidebar.js | 17 ++++- frappe/public/js/frappe/form/tab.js | 6 ++ .../frappe/form/templates/form_sidebar.html | 46 +++++++++-- frappe/public/js/frappe/form/toolbar.js | 2 +- frappe/public/scss/desk/form.scss | 14 +++- frappe/public/scss/desk/form_sidebar.scss | 76 ++++++++++++++++--- frappe/public/scss/desk/page.scss | 7 ++ 9 files changed, 159 insertions(+), 21 deletions(-) diff --git a/frappe/core/doctype/docfield/docfield.json b/frappe/core/doctype/docfield/docfield.json index 7ef59cc20b..2b190095ee 100644 --- a/frappe/core/doctype/docfield/docfield.json +++ b/frappe/core/doctype/docfield/docfield.json @@ -76,6 +76,7 @@ "width", "max_height", "columns", + "icon", "column_break_22", "description", "documentation_url", @@ -626,6 +627,12 @@ "fieldtype": "Select", "label": "Button Color", "options": "\nDefault\nPrimary\nInfo\nSuccess\nWarning\nDanger" + }, + { + "depends_on": "eval: doc.type == \"Tab Break\"", + "fieldname": "icon", + "fieldtype": "Icon", + "label": "Icon" } ], "grid_page_length": 50, @@ -633,7 +640,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2025-12-01 06:56:29.335491", + "modified": "2025-12-15 11:28:13.492477", "modified_by": "Administrator", "module": "Core", "name": "DocField", diff --git a/frappe/public/js/frappe/form/layout.js b/frappe/public/js/frappe/form/layout.js index 9657e4bbc3..aad7c8c45a 100644 --- a/frappe/public/js/frappe/form/layout.js +++ b/frappe/public/js/frappe/form/layout.js @@ -150,6 +150,7 @@ frappe.ui.form.Layout = class Layout { if (this.is_tabbed_layout()) { // add a tab without `fieldname` to avoid conflicts + this.add_default_tabs(fields); let default_tab = { label: __("Details"), fieldtype: "Tab Break", @@ -201,7 +202,7 @@ frappe.ui.form.Layout = class Layout { (this.fields[0] && this.fields[0].fieldtype != "Section Break") || !this.fields.length ); } - + add_default_tabs() {} no_opening_tab() { return (this.fields[1] && this.fields[1].fieldtype != "Tab Break") || !this.fields.length; } diff --git a/frappe/public/js/frappe/form/sidebar/form_sidebar.js b/frappe/public/js/frappe/form/sidebar/form_sidebar.js index 0f2c27ef3a..890aed1a47 100644 --- a/frappe/public/js/frappe/form/sidebar/form_sidebar.js +++ b/frappe/public/js/frappe/form/sidebar/form_sidebar.js @@ -34,10 +34,25 @@ frappe.ui.form.Sidebar = class { this.setup_keyboard_shortcuts(); this.show_auto_repeat_status(); frappe.ui.form.setup_user_image_event(this.frm); - + this.indicator = $(this.sidebar).find(".indicator-pill"); + this.set_form_indicator(); this.refresh(); } + set_form_indicator() { + let indicator = frappe.get_indicator(this.frm.doc); + if (indicator) { + this.set_indicator(indicator[0], indicator[1]); + } + } + set_indicator(label, color) { + this.clear_indicator().removeClass("hide").html(`${label}`).addClass(color); + } + + clear_indicator() { + return this.indicator.addClass("indicator-pill no-indicator-dot whitespace-nowrap hide"); + } + setup_keyboard_shortcuts() { // add assignment shortcut let assignment_link = this.sidebar.find(".add-assignment"); diff --git a/frappe/public/js/frappe/form/tab.js b/frappe/public/js/frappe/form/tab.js index f8bc2368ed..9c7422ca05 100644 --- a/frappe/public/js/frappe/form/tab.js +++ b/frappe/public/js/frappe/form/tab.js @@ -1,3 +1,8 @@ +const ICON_MAP = { + "More Info": "info", + Dashboard: "layout-dashboard", + Details: "notepad-text", +}; export default class Tab { constructor(layout, df, frm, tab_link_container, tabs_content) { this.layout = layout; @@ -29,6 +34,7 @@ export default class Tab { type="button" role="tab" aria-controls="${id}"> + ${frappe.utils.icon(this.df.icon || ICON_MAP[this.label] || "list")} ${__(this.label, null, this.doctype)} diff --git a/frappe/public/js/frappe/form/templates/form_sidebar.html b/frappe/public/js/frappe/form/templates/form_sidebar.html index c21a91a2fa..c2ab0fac1a 100644 --- a/frappe/public/js/frappe/form/templates/form_sidebar.html +++ b/frappe/public/js/frappe/form/templates/form_sidebar.html @@ -17,6 +17,36 @@
{% endif %} + + + {% if frm.meta.beta %} " @@ -10878,15 +10998,6 @@ msgstr "单据类型" msgid "For Example: {} Open" msgstr "示例:{} 打开" -#. Description of the 'Options' (Small Text) field in DocType 'DocField' -#. Description of the 'Options' (Small Text) field in DocType 'Customize Form -#. Field' -#: frappe/core/doctype/docfield/docfield.json -#: frappe/custom/doctype/customize_form_field/customize_form_field.json -msgid "For Links, enter the DocType as range.\n" -"For Select, enter list of Options, each on a new line." -msgstr "对链接类型字段,此处填写链接的单据类型;对于单选字段,填写单选值清单,用回车键分行" - #. Label of the for_user (Link) field in DocType 'List Filter' #. Label of the for_user (Link) field in DocType 'Notification Log' #. Label of the for_user (Data) field in DocType 'Workspace' @@ -10910,20 +11021,16 @@ msgstr "允许值" msgid "For a dynamic subject, use Jinja tags like this: {{ doc.name }} Delivered" msgstr "如需动态主题,请使用Jinja标签,例如:{{ doc.name }} 已交付" -#: frappe/public/js/frappe/views/reports/query_report.js:2159 +#: frappe/public/js/frappe/views/reports/query_report.js:2220 #: frappe/public/js/frappe/views/reports/report_view.js:102 msgid "For comparison, use >5, <10 or =324. For ranges, use 5:10 (for values between 5 & 10)." msgstr "过滤条件可以用>,<,= 比较符,两个值之间用:表示范围, 如>5, <10, =20, 5:10" -#: frappe/core/page/permission_manager/permission_manager_help.html:19 -msgid "For example if you cancel and amend INV004 it will become a new document INV004-1. This helps you to keep track of each amendment." -msgstr "例如取消和修订INV004将成为一个新的单据INV004-1,这有利于你跟踪每次修订。" - #: frappe/public/js/frappe/utils/dashboard_utils.js:162 msgid "For example:" msgstr "例如:" -#: frappe/printing/page/print_format_builder/print_format_builder.js:752 +#: frappe/printing/page/print_format_builder/print_format_builder.js:786 msgid "For example: If you want to include the document ID, use {0}" msgstr "例如:如果要包括文件ID,使用{0}" @@ -10951,7 +11058,7 @@ msgstr "多个地址请分行输入,例如:test@test.com ⏎ test1@test.com" msgid "For updating, you can update only selective columns." msgstr "您只能更新选择的列。" -#: frappe/core/doctype/doctype/doctype.py:1786 +#: frappe/core/doctype/doctype/doctype.py:1800 msgid "For {0} at level {1} in {2} in row {3}" msgstr "对行{3},{2}中级别{1}的{0}" @@ -11001,7 +11108,8 @@ msgstr "忘了密码?" #: frappe/custom/doctype/client_script/client_script.json #: frappe/custom/doctype/customize_form/customize_form.json #: frappe/desk/doctype/form_tour/form_tour.json -#: frappe/printing/page/print/print.js:97 +#: frappe/printing/page/print/print.js:98 +#: frappe/printing/page/print/print.js:104 #: frappe/website/doctype/web_form/web_form.json msgid "Form" msgstr "表单" @@ -11180,7 +11288,7 @@ msgstr "星期五" msgid "From" msgstr "从" -#: frappe/public/js/frappe/views/communication.js:188 +#: frappe/public/js/frappe/views/communication.js:222 msgctxt "Email Sender" msgid "From" msgstr "从" @@ -11201,7 +11309,7 @@ msgstr "开始日期" msgid "From Date Field" msgstr "开始日期字段" -#: frappe/public/js/frappe/views/reports/query_report.js:1870 +#: frappe/public/js/frappe/views/reports/query_report.js:1919 msgid "From Document Type" msgstr "单据类型" @@ -11242,7 +11350,7 @@ msgstr "全" msgid "Full Name" msgstr "全名" -#: frappe/printing/page/print/print.js:81 +#: frappe/printing/page/print/print.js:87 #: frappe/public/js/frappe/form/templates/print_layout.html:42 msgid "Full Page" msgstr "全屏显示" @@ -11255,7 +11363,7 @@ msgstr "全宽" #. Label of the function (Select) field in DocType 'Number Card' #. Label of the report_function (Select) field in DocType 'Number Card' #: frappe/desk/doctype/number_card/number_card.json -#: frappe/public/js/frappe/views/reports/query_report.js:246 +#: frappe/public/js/frappe/views/reports/query_report.js:247 #: frappe/public/js/frappe/widgets/widget_dialog.js:699 msgid "Function" msgstr "函数" @@ -11264,11 +11372,11 @@ msgstr "函数" msgid "Function Based On" msgstr "函数基准字段" -#: frappe/__init__.py:465 +#: frappe/__init__.py:463 msgid "Function {0} is not whitelisted." msgstr "方法 {0} 申明前未添加@frappe.whitelist()装饰器" -#: frappe/database/query.py:1998 +#: frappe/database/query.py:2076 msgid "Function {0} requires arguments but none were provided" msgstr "函数{0}需要参数但未提供任何参数" @@ -11333,11 +11441,11 @@ msgstr "正常" msgid "Generate Keys" msgstr "生成密钥" -#: frappe/public/js/frappe/views/reports/query_report.js:885 +#: frappe/public/js/frappe/views/reports/query_report.js:902 msgid "Generate New Report" msgstr "生成新报表" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:467 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:469 msgid "Generate Random Password" msgstr "生成随机密码" @@ -11347,8 +11455,8 @@ msgstr "生成随机密码" msgid "Generate Separate Documents For Each Assignee" msgstr "为每位负责人生成独立文档" -#: frappe/public/js/frappe/ui/sidebar/sidebar.js:284 -#: frappe/public/js/frappe/utils/utils.js:1942 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:328 +#: frappe/public/js/frappe/utils/utils.js:2073 msgid "Generate Tracking URL" msgstr "生成跟踪URL" @@ -11459,7 +11567,7 @@ msgstr "全局访问" msgid "Global Unsubscribe" msgstr "全部退订" -#: frappe/public/js/frappe/form/toolbar.js:876 +#: frappe/public/js/frappe/form/toolbar.js:879 msgid "Go" msgstr "确定" @@ -11519,7 +11627,7 @@ msgstr "转到{0}列表" msgid "Go to {0} Page" msgstr "转到{0}页面" -#: frappe/utils/goal.py:127 frappe/utils/goal.py:134 +#: frappe/utils/goal.py:126 frappe/utils/goal.py:133 msgid "Goal" msgstr "目标" @@ -11745,7 +11853,7 @@ msgstr "分组统计类型" msgid "Group By field is required to create a dashboard chart" msgstr "创建仪表板图表需要分组依据字段" -#: frappe/database/query.py:1200 +#: frappe/database/query.py:1242 msgid "Group By must be a string" msgstr "分组依据必须为字符串" @@ -11825,6 +11933,10 @@ msgstr "HTML" msgid "HTML Editor" msgstr "HTML编辑器" +#: frappe/public/js/frappe/views/communication.js:142 +msgid "HTML Message" +msgstr "" + #. Label of the page (HTML Editor) field in DocType 'Access Log' #: frappe/core/doctype/access_log/access_log.json msgid "HTML Page" @@ -11913,7 +12025,7 @@ msgstr "头" msgid "Header HTML" msgstr "标题HTML" -#: frappe/printing/doctype/letter_head/letter_head.py:69 +#: frappe/printing/doctype/letter_head/letter_head.py:76 msgid "Header HTML set from attachment {0}" msgstr "使用附件{0}设置HTML文件头" @@ -11949,7 +12061,7 @@ msgstr "页眉/页脚脚本可用于添加动态行为" msgid "Headers" msgstr "头" -#: frappe/email/email_body.py:322 +#: frappe/email/email_body.py:323 msgid "Headers must be a dictionary" msgstr "请求头必须为字典类型" @@ -11986,7 +12098,7 @@ msgstr "您好:" #. Label of the help (HTML) field in DocType 'Property Setter' #: frappe/core/doctype/server_script/server_script.json #: frappe/custom/doctype/property_setter/property_setter.json -#: frappe/public/js/frappe/form/templates/form_sidebar.html:59 +#: frappe/public/js/frappe/form/templates/form_sidebar.html:80 #: frappe/public/js/frappe/form/workflow.js:23 #: frappe/public/js/frappe/utils/help.js:27 msgid "Help" @@ -12041,7 +12153,7 @@ msgstr "黑体" msgid "Helvetica Neue" msgstr "Helvetica Neue字体" -#: frappe/public/js/frappe/utils/utils.js:1939 +#: frappe/public/js/frappe/utils/utils.js:2070 msgid "Here's your tracking URL" msgstr "这是您的跟踪URL" @@ -12077,9 +12189,9 @@ msgstr "隐藏" msgid "Hidden Fields" msgstr "隐藏字段" -#: frappe/public/js/frappe/views/reports/query_report.js:1672 -msgid "Hidden columns include: {0}" -msgstr "隐藏列包括:{0}" +#: frappe/public/js/frappe/views/reports/query_report.js:1716 +msgid "Hidden columns include:
{0}" +msgstr "" #. Option for the 'Page Number' (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json @@ -12244,7 +12356,7 @@ msgstr "提示:在密码中加入符号,数字和大写字母" #: frappe/public/js/frappe/file_uploader/FileBrowser.vue:38 #: frappe/public/js/frappe/views/file/file_view.js:67 #: frappe/public/js/frappe/views/file/file_view.js:88 -#: frappe/public/js/frappe/views/pageview.js:161 frappe/templates/doc.html:19 +#: frappe/public/js/frappe/views/pageview.js:166 frappe/templates/doc.html:19 #: frappe/templates/includes/navbar/navbar.html:9 #: frappe/website/doctype/website_settings/website_settings.json #: frappe/website/web_template/primary_navbar/primary_navbar.html:9 @@ -12327,18 +12439,18 @@ msgid "I guess you don't have access to any workspace yet, but you can create on msgstr "您当前无工作区访问权限,可创建专属工作区。点击创建工作区按钮创建。
" #. Label of the id (Data) field in DocType 'User Session Display' -#: frappe/core/doctype/data_import/importer.py:1173 -#: frappe/core/doctype/data_import/importer.py:1179 -#: frappe/core/doctype/data_import/importer.py:1244 -#: frappe/core/doctype/data_import/importer.py:1247 +#: frappe/core/doctype/data_import/importer.py:1174 +#: frappe/core/doctype/data_import/importer.py:1180 +#: frappe/core/doctype/data_import/importer.py:1245 +#: frappe/core/doctype/data_import/importer.py:1248 #: frappe/core/doctype/user_session_display/user_session_display.json #: frappe/desk/report/todo/todo.py:36 frappe/model/meta.py:52 -#: frappe/public/js/frappe/data_import/data_exporter.js:330 -#: frappe/public/js/frappe/data_import/data_exporter.js:345 +#: frappe/public/js/frappe/data_import/data_exporter.js:354 +#: frappe/public/js/frappe/data_import/data_exporter.js:369 #: frappe/public/js/frappe/list/list_settings.js:335 -#: frappe/public/js/frappe/list/list_view.js:387 -#: frappe/public/js/frappe/list/list_view.js:451 -#: frappe/public/js/frappe/list/list_view.js:2409 +#: frappe/public/js/frappe/list/list_view.js:390 +#: frappe/public/js/frappe/list/list_view.js:454 +#: frappe/public/js/frappe/list/list_view.js:2437 #: frappe/public/js/frappe/model/meta.js:208 #: frappe/public/js/frappe/model/model.js:122 msgid "ID" @@ -12389,7 +12501,6 @@ msgid "IP Address" msgstr "IP地址" #. Option for the 'Type' (Select) field in DocType 'DocField' -#. Label of the icon (Icon) field in DocType 'DocField' #. Label of the icon (Data) field in DocType 'DocType' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' #. Option for the 'Type' (Select) field in DocType 'Customize Form Field' @@ -12410,11 +12521,16 @@ msgstr "IP地址" #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json #: frappe/integrations/doctype/social_login_key/social_login_key.json -#: frappe/public/js/frappe/views/workspace/workspace.js:472 +#: frappe/public/js/frappe/views/workspace/workspace.js:520 #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Icon" msgstr "图标" +#. Label of the icon_image (Attach) field in DocType 'Desktop Icon' +#: frappe/desk/doctype/desktop_icon/desktop_icon.json +msgid "Icon Image" +msgstr "" + #. Label of the icon_style (Select) field in DocType 'Desktop Settings' #: frappe/desk/doctype/desktop_settings/desktop_settings.json msgid "Icon Style" @@ -12425,6 +12541,10 @@ msgstr "" msgid "Icon Type" msgstr "" +#: frappe/desk/page/desktop/desktop.js:1004 +msgid "Icon is not correctly configured please check the workspace sidebar to it" +msgstr "" + #. Description of the 'Icon' (Select) field in DocType 'Workflow State' #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Icon will appear on the button" @@ -12456,13 +12576,13 @@ msgstr "如果勾选了“加严用户权限限制”,并为用户定义了“ msgid "If Checked workflow status will not override status in list view" msgstr "如勾选,工作流状态不会覆盖列表视图中的状态字段" -#: frappe/core/doctype/doctype/doctype.py:1798 +#: frappe/core/doctype/doctype/doctype.py:1812 #: frappe/core/report/user_doctype_permissions/user_doctype_permissions.py:45 #: frappe/public/js/frappe/roles_editor.js:68 msgid "If Owner" msgstr "是制单人?" -#: frappe/core/page/permission_manager/permission_manager_help.html:25 +#: frappe/core/page/permission_manager/permission_manager_help.html:92 msgid "If a Role does not have access at Level 0, then higher levels are meaningless." msgstr "如果角色没有0级的访问权限,那么无需设置更高级权限" @@ -12589,12 +12709,20 @@ msgstr "如果未设置,则货币精度将取决于数字格式" msgid "If set, only user with these roles can access this chart. If not set, DocType or Report permissions will be used." msgstr "如勾选则仅限分派了这些角色的用户可看到本图表,否则由单据类型或报表权限控制图表是否显示" +#: frappe/core/page/permission_manager/permission_manager_help.html:83 +msgid "If the user enables the mask property for the phone number field, the value will be displayed in a masked format (e.g., 811XXXXXXX)." +msgstr "" + +#: frappe/core/page/permission_manager/permission_manager_help.html:63 +msgid "If the user has access to Employee and Report is enabled, they can view Employee-based reports." +msgstr "" + #. Description of the 'User Type' (Link) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "If the user has any role checked, then the user becomes a \"System User\". \"System User\" has access to the desktop" msgstr "如果用户检查了任何角色,则该用户将成为“系统用户”。 “系统用户”可以访问桌面" -#: frappe/core/page/permission_manager/permission_manager_help.html:38 +#: frappe/core/page/permission_manager/permission_manager_help.html:105 msgid "If these instructions where not helpful, please add in your suggestions on GitHub Issues." msgstr "如果这些说明没有帮助,请在Github提交你的建议。" @@ -12694,7 +12822,7 @@ msgstr "忽略超过此大小的附件" msgid "Ignored Apps" msgstr "忽略的应用" -#: frappe/model/workflow.py:202 +#: frappe/model/workflow.py:223 msgid "Illegal Document Status for {0}" msgstr "{0}非法单据状态" @@ -12760,11 +12888,11 @@ msgstr "图像视图" msgid "Image Width" msgstr "图片宽度" -#: frappe/core/doctype/doctype/doctype.py:1521 +#: frappe/core/doctype/doctype/doctype.py:1535 msgid "Image field must be a valid fieldname" msgstr "图像字段必须是有效的字段名" -#: frappe/core/doctype/doctype/doctype.py:1523 +#: frappe/core/doctype/doctype/doctype.py:1537 msgid "Image field must be of type Attach Image" msgstr "图像字段的类型必须为附着图像" @@ -12798,7 +12926,7 @@ msgstr "被模拟的用户" msgid "Impersonated by {0}" msgstr "被{0}模拟登录" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:23 +#: frappe/public/js/frappe/ui/toolbar/navbar.html:13 msgid "Impersonating {0}" msgstr "正在模拟{0}登录" @@ -12816,11 +12944,12 @@ msgstr "隐式" #: frappe/core/doctype/custom_docperm/custom_docperm.json #: frappe/core/doctype/docperm/docperm.json #: frappe/core/doctype/recorder/recorder_list.js:16 +#: frappe/core/page/permission_manager/permission_manager_help.html:71 #: frappe/email/doctype/email_group/email_group.js:31 msgid "Import" msgstr "导入" -#: frappe/public/js/frappe/list/list_view.js:1914 +#: frappe/public/js/frappe/list/list_view.js:1922 msgctxt "Button in list view menu" msgid "Import" msgstr "导入" @@ -13043,15 +13172,15 @@ msgid "Include Web View Link in Email" msgstr "邮件包含网页视图链接" #: frappe/public/js/frappe/form/print_utils.js:59 -#: frappe/public/js/frappe/views/reports/query_report.js:1650 +#: frappe/public/js/frappe/views/reports/query_report.js:1690 msgid "Include filters" msgstr "包括过滤条件" -#: frappe/public/js/frappe/views/reports/query_report.js:1670 +#: frappe/public/js/frappe/views/reports/query_report.js:1712 msgid "Include hidden columns" msgstr "包含隐藏列" -#: frappe/public/js/frappe/views/reports/query_report.js:1642 +#: frappe/public/js/frappe/views/reports/query_report.js:1682 msgid "Include indentation" msgstr "包括缩进" @@ -13118,11 +13247,11 @@ msgstr "不正确的用户或密码" msgid "Incorrect Verification code" msgstr "验证码不正确" -#: frappe/model/document.py:1604 +#: frappe/model/document.py:1603 msgid "Incorrect value in row {0}:" msgstr "第{0}行值错误:" -#: frappe/model/document.py:1606 +#: frappe/model/document.py:1605 msgid "Incorrect value:" msgstr "错误值:" @@ -13174,7 +13303,7 @@ msgstr "指示符" msgid "Indicator Color" msgstr "指示灯颜色" -#: frappe/public/js/frappe/views/workspace/workspace.js:477 +#: frappe/public/js/frappe/views/workspace/workspace.js:525 msgid "Indicator color" msgstr "指示器颜色(快捷方式右上角数字)" @@ -13221,15 +13350,15 @@ msgstr "在上面插入" #. Label of the insert_after (Select) field in DocType 'Custom Field' #: frappe/custom/doctype/custom_field/custom_field.json -#: frappe/public/js/frappe/views/reports/query_report.js:1915 +#: frappe/public/js/frappe/views/reports/query_report.js:1964 msgid "Insert After" msgstr "在后边插入" -#: frappe/custom/doctype/custom_field/custom_field.py:252 +#: frappe/custom/doctype/custom_field/custom_field.py:253 msgid "Insert After cannot be set as {0}" msgstr "在后边插入不能设置为{0}" -#: frappe/custom/doctype/custom_field/custom_field.py:245 +#: frappe/custom/doctype/custom_field/custom_field.py:246 msgid "Insert After field '{0}' mentioned in Custom Field '{1}', with label '{2}', does not exist" msgstr "在自定义字段“{1}”中参照的标题为“{2}”字段“{0}”不存在" @@ -13259,8 +13388,8 @@ msgstr "插入样式" msgid "Instagram" msgstr "Instagram" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:715 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:716 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:683 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:684 msgid "Install {0} from Marketplace" msgstr "从应用市场安装{0}" @@ -13286,15 +13415,15 @@ msgstr "已安装应用" msgid "Instructions" msgstr "说明" -#: frappe/templates/includes/login/login.js:261 +#: frappe/templates/includes/login/login.js:259 msgid "Instructions Emailed" msgstr "电子邮件说明" -#: frappe/permissions.py:855 +#: frappe/permissions.py:861 msgid "Insufficient Permission Level for {0}" msgstr "{0}权限级别不足" -#: frappe/database/query.py:1266 +#: frappe/database/query.py:1308 msgid "Insufficient Permission for {0}" msgstr "{0} 权限不足" @@ -13362,7 +13491,7 @@ msgstr "兴趣爱好" msgid "Intermediate" msgstr "中级" -#: frappe/public/js/frappe/request.js:235 +#: frappe/public/js/frappe/request.js:233 msgid "Internal Server Error" msgstr "内部服务器错误" @@ -13371,6 +13500,11 @@ msgstr "内部服务器错误" msgid "Internal record of document shares" msgstr "文件分享的内部记录" +#. Label of the interval (Select) field in DocType 'Event Notifications' +#: frappe/desk/doctype/event_notifications/event_notifications.json +msgid "Interval" +msgstr "" + #. Label of the intro_video_url (Data) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Intro Video URL" @@ -13410,13 +13544,13 @@ msgid "Invalid" msgstr "无效" #: frappe/public/js/form_builder/utils.js:221 -#: frappe/public/js/frappe/form/grid_row.js:849 -#: frappe/public/js/frappe/form/layout.js:835 +#: frappe/public/js/frappe/form/grid_row.js:848 +#: frappe/public/js/frappe/form/layout.js:809 #: frappe/public/js/frappe/views/reports/report_view.js:715 msgid "Invalid \"depends_on\" expression" msgstr "“depends_on”表达式无效" -#: frappe/public/js/frappe/views/reports/query_report.js:519 +#: frappe/public/js/frappe/views/reports/query_report.js:520 msgid "Invalid \"depends_on\" expression set in filter {0}" msgstr "在过滤器{0}中设置了无效的“ depends_on”表达式" @@ -13456,7 +13590,7 @@ msgstr "日期无效" msgid "Invalid DocType" msgstr "文档类型无效" -#: frappe/database/query.py:342 +#: frappe/database/query.py:345 msgid "Invalid DocType: {0}" msgstr "无效文档类型:{0}" @@ -13464,7 +13598,8 @@ msgstr "无效文档类型:{0}" msgid "Invalid Doctype" msgstr "无效文档类型" -#: frappe/core/doctype/doctype/doctype.py:1287 +#: frappe/core/doctype/doctype/doctype.py:1292 +#: frappe/core/doctype/doctype/doctype.py:1301 msgid "Invalid Fieldname" msgstr "字段名无效" @@ -13472,8 +13607,8 @@ msgstr "字段名无效" msgid "Invalid File URL" msgstr "文件URL无效" -#: frappe/database/query.py:768 frappe/database/query.py:795 -#: frappe/database/query.py:805 frappe/database/query.py:828 +#: frappe/database/query.py:802 frappe/database/query.py:829 +#: frappe/database/query.py:839 frappe/database/query.py:862 msgid "Invalid Filter" msgstr "无效筛选器" @@ -13497,7 +13632,7 @@ msgstr "无效链接" msgid "Invalid Login Token" msgstr "无效登录令牌" -#: frappe/templates/includes/login/login.js:290 +#: frappe/templates/includes/login/login.js:288 msgid "Invalid Login. Try again." msgstr "登录无效。再试一次。" @@ -13505,7 +13640,7 @@ msgstr "登录无效。再试一次。" msgid "Invalid Mail Server. Please rectify and try again." msgstr "无效的邮件服务器,请纠正后重试。" -#: frappe/model/naming.py:109 +#: frappe/model/naming.py:107 msgid "Invalid Naming Series: {}" msgstr "无效命名规则:{}" @@ -13516,8 +13651,8 @@ msgstr "无效命名规则:{}" msgid "Invalid Operation" msgstr "无效操作" -#: frappe/core/doctype/doctype/doctype.py:1656 -#: frappe/core/doctype/doctype/doctype.py:1664 +#: frappe/core/doctype/doctype/doctype.py:1670 +#: frappe/core/doctype/doctype/doctype.py:1678 msgid "Invalid Option" msgstr "错误选项" @@ -13529,7 +13664,7 @@ msgstr "出站邮件服务器或端口无效:{0}" msgid "Invalid Output Format" msgstr "无效的输出格式" -#: frappe/model/base_document.py:126 +#: frappe/model/base_document.py:128 msgid "Invalid Override" msgstr "无效覆盖" @@ -13542,11 +13677,11 @@ msgstr "参数无效" msgid "Invalid Password" msgstr "无效的密码" -#: frappe/utils/__init__.py:125 +#: frappe/utils/__init__.py:116 msgid "Invalid Phone Number" msgstr "电话号码无效" -#: frappe/auth.py:97 frappe/utils/oauth.py:213 frappe/utils/oauth.py:220 +#: frappe/auth.py:97 frappe/utils/oauth.py:213 frappe/utils/oauth.py:222 #: frappe/www/login.py:128 msgid "Invalid Request" msgstr "无效请求" @@ -13555,7 +13690,7 @@ msgstr "无效请求" msgid "Invalid Search Field {0}" msgstr "无效的搜索字段{0}" -#: frappe/core/doctype/doctype/doctype.py:1229 +#: frappe/core/doctype/doctype/doctype.py:1232 msgid "Invalid Table Fieldname" msgstr "表字段名无效" @@ -13586,7 +13721,7 @@ msgstr "Webhook密钥无效" msgid "Invalid aggregate function" msgstr "无效聚合函数" -#: frappe/database/query.py:2157 +#: frappe/database/query.py:2236 msgid "Invalid alias format: {0}. Alias must be a simple identifier." msgstr "别名格式无效:{0}。别名必须为简单标识符。" @@ -13594,19 +13729,19 @@ msgstr "别名格式无效:{0}。别名必须为简单标识符。" msgid "Invalid app" msgstr "无效应用" -#: frappe/database/query.py:2118 frappe/database/query.py:2133 +#: frappe/database/query.py:2197 frappe/database/query.py:2212 msgid "Invalid argument format: {0}. Only quoted string literals or simple field names are allowed." msgstr "参数格式无效:{0}。仅允许带引号的字符串字面量或简单字段名。" -#: frappe/database/query.py:2083 +#: frappe/database/query.py:2161 msgid "Invalid argument type: {0}. Only strings, numbers, dicts, and None are allowed." msgstr "" -#: frappe/database/query.py:801 +#: frappe/database/query.py:835 msgid "Invalid characters in fieldname: {0}. Only letters, numbers, and underscores are allowed." msgstr "字段名包含无效字符:{0}。仅允许字母、数字和下划线。" -#: frappe/database/query.py:971 +#: frappe/database/query.py:1014 msgid "Invalid characters in table name: {0}" msgstr "表名包含无效字符:{0}" @@ -13614,18 +13749,22 @@ msgstr "表名包含无效字符:{0}" msgid "Invalid column" msgstr "无效列" -#: frappe/database/query.py:713 +#: frappe/database/query.py:735 msgid "Invalid condition type in nested filters: {0}" msgstr "嵌套筛选器中条件类型无效:{0}" -#: frappe/database/query.py:1244 +#: frappe/database/query.py:1286 msgid "Invalid direction in Order By: {0}. Must be 'ASC' or 'DESC'." msgstr "排序方向无效:{0}。必须为“ASC”或“DESC”。" -#: frappe/model/document.py:1065 frappe/model/document.py:1079 +#: frappe/model/document.py:1064 frappe/model/document.py:1078 msgid "Invalid docstatus" msgstr "文档状态无效" +#: frappe/model/workflow.py:112 +msgid "Invalid expression in Workflow Update Value: {0}" +msgstr "" + #: frappe/public/js/frappe/utils/dashboard_utils.js:229 msgid "Invalid expression set in filter {0}" msgstr "过滤器{0}中的表达式无效" @@ -13634,11 +13773,11 @@ msgstr "过滤器{0}中的表达式无效" msgid "Invalid expression set in filter {0} ({1})" msgstr "过滤器{0}({1})中的表达式无效" -#: frappe/database/query.py:1886 +#: frappe/database/query.py:1964 msgid "Invalid field format for SELECT: {0}. Field names must be simple, backticked, table-qualified, aliased, or '*'." msgstr "SELECT字段格式无效:{0}。字段名必须为简单名称、反引号包裹、表限定、别名或“*”。" -#: frappe/database/query.py:1184 +#: frappe/database/query.py:1227 msgid "Invalid field format in {0}: {1}. Use 'field', 'link_field.field', or 'child_table.field'." msgstr "{0}中字段格式无效:{1}。请使用“字段”、“链接字段.字段”或“子表.字段”。" @@ -13646,11 +13785,11 @@ msgstr "{0}中字段格式无效:{1}。请使用“字段”、“链接字段 msgid "Invalid field name {0}" msgstr "字段名称{0}无效" -#: frappe/database/query.py:1070 +#: frappe/database/query.py:1113 msgid "Invalid field type: {0}" msgstr "字段类型无效:{0}" -#: frappe/core/doctype/doctype/doctype.py:1100 +#: frappe/core/doctype/doctype/doctype.py:1103 msgid "Invalid fieldname '{0}' in autoname" msgstr "编号规则中字段名“{0}”无效" @@ -13658,11 +13797,11 @@ msgstr "编号规则中字段名“{0}”无效" msgid "Invalid file path: {0}" msgstr "无效的文件路径:{0}" -#: frappe/database/query.py:696 +#: frappe/database/query.py:718 msgid "Invalid filter condition: {0}. Expected a list or tuple." msgstr "筛选条件无效:{0}。期望为列表或元组。" -#: frappe/database/query.py:791 +#: frappe/database/query.py:825 msgid "Invalid filter field format: {0}. Use 'fieldname' or 'link_fieldname.target_fieldname'." msgstr "筛选字段格式无效:{0}。请使用“字段名”或“链接字段名.目标字段名”。" @@ -13670,7 +13809,7 @@ msgstr "筛选字段格式无效:{0}。请使用“字段名”或“链接字 msgid "Invalid filter: {0}" msgstr "无效过滤器:{0}" -#: frappe/database/query.py:2003 +#: frappe/database/query.py:2081 msgid "Invalid function argument type: {0}. Only strings, numbers, lists, and None are allowed." msgstr "函数参数类型无效:{0}。仅允许字符串、数字、列表和None。" @@ -13687,19 +13826,19 @@ msgstr "自定义选项中包含无效JSON:{0}" msgid "Invalid key" msgstr "密钥无效" -#: frappe/model/naming.py:498 +#: frappe/model/naming.py:496 msgid "Invalid name type (integer) for varchar name column" msgstr "varchar名称列使用了整型名称类型" -#: frappe/model/naming.py:62 +#: frappe/model/naming.py:60 msgid "Invalid naming series {}: dot (.) missing" msgstr "命名规则{}错误:缺少点号(.)" -#: frappe/model/naming.py:76 +#: frappe/model/naming.py:74 msgid "Invalid naming series {}: dot (.) missing before the numeric placeholders. Kindly use a format like ABCD.#####." msgstr "命名序列{}无效:数字占位符前缺少点号(.)。请使用类似ABCD.#####的格式。" -#: frappe/database/query.py:2075 +#: frappe/database/query.py:2153 msgid "Invalid nested expression: dictionary must represent a function or operator" msgstr "" @@ -13723,11 +13862,11 @@ msgstr "请求正文无效" msgid "Invalid role" msgstr "角色无效" -#: frappe/database/query.py:744 +#: frappe/database/query.py:776 msgid "Invalid simple filter format: {0}" msgstr "简单筛选器格式无效:{0}" -#: frappe/database/query.py:673 +#: frappe/database/query.py:695 msgid "Invalid start for filter condition: {0}. Expected a list or tuple." msgstr "筛选条件起始格式无效:{0}。期望为列表或元组。" @@ -13744,24 +13883,24 @@ msgstr "令牌状态无效!请检查是否由OAuth用户创建" msgid "Invalid username or password" msgstr "用户名或密码错误" -#: frappe/model/naming.py:176 +#: frappe/model/naming.py:174 msgid "Invalid value specified for UUID: {}" msgstr "指定的UUID值无效:{}" -#: frappe/public/js/frappe/web_form/web_form.js:253 +#: frappe/public/js/frappe/web_form/web_form.js:249 msgctxt "Error message in web form" msgid "Invalid values for fields:" msgstr "字段包含无效值:" -#: frappe/printing/page/print/print.js:673 +#: frappe/printing/page/print/print.js:681 msgid "Invalid wkhtmltopdf version" msgstr "wkhtmltopdf版本无效" -#: frappe/core/doctype/doctype/doctype.py:1579 +#: frappe/core/doctype/doctype/doctype.py:1593 msgid "Invalid {0} condition" msgstr "{0}条件无效" -#: frappe/database/query.py:1964 +#: frappe/database/query.py:2042 msgid "Invalid {0} dictionary format" msgstr "" @@ -13889,7 +14028,7 @@ msgstr "是动态网址?" msgid "Is Folder" msgstr "是文件夹" -#: frappe/public/js/frappe/list/list_filter.js:95 +#: frappe/public/js/frappe/list/list_filter.js:112 msgid "Is Global" msgstr "全局有效?" @@ -13960,7 +14099,7 @@ msgstr "公开" msgid "Is Published Field" msgstr "是否发布字段" -#: frappe/core/doctype/doctype/doctype.py:1530 +#: frappe/core/doctype/doctype/doctype.py:1544 msgid "Is Published Field must be a valid fieldname" msgstr "已发布字段必须是有效字段" @@ -14205,8 +14344,8 @@ msgstr "" msgid "Join video conference with {0}" msgstr "加入与{0}的视频会议" -#: frappe/public/js/frappe/form/toolbar.js:431 -#: frappe/public/js/frappe/form/toolbar.js:866 +#: frappe/public/js/frappe/form/toolbar.js:421 +#: frappe/public/js/frappe/form/toolbar.js:869 msgid "Jump to field" msgstr "定位到字段" @@ -14529,7 +14668,7 @@ msgstr "标签帮助" msgid "Label and Type" msgstr "标签和类型" -#: frappe/custom/doctype/custom_field/custom_field.py:146 +#: frappe/custom/doctype/custom_field/custom_field.py:147 msgid "Label is mandatory" msgstr "标签信息必填" @@ -14552,7 +14691,7 @@ msgstr "横向打印" #: frappe/core/doctype/translation/translation.json #: frappe/core/doctype/user/user.json #: frappe/core/web_form/edit_profile/edit_profile.json -#: frappe/printing/page/print/print.js:118 +#: frappe/printing/page/print/print.js:126 #: frappe/public/js/frappe/form/templates/print_layout.html:11 msgid "Language" msgstr "语言" @@ -14598,6 +14737,14 @@ msgstr "过去90天" msgid "Last Active" msgstr "最后活动" +#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:163 +msgid "Last Edited by You" +msgstr "" + +#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:164 +msgid "Last Edited by {0}" +msgstr "" + #. Label of the last_execution (Datetime) field in DocType 'Scheduled Job Type' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json msgid "Last Execution" @@ -14722,6 +14869,11 @@ msgstr "去年" msgid "Last synced {0}" msgstr "上次同步{0}" +#. Label of the layout (Code) field in DocType 'Desktop Layout' +#: frappe/desk/doctype/desktop_layout/desktop_layout.json +msgid "Layout" +msgstr "布局" + #: frappe/custom/doctype/customize_form/customize_form.js:194 msgid "Layout Reset" msgstr "布局重置" @@ -14749,9 +14901,15 @@ msgstr "离开这个谈话" msgid "Ledger" msgstr "会计凭证" +#. Option for the 'Alignment' (Select) field in DocType 'DocField' +#. Option for the 'Alignment' (Select) field in DocType 'Custom Field' +#. Option for the 'Alignment' (Select) field in DocType 'Customize Form Field' #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #. Option for the 'Align' (Select) field in DocType 'Letter Head' #. Option for the 'Text Align' (Select) field in DocType 'Web Page' +#: frappe/core/doctype/docfield/docfield.json +#: frappe/custom/doctype/custom_field/custom_field.json +#: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/desk/doctype/form_tour_step/form_tour_step.json #: frappe/printing/doctype/letter_head/letter_head.json #: frappe/website/doctype/web_page/web_page.json @@ -14845,7 +15003,7 @@ msgstr "信" #. Name of a DocType #: frappe/core/doctype/report/report.json #: frappe/printing/doctype/letter_head/letter_head.json -#: frappe/printing/page/print/print.js:141 +#: frappe/printing/page/print/print.js:149 #: frappe/public/js/frappe/form/print_utils.js:50 #: frappe/public/js/frappe/form/templates/print_layout.html:16 #: frappe/public/js/frappe/list/bulk_operations.js:52 @@ -14874,7 +15032,7 @@ msgstr "表头名称" msgid "Letter Head Scripts" msgstr "信头脚本" -#: frappe/printing/doctype/letter_head/letter_head.py:49 +#: frappe/printing/doctype/letter_head/letter_head.py:56 msgid "Letter Head cannot be both disabled and default" msgstr "信头不能同时禁用并设为默认" @@ -14896,7 +15054,7 @@ msgstr "打印表头HTML" msgid "Level" msgstr "级别" -#: frappe/core/page/permission_manager/permission_manager.js:517 +#: frappe/core/page/permission_manager/permission_manager.js:518 msgid "Level 0 is for document level permissions, higher levels for field level permissions." msgstr "级别0为单据级权限,大于0为字段级权限。" @@ -14937,7 +15095,7 @@ msgstr "浅色主题" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #: frappe/core/doctype/comment/comment.json -#: frappe/public/js/frappe/list/base_list.js:1256 +#: frappe/public/js/frappe/list/base_list.js:1273 #: frappe/public/js/frappe/ui/filters/filter.js:18 msgid "Like" msgstr "含关键字" @@ -14961,7 +15119,7 @@ msgstr "喜欢" msgid "Limit" msgstr "最大数量" -#: frappe/database/query.py:299 +#: frappe/database/query.py:302 msgid "Limit must be a non-negative integer" msgstr "限制必须为非负整数" @@ -15087,7 +15245,7 @@ msgstr "关联单据标题" #: frappe/desk/doctype/workspace_link/workspace_link.json #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json -#: frappe/public/js/frappe/views/workspace/workspace.js:432 +#: frappe/public/js/frappe/views/workspace/workspace.js:480 #: frappe/public/js/frappe/widgets/widget_dialog.js:281 #: frappe/public/js/frappe/widgets/widget_dialog.js:427 msgid "Link To" @@ -15105,7 +15263,7 @@ msgstr "行内链接到" #: frappe/desk/doctype/workspace/workspace.json #: frappe/desk/doctype/workspace_link/workspace_link.json #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json -#: frappe/public/js/frappe/views/workspace/workspace.js:424 +#: frappe/public/js/frappe/views/workspace/workspace.js:472 #: frappe/public/js/frappe/widgets/widget_dialog.js:273 msgid "Link Type" msgstr "链接类型" @@ -15148,6 +15306,7 @@ msgstr "领英" #. Label of the links_section (Tab Break) field in DocType 'DocType' #. Label of the links (Table) field in DocType 'Customize Form' #. Label of the links (Table) field in DocType 'Event' +#. Label of the links_tab (Tab Break) field in DocType 'Event' #. Label of the links (Table) field in DocType 'Sidebar Item Group' #. Label of the links (Table) field in DocType 'Workspace' #: frappe/contacts/doctype/address/address.js:39 @@ -15169,8 +15328,8 @@ msgstr "链接" #: frappe/custom/doctype/client_script/client_script.json #: frappe/desk/doctype/form_tour/form_tour.json #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:92 -#: frappe/public/js/frappe/utils/utils.js:953 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:86 +#: frappe/public/js/frappe/utils/utils.js:950 msgid "List" msgstr "列表" @@ -15200,7 +15359,7 @@ msgstr "列表过滤条件" msgid "List Settings" msgstr "列表设置" -#: frappe/public/js/frappe/list/list_view.js:2067 +#: frappe/public/js/frappe/list/list_view.js:2075 msgctxt "Button in list view menu" msgid "List Settings" msgstr "列表设置" @@ -15214,7 +15373,7 @@ msgstr "列表视图" msgid "List View Settings" msgstr "列表视图设置" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:223 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:230 msgid "List a document type" msgstr "列出某单据类型" @@ -15241,7 +15400,7 @@ msgstr "已应用补丁列表" msgid "List setting message" msgstr "列表设置消息" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:586 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:556 msgid "Lists" msgstr "列表" @@ -15269,9 +15428,9 @@ msgstr "加载更多" #: frappe/public/js/frappe/form/controls/multicheck.js:13 #: frappe/public/js/frappe/form/linked_with.js:13 #: frappe/public/js/frappe/list/base_list.js:510 -#: frappe/public/js/frappe/list/list_view.js:364 +#: frappe/public/js/frappe/list/list_view.js:367 #: frappe/public/js/frappe/ui/listing.html:16 -#: frappe/public/js/frappe/views/reports/query_report.js:1119 +#: frappe/public/js/frappe/views/reports/query_report.js:1136 msgid "Loading" msgstr "载入中" @@ -15288,7 +15447,7 @@ msgid "Loading versions..." msgstr "正在加载版本..." #: frappe/public/js/frappe/file_uploader/TreeNode.vue:45 -#: frappe/public/js/frappe/form/sidebar/share.js:51 +#: frappe/public/js/frappe/form/sidebar/share.js:57 #: frappe/public/js/frappe/list/base_list.js:1063 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:91 #: frappe/public/js/frappe/views/kanban/kanban_board.html:11 @@ -15299,7 +15458,8 @@ msgid "Loading..." msgstr "载入中..." #. Label of the location (Data) field in DocType 'User' -#: frappe/core/doctype/user/user.json +#. Label of the location (Data) field in DocType 'Event' +#: frappe/core/doctype/user/user.json frappe/desk/doctype/event/event.json msgid "Location" msgstr "地点" @@ -15372,6 +15532,11 @@ msgstr "登出" msgid "Login" msgstr "登录" +#. Label of a chart in the Users Workspace +#: frappe/core/workspace/users/users.json +msgid "Login Activity" +msgstr "" + #. Label of the login_after (Int) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Login After" @@ -15447,7 +15612,7 @@ msgstr "登录以发起新讨论" msgid "Login to {0}" msgstr "登录到{0}" -#: frappe/templates/includes/login/login.js:319 +#: frappe/templates/includes/login/login.js:318 msgid "Login token required" msgstr "需要登录令牌" @@ -15514,8 +15679,7 @@ msgid "Logout From All Devices After Changing Password" msgstr "变更密码后登出所有设备" #. Group in User's connections -#. Label of a Card Break in the Users Workspace -#: frappe/core/doctype/user/user.json frappe/core/workspace/users/users.json +#: frappe/core/doctype/user/user.json msgid "Logs" msgstr "日志" @@ -15546,7 +15710,7 @@ msgstr "您似乎未更改该值" msgid "Looks like you haven’t added any third party apps." msgstr "您似乎未添加任何第三方应用。" -#: frappe/public/js/frappe/ui/notifications/notifications.js:346 +#: frappe/public/js/frappe/ui/notifications/notifications.js:355 msgid "Looks like you haven’t received any notifications." msgstr "还没有收到任何通知哦~" @@ -15696,7 +15860,7 @@ msgstr "表{0}第{1}行有必填字段," msgid "Mandatory fields required in {0}" msgstr "{0}中有必填字段" -#: frappe/public/js/frappe/web_form/web_form.js:258 +#: frappe/public/js/frappe/web_form/web_form.js:254 msgctxt "Error message in web form" msgid "Mandatory fields required:" msgstr "需要以下必填字段:" @@ -15758,7 +15922,7 @@ msgstr "顶边距" msgid "MariaDB Variables" msgstr "MariaDB变量" -#: frappe/public/js/frappe/ui/notifications/notifications.js:46 +#: frappe/public/js/frappe/ui/notifications/notifications.js:49 msgid "Mark all as read" msgstr "全部标记为已读" @@ -15810,9 +15974,12 @@ msgstr "市场营销经理" #. Label of the mask (Check) field in DocType 'Custom DocPerm' #. Label of the mask (Check) field in DocType 'DocField' #. Label of the mask (Check) field in DocType 'DocPerm' +#. Label of the mask (Check) field in DocType 'Customize Form Field' #: frappe/core/doctype/custom_docperm/custom_docperm.json #: frappe/core/doctype/docfield/docfield.json #: frappe/core/doctype/docperm/docperm.json +#: frappe/core/page/permission_manager/permission_manager_help.html:81 +#: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Mask" msgstr "掩码" @@ -15874,7 +16041,7 @@ msgstr "每用户最自动邮件发送报表数" msgid "Max signups allowed per hour" msgstr "每小时允许的最大注册数" -#: frappe/core/doctype/doctype/doctype.py:1357 +#: frappe/core/doctype/doctype/doctype.py:1371 msgid "Max width for type Currency is 100px in row {0}" msgstr "行{0}中,货币类型的最大宽度是100像素" @@ -15895,20 +16062,27 @@ msgstr "已达到{0}的最大附件限制" msgid "Maximum {0} rows allowed" msgstr "仅允许最多{0}行" +#. Option for the 'Attending' (Select) field in DocType 'Event' +#. Option for the 'Attending' (Select) field in DocType 'Event Participants' +#: frappe/desk/doctype/event/event.json +#: frappe/desk/doctype/event_participants/event_participants.json +msgid "Maybe" +msgstr "" + #: frappe/public/js/frappe/list/base_list.js:947 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:168 msgid "Me" msgstr "我" #: frappe/core/page/permission_manager/permission_manager_help.html:14 -msgid "Meaning of Submit, Cancel, Amend" -msgstr "已提交,取消,修订的含义" +msgid "Meaning of Different Permission Types" +msgstr "" #. Option for the 'Priority' (Select) field in DocType 'ToDo' #. Label of the medium (Data) field in DocType 'Web Page View' #: frappe/desk/doctype/todo/todo.json #: frappe/public/js/frappe/form/sidebar/assign_to.js:224 -#: frappe/public/js/frappe/utils/utils.js:1889 +#: frappe/public/js/frappe/utils/utils.js:2020 #: frappe/website/doctype/web_page_view/web_page_view.json #: frappe/website/report/website_analytics/website_analytics.js:40 msgid "Medium" @@ -15952,12 +16126,12 @@ msgstr "@提及" msgid "Mentions" msgstr "提及" -#: frappe/public/js/frappe/ui/page.html:25 -#: frappe/public/js/frappe/ui/page.js:167 +#: frappe/public/js/frappe/ui/page.html:47 +#: frappe/public/js/frappe/ui/page.js:175 msgid "Menu" msgstr "菜单" -#: frappe/public/js/frappe/form/toolbar.js:253 +#: frappe/public/js/frappe/form/toolbar.js:270 #: frappe/public/js/frappe/model/model.js:705 msgid "Merge with existing" msgstr "与现有合并" @@ -15991,13 +16165,13 @@ msgstr "只有组和组,叶节点和叶节点之间能合并" #: frappe/email/doctype/notification/notification.js:215 #: frappe/email/doctype/notification/notification.json #: frappe/public/js/frappe/ui/messages.js:182 -#: frappe/public/js/frappe/views/communication.js:117 +#: frappe/public/js/frappe/views/communication.js:135 #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json #: frappe/www/message.html:3 msgid "Message" msgstr "信息" -#: frappe/public/js/frappe/ui/messages.js:274 frappe/utils/messages.py:78 +#: frappe/public/js/frappe/ui/messages.js:274 frappe/utils/messages.py:81 msgctxt "Default title of the message dialog" msgid "Message" msgstr "消息" @@ -16028,7 +16202,7 @@ msgstr "消息已发送" msgid "Message Type" msgstr "消息类型" -#: frappe/public/js/frappe/views/communication.js:947 +#: frappe/public/js/frappe/views/communication.js:1018 msgid "Message clipped" msgstr "邮件被剪辑" @@ -16125,7 +16299,7 @@ msgstr "元数据" msgid "Method" msgstr "方法" -#: frappe/__init__.py:467 +#: frappe/__init__.py:465 msgid "Method Not Allowed" msgstr "方法不可调用" @@ -16214,7 +16388,7 @@ msgstr "小姐" msgid "Missing DocType" msgstr "缺失文档类型" -#: frappe/core/doctype/doctype/doctype.py:1541 +#: frappe/core/doctype/doctype/doctype.py:1555 msgid "Missing Field" msgstr "缺失字段" @@ -16299,7 +16473,7 @@ msgstr "模态框触发器" #: frappe/email/doctype/notification/notification.json #: frappe/printing/doctype/print_format/print_format.json #: frappe/printing/doctype/print_format_field_template/print_format_field_template.json -#: frappe/public/js/frappe/utils/utils.js:960 +#: frappe/public/js/frappe/utils/utils.js:953 #: frappe/website/doctype/web_form/web_form.json #: frappe/website/doctype/web_template/web_template.json #: frappe/website/doctype/website_theme/website_theme.json @@ -16346,9 +16520,8 @@ msgstr "模块初始化" #. Name of a DocType #. Label of the module_profile (Link) field in DocType 'User' -#. Label of a Link in the Users Workspace #: frappe/core/doctype/module_profile/module_profile.json -#: frappe/core/doctype/user/user.json frappe/core/workspace/users/users.json +#: frappe/core/doctype/user/user.json msgid "Module Profile" msgstr "模块集合" @@ -16365,7 +16538,7 @@ msgstr "模块入门进度已重置" msgid "Module to Export" msgstr "模块导出" -#: frappe/modules/utils.py:280 +#: frappe/modules/utils.py:323 msgid "Module {} not found" msgstr "未找到模块{}" @@ -16480,7 +16653,7 @@ msgstr "更多的文章{0}" msgid "More content for the bottom of the page." msgstr "页面底部的更多内容。" -#: frappe/public/js/frappe/ui/sort_selector.js:193 +#: frappe/public/js/frappe/ui/sort_selector.js:199 msgid "Most Used" msgstr "最常用" @@ -16495,7 +16668,7 @@ msgstr "很可能是密码过长导致" msgid "Move" msgstr "移动" -#: frappe/public/js/frappe/form/grid_row.js:194 +#: frappe/public/js/frappe/form/grid_row.js:196 msgid "Move To" msgstr "移到" @@ -16507,19 +16680,19 @@ msgstr "移到废纸篓" msgid "Move current and all subsequent sections to a new tab" msgstr "移动当前及以下段到新页签" -#: frappe/public/js/frappe/form/form.js:178 +#: frappe/public/js/frappe/form/form.js:179 msgid "Move cursor to above row" msgstr "移动光标至上一行" -#: frappe/public/js/frappe/form/form.js:182 +#: frappe/public/js/frappe/form/form.js:183 msgid "Move cursor to below row" msgstr "移动光标至下一行" -#: frappe/public/js/frappe/form/form.js:186 +#: frappe/public/js/frappe/form/form.js:187 msgid "Move cursor to next column" msgstr "移动光标至下一列" -#: frappe/public/js/frappe/form/form.js:190 +#: frappe/public/js/frappe/form/form.js:191 msgid "Move cursor to previous column" msgstr "移动光标至上一列" @@ -16531,7 +16704,7 @@ msgstr "移动段到新页签" msgid "Move the current field and the following fields to a new column" msgstr "移动当前及以下字段到新栏" -#: frappe/public/js/frappe/form/grid_row.js:169 +#: frappe/public/js/frappe/form/grid_row.js:171 msgid "Move to Row Number" msgstr "移至行号" @@ -16649,7 +16822,7 @@ msgstr "名称(文档名)" msgid "Name already taken, please set a new name" msgstr "名称已被占用,请设置新名称" -#: frappe/model/naming.py:512 +#: frappe/model/naming.py:510 msgid "Name cannot contain special characters like {0}" msgstr "名称不能包含特殊字符,如{0}" @@ -16661,7 +16834,7 @@ msgstr "此字段链接到的单据类型,例如客户" msgid "Name of the new Print Format" msgstr "新打印格式的名称" -#: frappe/model/naming.py:507 +#: frappe/model/naming.py:505 msgid "Name of {0} cannot be {1}" msgstr "{0}的名称不能为{1}" @@ -16702,7 +16875,7 @@ msgstr "编号规则" msgid "Naming Series" msgstr "单据编号模板" -#: frappe/model/naming.py:268 +#: frappe/model/naming.py:266 msgid "Naming Series mandatory" msgstr "单据编号模板是必填字段" @@ -16726,11 +16899,6 @@ msgstr "导航项" msgid "Navbar Settings" msgstr "导航栏设置" -#. Label of the navbar_style (Select) field in DocType 'Desktop Settings' -#: frappe/desk/doctype/desktop_settings/desktop_settings.json -msgid "Navbar Style" -msgstr "" - #. Label of the navbar_template (Link) field in DocType 'Website Settings' #. Label of the navbar_template_section (Section Break) field in DocType #. 'Website Settings' @@ -16744,39 +16912,44 @@ msgstr "导航栏模板" msgid "Navbar Template Values" msgstr "导航栏模板值" -#: frappe/public/js/frappe/list/list_view.js:1388 +#: frappe/public/js/frappe/list/list_view.js:1396 msgctxt "Description of a list view shortcut" msgid "Navigate list down" msgstr "向下导航列表" -#: frappe/public/js/frappe/list/list_view.js:1395 +#: frappe/public/js/frappe/list/list_view.js:1403 msgctxt "Description of a list view shortcut" msgid "Navigate list up" msgstr "向上导航列表" -#: frappe/public/js/frappe/ui/page.js:180 +#: frappe/public/js/frappe/ui/page.js:188 msgid "Navigate to main content" msgstr "跳转到主要内容" +#. Label of the form_navigation_buttons (Check) field in DocType 'User' +#: frappe/core/doctype/user/user.json +msgid "Navigation Buttons" +msgstr "" + #. Label of the navigation_settings_section (Section Break) field in DocType #. 'User' #: frappe/core/doctype/user/user.json msgid "Navigation Settings" msgstr "导航设置" -#: frappe/public/js/frappe/list/list_view.js:486 +#: frappe/public/js/frappe/list/list_view.js:489 msgid "Need Help?" msgstr "需要帮助?" -#: frappe/desk/doctype/workspace/workspace.py:356 +#: frappe/desk/doctype/workspace/workspace.py:336 msgid "Need Workspace Manager role to edit private workspace of other users" msgstr "需具备工作区管理员角色才能编辑其他用户的私有工作区" -#: frappe/model/document.py:837 +#: frappe/model/document.py:836 msgid "Negative Value" msgstr "负值" -#: frappe/database/query.py:665 +#: frappe/database/query.py:687 msgid "Nested filters must be provided as a list or tuple." msgstr "嵌套筛选器必须作为列表或元组提供。" @@ -16798,6 +16971,7 @@ msgstr "从不" #. Option for the 'DocType View' (Select) field in DocType 'Workspace Shortcut' #. Option for the 'Send Alert On' (Select) field in DocType 'Notification' #: frappe/core/doctype/success_action/success_action.js:57 +#: frappe/core/doctype/version/version.py:242 #: frappe/core/page/dashboard_view/dashboard_view.js:173 #: frappe/desk/doctype/todo/todo.js:46 #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json @@ -16814,7 +16988,7 @@ msgstr "新活动" #: frappe/public/js/frappe/form/templates/address_list.html:3 #: frappe/public/js/frappe/ui/address_autocomplete/autocomplete_dialog.js:5 -#: frappe/public/js/frappe/utils/address_and_contact.js:71 +#: frappe/public/js/frappe/utils/address_and_contact.js:87 msgid "New Address" msgstr "新地址" @@ -16830,8 +17004,8 @@ msgstr "新联系人" msgid "New Custom Block" msgstr "新建自定义块" -#: frappe/printing/page/print/print.js:327 -#: frappe/printing/page/print/print.js:374 +#: frappe/printing/page/print/print.js:335 +#: frappe/printing/page/print/print.js:382 msgid "New Custom Print Format" msgstr "新自定义打印格式" @@ -16880,7 +17054,7 @@ msgstr "从网站的联系页面新消息" #. Label of the new_name (Read Only) field in DocType 'Deleted Document' #: frappe/core/doctype/deleted_document/deleted_document.json -#: frappe/public/js/frappe/form/toolbar.js:229 +#: frappe/public/js/frappe/form/toolbar.js:246 #: frappe/public/js/frappe/model/model.js:713 msgid "New Name" msgstr "新名称" @@ -16901,8 +17075,8 @@ msgstr "新建入门指引" msgid "New Password" msgstr "新密码" -#: frappe/printing/page/print/print.js:299 -#: frappe/printing/page/print/print.js:353 +#: frappe/printing/page/print/print.js:307 +#: frappe/printing/page/print/print.js:361 #: frappe/printing/page/print_format_builder_beta/print_format_builder_beta.js:61 msgid "New Print Format Name" msgstr "新的打印格式名称" @@ -16929,8 +17103,8 @@ msgstr "新建 快速访问" msgid "New Users (Last 30 days)" msgstr "新用户(最近30天)" -#: frappe/core/doctype/version/version_view.html:15 -#: frappe/core/doctype/version/version_view.html:77 +#: frappe/core/doctype/version/version_view.html:75 +#: frappe/core/doctype/version/version_view.html:140 msgid "New Value" msgstr "新值" @@ -16938,7 +17112,7 @@ msgstr "新值" msgid "New Workflow Name" msgstr "新工作流名称" -#: frappe/public/js/frappe/views/workspace/workspace.js:404 +#: frappe/public/js/frappe/views/workspace/workspace.js:452 msgid "New Workspace" msgstr "新建工作区" @@ -16983,32 +17157,32 @@ msgstr "新用户需由系统管理员手动创建" msgid "New value to be set" msgstr "要设置的新值" -#: frappe/public/js/frappe/form/quick_entry.js:179 -#: frappe/public/js/frappe/form/toolbar.js:48 -#: frappe/public/js/frappe/form/toolbar.js:217 -#: frappe/public/js/frappe/form/toolbar.js:232 -#: frappe/public/js/frappe/form/toolbar.js:594 +#: frappe/public/js/frappe/form/quick_entry.js:190 +#: frappe/public/js/frappe/form/toolbar.js:47 +#: frappe/public/js/frappe/form/toolbar.js:234 +#: frappe/public/js/frappe/form/toolbar.js:249 +#: frappe/public/js/frappe/form/toolbar.js:597 #: frappe/public/js/frappe/model/model.js:612 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:191 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:192 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:250 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:251 -#: frappe/public/js/frappe/views/breadcrumbs.js:217 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:178 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:179 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:228 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:229 +#: frappe/public/js/frappe/views/breadcrumbs.js:232 #: frappe/public/js/frappe/views/treeview.js:366 #: frappe/public/js/frappe/widgets/widget_dialog.js:72 #: frappe/website/doctype/web_form/web_form.py:439 msgid "New {0}" msgstr "新建 {0}" -#: frappe/public/js/frappe/views/reports/query_report.js:393 +#: frappe/public/js/frappe/views/reports/query_report.js:394 msgid "New {0} Created" msgstr "已创建新{0}" -#: frappe/public/js/frappe/views/reports/query_report.js:385 +#: frappe/public/js/frappe/views/reports/query_report.js:386 msgid "New {0} {1} added to Dashboard {2}" msgstr "新{0}{1}已添加到仪表盘{2}" -#: frappe/public/js/frappe/views/reports/query_report.js:390 +#: frappe/public/js/frappe/views/reports/query_report.js:391 msgid "New {0} {1} created" msgstr "已创建新{0}{1}" @@ -17020,7 +17194,7 @@ msgstr "新{0}:{1}" msgid "New {} releases for the following apps are available" msgstr "以下应用程序有新版本{}了" -#: frappe/core/doctype/user/user.py:853 +#: frappe/core/doctype/user/user.py:856 msgid "Newly created user {0} has no roles enabled." msgstr "新创建的用户 {0} 未启用任何角色" @@ -17041,7 +17215,7 @@ msgstr "简讯经理" msgid "Next" msgstr "下一个" -#: frappe/public/js/frappe/ui/slides.js:359 +#: frappe/public/js/frappe/ui/slides.js:373 msgctxt "Go to next slide" msgid "Next" msgstr "下一步" @@ -17068,12 +17242,16 @@ msgstr "未来 7 天" msgid "Next Action Email Template" msgstr "审批邮件模板" +#: frappe/core/doctype/success_action/success_action.js:44 +msgid "Next Actions" +msgstr "" + #. Label of the next_actions_html (HTML) field in DocType 'Success Action' #: frappe/core/doctype/success_action/success_action.json msgid "Next Actions HTML" msgstr "下一步操作HTML" -#: frappe/public/js/frappe/form/toolbar.js:336 +#: frappe/public/js/frappe/form/toolbar.js:357 msgid "Next Document" msgstr "下一文档" @@ -17140,20 +17318,24 @@ msgstr "点击进入下一步" #. Option for the 'Standard' (Select) field in DocType 'Page' #. Option for the 'Is Standard' (Select) field in DocType 'Report' +#. Option for the 'Attending' (Select) field in DocType 'Event' +#. Option for the 'Attending' (Select) field in DocType 'Event Participants' #. Option for the 'Require Trusted Certificate' (Select) field in DocType 'LDAP #. Settings' #. Option for the 'Standard' (Select) field in DocType 'Print Format' #: frappe/core/doctype/page/page.json frappe/core/doctype/report/report.json +#: frappe/desk/doctype/event/event.json +#: frappe/desk/doctype/event_participants/event_participants.json #: frappe/email/doctype/notification/notification.py:102 #: frappe/email/doctype/notification/notification.py:104 #: frappe/integrations/doctype/ldap_settings/ldap_settings.json #: frappe/integrations/doctype/webhook/webhook.py:132 #: frappe/printing/doctype/print_format/print_format.json #: frappe/public/js/form_builder/utils.js:341 -#: frappe/public/js/frappe/form/controls/link.js:573 +#: frappe/public/js/frappe/form/controls/link.js:574 #: frappe/public/js/frappe/list/base_list.js:949 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:170 -#: frappe/public/js/frappe/views/reports/query_report.js:1695 +#: frappe/public/js/frappe/views/reports/query_report.js:47 #: frappe/website/doctype/help_article/templates/help_article.html:26 msgid "No" msgstr "否" @@ -17223,7 +17405,7 @@ msgstr "未设置过滤器" msgid "No Google Calendar Event to sync." msgstr "无Google日历事件需同步" -#: frappe/public/js/frappe/ui/capture.js:262 +#: frappe/public/js/frappe/ui/capture.js:263 msgid "No Images" msgstr "无图像" @@ -17242,23 +17424,23 @@ msgstr "未找到邮箱为{0}的LDAP用户" msgid "No Label" msgstr "无标签" -#: frappe/printing/page/print/print.js:768 -#: frappe/printing/page/print/print.js:849 +#: frappe/printing/page/print/print.js:782 +#: frappe/printing/page/print/print.js:863 #: frappe/public/js/frappe/list/bulk_operations.js:98 #: frappe/public/js/frappe/list/bulk_operations.js:170 #: frappe/utils/weasyprint.py:52 msgid "No Letterhead" msgstr "无信头" -#: frappe/model/naming.py:489 +#: frappe/model/naming.py:487 msgid "No Name Specified for {0}" msgstr "{0}未指定名称" -#: frappe/public/js/frappe/ui/notifications/notifications.js:346 +#: frappe/public/js/frappe/ui/notifications/notifications.js:355 msgid "No New notifications" msgstr "暂无新通知" -#: frappe/core/doctype/doctype/doctype.py:1778 +#: frappe/core/doctype/doctype/doctype.py:1792 msgid "No Permissions Specified" msgstr "未指定权限" @@ -17278,11 +17460,11 @@ msgstr "该仪表盘无可用图表" msgid "No Preview" msgstr "无预览" -#: frappe/printing/page/print/print.js:772 +#: frappe/printing/page/print/print.js:786 msgid "No Preview Available" msgstr "预览不可用" -#: frappe/printing/page/print/print.js:927 +#: frappe/printing/page/print/print.js:941 msgid "No Printer is Available." msgstr "没有可用打印机。" @@ -17290,7 +17472,7 @@ msgstr "没有可用打印机。" msgid "No RQ Workers connected. Try restarting the bench." msgstr "无RQ工作进程连接,请尝试重启服务" -#: frappe/public/js/frappe/form/link_selector.js:135 +#: frappe/public/js/frappe/form/link_selector.js:143 msgid "No Results" msgstr "没有结果" @@ -17298,7 +17480,7 @@ msgstr "没有结果" msgid "No Results found" msgstr "无数据" -#: frappe/core/doctype/user/user.py:854 +#: frappe/core/doctype/user/user.py:857 msgid "No Roles Specified" msgstr "未分派角色" @@ -17314,7 +17496,7 @@ msgstr "无建议" msgid "No Tags" msgstr "无标签" -#: frappe/public/js/frappe/ui/notifications/notifications.js:473 +#: frappe/public/js/frappe/ui/notifications/notifications.js:482 msgid "No Upcoming Events" msgstr "无未处理事项" @@ -17334,7 +17516,7 @@ msgstr "暂无自动优化建议" msgid "No changes in document" msgstr "未做任何修改" -#: frappe/public/js/frappe/views/workspace/workspace.js:707 +#: frappe/public/js/frappe/views/workspace/workspace.js:756 msgid "No changes made" msgstr "未作更改" @@ -17446,11 +17628,11 @@ msgstr "记录数(最大500行)" msgid "No of Sent SMS" msgstr "发送短信数量" -#: frappe/__init__.py:622 frappe/client.py:113 frappe/client.py:155 +#: frappe/__init__.py:620 frappe/client.py:119 frappe/client.py:161 msgid "No permission for {0}" msgstr "无权限操作{0}" -#: frappe/public/js/frappe/form/form.js:1145 +#: frappe/public/js/frappe/form/form.js:1174 msgctxt "{0} = verb, {1} = object" msgid "No permission to '{0}' {1}" msgstr "无权限'{0}' {1}" @@ -17459,7 +17641,7 @@ msgstr "无权限'{0}' {1}" msgid "No permission to read {0}" msgstr "没有读取{0}的权限" -#: frappe/share.py:216 +#: frappe/share.py:221 msgid "No permission to {0} {1} {2}" msgstr "无权{0} {1} {2}" @@ -17475,7 +17657,7 @@ msgstr "{0}中没有记录" msgid "No records tagged." msgstr "没有记录被标记。" -#: frappe/public/js/frappe/data_import/data_exporter.js:225 +#: frappe/public/js/frappe/data_import/data_exporter.js:226 msgid "No records will be exported" msgstr "没有满足条件的记录" @@ -17483,7 +17665,7 @@ msgstr "没有满足条件的记录" msgid "No rows" msgstr "无行数据" -#: frappe/public/js/frappe/list/list_view.js:2376 +#: frappe/public/js/frappe/list/list_view.js:2404 msgid "No rows selected" msgstr "" @@ -17495,11 +17677,12 @@ msgstr "无主题" msgid "No template found at path: {0}" msgstr "从{0}路径中找不到模板" -#: frappe/core/page/permission_manager/permission_manager.js:362 +#: frappe/core/page/permission_manager/permission_manager.js:363 msgid "No user has the role {0}" msgstr "" #: frappe/public/js/frappe/form/controls/multiselect_list.js:276 +#: frappe/public/js/frappe/utils/utils.js:988 msgid "No values to show" msgstr "没有要显示的值" @@ -17511,7 +17694,7 @@ msgstr "无{0}" msgid "No {0} found" msgstr "没有找到{0}" -#: frappe/public/js/frappe/list/list_view.js:500 +#: frappe/public/js/frappe/list/list_view.js:503 msgid "No {0} found with matching filters. Clear filters to see all {0}." msgstr "未找到匹配当前筛选条件的{0},请清除筛选条件后查看全部{0}" @@ -17520,7 +17703,7 @@ msgid "No {0} mail" msgstr "没有{0}邮件" #: frappe/public/js/form_builder/utils.js:117 -#: frappe/public/js/frappe/form/grid_row.js:257 +#: frappe/public/js/frappe/form/grid_row.js:259 msgctxt "Title of the 'row number' column" msgid "No." msgstr "编号" @@ -17563,12 +17746,12 @@ msgstr "基础查询(剔除查询参数)次数" msgid "Normalized Query" msgstr "规范化查询" -#: frappe/core/doctype/user/user.py:1076 -#: frappe/templates/includes/login/login.js:257 frappe/utils/oauth.py:298 +#: frappe/core/doctype/user/user.py:1079 +#: frappe/templates/includes/login/login.js:255 frappe/utils/oauth.py:300 msgid "Not Allowed" msgstr "不允许" -#: frappe/templates/includes/login/login.js:259 +#: frappe/templates/includes/login/login.js:257 msgid "Not Allowed: Disabled User" msgstr "不允许:用户已被禁用" @@ -17610,7 +17793,7 @@ msgstr "未链接到任何记录" msgid "Not Nullable" msgstr "不可为空" -#: frappe/__init__.py:549 frappe/app.py:383 frappe/desk/calendar.py:28 +#: frappe/__init__.py:547 frappe/app.py:383 frappe/desk/calendar.py:28 #: frappe/public/js/frappe/web_form/webform_script.js:15 #: frappe/website/doctype/web_form/web_form.py:779 #: frappe/website/page_renderers/not_permitted_page.py:22 @@ -17619,7 +17802,7 @@ msgstr "不可为空" msgid "Not Permitted" msgstr "没有权限" -#: frappe/desk/query_report.py:631 +#: frappe/desk/query_report.py:630 msgid "Not Permitted to read {0}" msgstr "无权限读取{0}" @@ -17628,8 +17811,8 @@ msgstr "无权限读取{0}" msgid "Not Published" msgstr "未发布" -#: frappe/public/js/frappe/form/toolbar.js:298 -#: frappe/public/js/frappe/form/toolbar.js:849 +#: frappe/public/js/frappe/form/toolbar.js:316 +#: frappe/public/js/frappe/form/toolbar.js:852 #: frappe/public/js/frappe/model/indicator.js:28 #: frappe/public/js/frappe/views/kanban/kanban_view.js:183 #: frappe/public/js/frappe/views/reports/report_view.js:203 @@ -17663,15 +17846,15 @@ msgstr "未设置" msgid "Not a valid Comma Separated Value (CSV File)" msgstr "不是一个有效的CSV文件" -#: frappe/core/doctype/user/user.py:304 +#: frappe/core/doctype/user/user.py:307 msgid "Not a valid User Image." msgstr "非有效用户图像。" -#: frappe/model/workflow.py:117 +#: frappe/model/workflow.py:135 msgid "Not a valid Workflow Action" msgstr "不是有效的工作流操作" -#: frappe/templates/includes/login/login.js:255 +#: frappe/templates/includes/login/login.js:253 msgid "Not a valid user" msgstr "不是有效的用户" @@ -17679,7 +17862,7 @@ msgstr "不是有效的用户" msgid "Not active" msgstr "非活动" -#: frappe/permissions.py:389 +#: frappe/permissions.py:395 msgid "Not allowed for {0}: {1}" msgstr "不允许{0}:{1}" @@ -17699,11 +17882,11 @@ msgstr "不允许打印已取消的单据" msgid "Not allowed to print draft documents" msgstr "不允许打印草稿状态单据" -#: frappe/permissions.py:219 +#: frappe/permissions.py:225 msgid "Not allowed via controller permission check" msgstr "自定义代码权限检查has_permission不通过" -#: frappe/public/js/frappe/request.js:147 frappe/website/js/website.js:94 +#: frappe/public/js/frappe/request.js:145 frappe/website/js/website.js:94 msgid "Not found" msgstr "未找到" @@ -17716,11 +17899,11 @@ msgid "Not in Developer Mode! Set in site_config.json or make 'Custom' DocType." msgstr "未开启开发模式!请在site_config.json中设置或创建一个自定义单据类型" #: frappe/core/doctype/system_settings/system_settings.py:234 -#: frappe/public/js/frappe/request.js:159 -#: frappe/public/js/frappe/request.js:170 -#: frappe/public/js/frappe/request.js:175 +#: frappe/public/js/frappe/request.js:157 +#: frappe/public/js/frappe/request.js:168 +#: frappe/public/js/frappe/request.js:173 #: frappe/public/js/frappe/views/kanban/kanban_board.bundle.js:67 -#: frappe/utils/messages.py:158 frappe/website/doctype/web_form/web_form.py:792 +#: frappe/utils/messages.py:161 frappe/website/doctype/web_form/web_form.py:792 #: frappe/website/js/website.js:97 msgid "Not permitted" msgstr "没有权限" @@ -17748,7 +17931,7 @@ msgstr "看过笔记的人" msgid "Note:" msgstr "备注:" -#: frappe/public/js/frappe/utils/utils.js:774 +#: frappe/public/js/frappe/utils/utils.js:776 msgid "Note: Changing the Page Name will break previous URL to this page." msgstr "注意:更改页面名称将会破坏此页面的上一个URL。" @@ -17780,7 +17963,7 @@ msgstr "注:您的账户删除请求将在{0}小时内处理。" msgid "Notes:" msgstr "注意事项:" -#: frappe/public/js/frappe/ui/notifications/notifications.js:523 +#: frappe/public/js/frappe/ui/notifications/notifications.js:532 msgid "Nothing New" msgstr "无新消息" @@ -17793,7 +17976,7 @@ msgid "Nothing left to undo" msgstr "无内容可撤销" #: frappe/public/js/frappe/list/base_list.js:365 -#: frappe/public/js/frappe/views/reports/query_report.js:105 +#: frappe/public/js/frappe/views/reports/query_report.js:106 #: frappe/templates/includes/list/list.html:9 #: frappe/website/doctype/help_article/templates/help_article_list.html:21 msgid "Nothing to show" @@ -17804,11 +17987,13 @@ msgid "Nothing to update" msgstr "无需更新" #. Label of the notification (Tab Break) field in DocType 'Auto Repeat' +#. Option for the 'Type' (Select) field in DocType 'Event Notifications' #. Name of a DocType #: frappe/automation/doctype/auto_repeat/auto_repeat.json #: frappe/core/doctype/communication/mixins.py:142 +#: frappe/desk/doctype/event_notifications/event_notifications.json #: frappe/email/doctype/notification/notification.json -#: frappe/public/js/frappe/ui/sidebar/sidebar.js:258 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:294 msgid "Notification" msgstr "通知" @@ -17824,7 +18009,7 @@ msgstr "通知收件人" #. Name of a DocType #: frappe/desk/doctype/notification_settings/notification_settings.json -#: frappe/public/js/frappe/ui/notifications/notifications.js:38 +#: frappe/public/js/frappe/ui/notifications/notifications.js:41 msgid "Notification Settings" msgstr "通知设置" @@ -17833,11 +18018,6 @@ msgstr "通知设置" msgid "Notification Subscribed Document" msgstr "订阅通知的文档" -#. Label of a chart in the System Workspace -#: frappe/core/workspace/system/system.json -msgid "Notification Summary" -msgstr "" - #: frappe/public/js/frappe/form/templates/timeline_message_box.html:8 msgid "Notification sent to" msgstr "通知已发送至" @@ -17855,13 +18035,15 @@ msgid "Notification: user {0} has no Mobile number set" msgstr "通知:用户{0}未设置手机号码" #. Label of the notifications (Check) field in DocType 'User' -#: frappe/core/doctype/user/user.json -#: frappe/public/js/frappe/ui/notifications/notifications.js:61 -#: frappe/public/js/frappe/ui/notifications/notifications.js:218 +#. Label of the notifications_tab (Tab Break) field in DocType 'Event' +#. Label of the notifications (Table) field in DocType 'Event' +#: frappe/core/doctype/user/user.json frappe/desk/doctype/event/event.json +#: frappe/public/js/frappe/ui/notifications/notifications.js:68 +#: frappe/public/js/frappe/ui/notifications/notifications.js:227 msgid "Notifications" msgstr "通知" -#: frappe/public/js/frappe/ui/notifications/notifications.js:330 +#: frappe/public/js/frappe/ui/notifications/notifications.js:339 msgid "Notifications Disabled" msgstr "通知已禁用" @@ -18097,7 +18279,7 @@ msgstr "OTP Secret已被重置。下次登录时需要重新注册。" msgid "OTP placeholder should be defined as {{ otp }} " msgstr "" -#: frappe/templates/includes/login/login.js:355 +#: frappe/templates/includes/login/login.js:354 msgid "OTP setup using OTP App was not completed. Please contact Administrator." msgstr "使用OTP应用的OTP设置未完成。请联系管理员。" @@ -18137,7 +18319,7 @@ msgstr "X轴偏移" msgid "Offset Y" msgstr "Y轴偏移" -#: frappe/database/query.py:304 +#: frappe/database/query.py:307 msgid "Offset must be a non-negative integer" msgstr "偏移量必须为非负整数" @@ -18145,7 +18327,7 @@ msgstr "偏移量必须为非负整数" msgid "Old Password" msgstr "旧密码" -#: frappe/custom/doctype/custom_field/custom_field.py:413 +#: frappe/custom/doctype/custom_field/custom_field.py:414 msgid "Old and new fieldnames are same." msgstr "新旧字段名相同。" @@ -18212,7 +18394,7 @@ msgstr "在或之后" msgid "On or Before" msgstr "在或之前" -#: frappe/public/js/frappe/views/communication.js:957 +#: frappe/public/js/frappe/views/communication.js:1028 msgid "On {0}, {1} wrote:" msgstr "{0},{1}写道:" @@ -18256,7 +18438,7 @@ msgstr "入职完成" msgid "Once submitted, submittable documents cannot be changed. They can only be Cancelled and Amended." msgstr "一旦提交后无法再修改。只能先取消再点修订按钮,生成新版本后修改。" -#: frappe/core/page/permission_manager/permission_manager_help.html:35 +#: frappe/core/page/permission_manager/permission_manager_help.html:102 msgid "Once you have set this, the users will only be able access documents (eg. Blog Post) where the link exists (eg. Blogger)." msgstr "设置此选项,用户将只能访问包含了此链接的单据(如博客文章) 。" @@ -18272,11 +18454,11 @@ msgstr "来自{}的一次性密码(OTP)注册码" msgid "One of" msgstr "之一" -#: frappe/client.py:217 +#: frappe/client.py:223 msgid "Only 200 inserts allowed in one request" msgstr "只有200将允许一个请求" -#: frappe/email/doctype/email_queue/email_queue.py:90 +#: frappe/email/doctype/email_queue/email_queue.py:91 msgid "Only Administrator can delete Email Queue" msgstr "只有管理员可以删除邮件队列" @@ -18297,7 +18479,7 @@ msgstr "只允许管理员使用记录器" msgid "Only Allow Edit For" msgstr "角色(允许编辑)" -#: frappe/core/doctype/doctype/doctype.py:1635 +#: frappe/core/doctype/doctype/doctype.py:1649 msgid "Only Options allowed for Data field are:" msgstr "数据字段仅允许以下选项:" @@ -18320,11 +18502,11 @@ msgstr "仅工作区管理员可编辑公共工作区" msgid "Only allow System Managers to upload public files" msgstr "" -#: frappe/modules/utils.py:68 +#: frappe/modules/utils.py:80 msgid "Only allowed to export customizations in developer mode" msgstr "仅开发者模式下允许导出自定义项" -#: frappe/model/document.py:1288 +#: frappe/model/document.py:1287 msgid "Only draft documents can be discarded" msgstr "仅草稿文档可丢弃" @@ -18367,7 +18549,7 @@ msgstr "仅被分配者可完成此待办事项。" msgid "Only {0} emailed reports are allowed per user." msgstr "每位用户仅允许通过邮件发送{0}份报告。" -#: frappe/templates/includes/login/login.js:291 +#: frappe/templates/includes/login/login.js:289 msgid "Oops! Something went wrong." msgstr "糟糕!出错了。" @@ -18390,8 +18572,8 @@ msgctxt "Access" msgid "Open" msgstr "打开" -#: frappe/desk/page/desktop/desktop.js:217 -#: frappe/desk/page/desktop/desktop.js:226 +#: frappe/desk/page/desktop/desktop.js:470 +#: frappe/desk/page/desktop/desktop.js:479 #: frappe/public/js/frappe/ui/keyboard.js:207 #: frappe/public/js/frappe/ui/keyboard.js:217 msgid "Open Awesomebar" @@ -18427,6 +18609,10 @@ msgstr "打开引用文档" msgid "Open Settings" msgstr "打开设置" +#: frappe/public/js/frappe/form/toolbar.js:472 +msgid "Open Sidebar" +msgstr "" + #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Open Source Applications for the Web" msgstr "开源为Web应用程序" @@ -18441,7 +18627,7 @@ msgstr "在新标签页打开URL" msgid "Open a dialog with mandatory fields to create a new record quickly. There must be at least one mandatory field to show in dialog." msgstr "打开含必填字段的对话框快速创建记录。对话框中需至少显示一个必填字段。" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:238 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:245 msgid "Open a module or tool" msgstr "打开一个模块或工具" @@ -18453,11 +18639,11 @@ msgstr "打开控制台" msgid "Open in a new tab" msgstr "在新标签页打开" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:243 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:250 msgid "Open in new tab" msgstr "" -#: frappe/public/js/frappe/list/list_view.js:1441 +#: frappe/public/js/frappe/list/list_view.js:1449 msgctxt "Description of a list view shortcut" msgid "Open list item" msgstr "打开列表项" @@ -18472,16 +18658,16 @@ msgstr "在手机上打开授权认证应用程序。" #: frappe/desk/doctype/todo/todo_list.js:17 #: frappe/public/js/frappe/form/templates/form_links.html:18 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:314 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:315 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:326 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:327 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:337 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:338 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:347 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:348 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:368 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:369 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:288 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:289 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:300 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:301 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:311 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:312 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:321 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:322 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:340 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:341 msgid "Open {0}" msgstr "打开{0}" @@ -18513,7 +18699,7 @@ msgstr "工序" msgid "Operator must be one of {0}" msgstr "运算符必须是{0}" -#: frappe/database/query.py:2031 +#: frappe/database/query.py:2109 msgid "Operator {0} requires exactly 2 arguments (left and right operands)" msgstr "" @@ -18539,7 +18725,7 @@ msgstr "选项2" msgid "Option 3" msgstr "选项3" -#: frappe/core/doctype/doctype/doctype.py:1653 +#: frappe/core/doctype/doctype/doctype.py:1667 msgid "Option {0} for field {1} is not a child table" msgstr "为字段{1}设置的选项{0}未被定义为是子表" @@ -18573,7 +18759,7 @@ msgstr "可选:在这个表达式为真时发送通知" msgid "Options" msgstr "选项" -#: frappe/core/doctype/doctype/doctype.py:1381 +#: frappe/core/doctype/doctype/doctype.py:1395 msgid "Options 'Dynamic Link' type of field must point to another Link Field with options as 'DocType'" msgstr "选择“动态链接”类型的字段都必须指向另一个选项为'DocType“的链接字段" @@ -18582,7 +18768,7 @@ msgstr "选择“动态链接”类型的字段都必须指向另一个选项为 msgid "Options Help" msgstr "选项帮助" -#: frappe/core/doctype/doctype/doctype.py:1682 +#: frappe/core/doctype/doctype/doctype.py:1696 msgid "Options for Rating field can range from 3 to 10" msgstr "评分字段选项范围3至10" @@ -18590,7 +18776,7 @@ msgstr "评分字段选项范围3至10" msgid "Options for select. Each option on a new line." msgstr "选择项。每行一个选项。" -#: frappe/core/doctype/doctype/doctype.py:1398 +#: frappe/core/doctype/doctype/doctype.py:1412 msgid "Options for {0} must be set before setting the default value." msgstr "设置默认值前必须先设置{0}的选项。" @@ -18598,7 +18784,7 @@ msgstr "设置默认值前必须先设置{0}的选项。" msgid "Options is required for field {0} of type {1}" msgstr "{1}类型字段{0}必须设置选项" -#: frappe/model/base_document.py:972 +#: frappe/model/base_document.py:989 msgid "Options not set for link field {0}" msgstr "链接字段未设置选项{0}" @@ -18614,7 +18800,7 @@ msgstr "橙色" msgid "Order" msgstr "订购" -#: frappe/database/query.py:1216 +#: frappe/database/query.py:1258 msgid "Order By must be a string" msgstr "排序依据必须为字符串" @@ -18634,8 +18820,12 @@ msgstr "公司发展历程标题" msgid "Orientation" msgstr "方向" -#: frappe/core/doctype/version/version_view.html:14 -#: frappe/core/doctype/version/version_view.html:76 +#: frappe/core/doctype/version/version.py:241 +msgid "Original" +msgstr "" + +#: frappe/core/doctype/version/version_view.html:74 +#: frappe/core/doctype/version/version_view.html:139 msgid "Original Value" msgstr "原值" @@ -18710,9 +18900,9 @@ msgstr "PATCH方法" #. Option for the 'Format' (Select) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json -#: frappe/printing/page/print/print.js:85 +#: frappe/printing/page/print/print.js:91 #: frappe/public/js/frappe/form/templates/print_layout.html:44 -#: frappe/public/js/frappe/views/reports/query_report.js:1834 +#: frappe/public/js/frappe/views/reports/query_report.js:1884 msgid "PDF" msgstr "PDF" @@ -18721,7 +18911,9 @@ msgid "PDF Generation in Progress" msgstr "PDF文件生成中" #. Label of the pdf_generator (Select) field in DocType 'Print Format' +#. Label of the pdf_generator (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_format/print_format.json +#: frappe/printing/doctype/print_settings/print_settings.json msgid "PDF Generator" msgstr "PDF生成器" @@ -18753,11 +18945,11 @@ msgstr "PDF生成失败" msgid "PDF generation failed because of broken image links" msgstr "PDF生成,因为破碎的图像链接失败" -#: frappe/printing/page/print/print.js:675 +#: frappe/printing/page/print/print.js:683 msgid "PDF generation may not work as expected." msgstr "PDF生成可能无法按预期工作。" -#: frappe/printing/page/print/print.js:593 +#: frappe/printing/page/print/print.js:601 msgid "PDF printing via \"Raw Print\" is not supported." msgstr "不支持通过 \"原始打印 \"进行 PDF 打印。" @@ -18916,7 +19108,7 @@ msgstr "页宽(毫米)" msgid "Page has expired!" msgstr "页已过期!" -#: frappe/printing/doctype/print_settings/print_settings.py:70 +#: frappe/printing/doctype/print_settings/print_settings.py:71 #: frappe/public/js/frappe/list/bulk_operations.js:106 msgid "Page height and width cannot be zero" msgstr "页面高度和宽度不能为零" @@ -18932,7 +19124,7 @@ msgstr "在网站上显示的页面\n" #: frappe/public/html/print_template.html:25 #: frappe/public/js/frappe/views/reports/print_tree.html:89 -#: frappe/public/js/frappe/web_form/web_form.js:288 +#: frappe/public/js/frappe/web_form/web_form.js:284 #: frappe/templates/print_formats/standard.html:34 msgid "Page {0} of {1}" msgstr "第{0}页,共{1}页" @@ -18943,7 +19135,7 @@ msgid "Parameter" msgstr "参数" #: frappe/public/js/frappe/model/model.js:142 -#: frappe/public/js/frappe/views/workspace/workspace.js:448 +#: frappe/public/js/frappe/views/workspace/workspace.js:496 msgid "Parent" msgstr "父" @@ -18976,11 +19168,11 @@ msgstr "父字段" #. Label of the nsm_parent_field (Data) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json -#: frappe/core/doctype/doctype/doctype.py:948 +#: frappe/core/doctype/doctype/doctype.py:951 msgid "Parent Field (Tree)" msgstr "父字段(树)" -#: frappe/core/doctype/doctype/doctype.py:954 +#: frappe/core/doctype/doctype/doctype.py:957 msgid "Parent Field must be a valid fieldname" msgstr "父字段必须是有效字段名" @@ -18994,7 +19186,7 @@ msgstr "" msgid "Parent Label" msgstr "父标签" -#: frappe/core/doctype/doctype/doctype.py:1212 +#: frappe/core/doctype/doctype/doctype.py:1215 msgid "Parent Missing" msgstr "父项缺失" @@ -19019,11 +19211,11 @@ msgstr "Parent是将数据添加到的单据的名称。" msgid "Parent-to-child or child-to-different-child grouping is not allowed." msgstr "不允许父子层级或子级到不同子级的分组方式。" -#: frappe/permissions.py:835 +#: frappe/permissions.py:841 msgid "Parentfield not specified in {0}: {1}" msgstr "{0}中未指定父字段:{1}" -#: frappe/client.py:470 +#: frappe/client.py:519 msgid "Parenttype, Parent and Parentfield are required to insert a child record" msgstr "插入子记录需要父类型、父项和父字段" @@ -19042,7 +19234,7 @@ msgstr "部分成功" msgid "Partially Sent" msgstr "部分发送" -#. Label of the participants (Section Break) field in DocType 'Event' +#. Label of the participants_tab (Tab Break) field in DocType 'Event' #: frappe/desk/doctype/event/event.js:30 frappe/desk/doctype/event/event.json msgid "Participants" msgstr "参与者" @@ -19079,11 +19271,11 @@ msgstr "已创建" msgid "Password" msgstr "密码" -#: frappe/core/doctype/user/user.py:1141 +#: frappe/core/doctype/user/user.py:1144 msgid "Password Email Sent" msgstr "密码邮件已发送" -#: frappe/core/doctype/user/user.py:497 +#: frappe/core/doctype/user/user.py:500 msgid "Password Reset" msgstr "密码重置" @@ -19092,7 +19284,7 @@ msgstr "密码重置" msgid "Password Reset Link Generation Limit" msgstr "密码重置链接生成限制" -#: frappe/public/js/frappe/form/grid_row.js:896 +#: frappe/public/js/frappe/form/grid_row.js:895 msgid "Password cannot be filtered" msgstr "密码不可被过滤" @@ -19121,11 +19313,11 @@ msgstr "邮箱账户缺少密码" msgid "Password not found for {0} {1} {2}" msgstr "未找到{0} {1} {2}的密码" -#: frappe/core/doctype/user/user.py:1307 +#: frappe/core/doctype/user/user.py:1310 msgid "Password requirements not met" msgstr "" -#: frappe/core/doctype/user/user.py:1140 +#: frappe/core/doctype/user/user.py:1143 msgid "Password reset instructions have been sent to {}'s email" msgstr "密码重置说明已发送至{}的邮箱" @@ -19137,7 +19329,7 @@ msgstr "密码已设置" msgid "Password size exceeded the maximum allowed size" msgstr "密码长度超过允许最大值" -#: frappe/core/doctype/user/user.py:926 +#: frappe/core/doctype/user/user.py:929 msgid "Password size exceeded the maximum allowed size." msgstr "密码长度超过允许最大值" @@ -19199,7 +19391,7 @@ msgstr "服务器证书的路径" msgid "Path to private Key File" msgstr "私钥文件的路径" -#: frappe/modules/utils.py:209 +#: frappe/modules/utils.py:252 msgid "Path {0} is not within module {1}" msgstr "" @@ -19284,15 +19476,15 @@ msgstr "权限级别" msgid "Permanent" msgstr "常驻" -#: frappe/public/js/frappe/form/form.js:1031 +#: frappe/public/js/frappe/form/form.js:1060 msgid "Permanently Cancel {0}?" msgstr "取消{0} ?" -#: frappe/public/js/frappe/form/form.js:1077 +#: frappe/public/js/frappe/form/form.js:1106 msgid "Permanently Discard {0}?" msgstr "永久丢弃{0}?" -#: frappe/public/js/frappe/form/form.js:864 +#: frappe/public/js/frappe/form/form.js:893 msgid "Permanently Submit {0}?" msgstr "正式提交{0}?" @@ -19300,7 +19492,11 @@ msgstr "正式提交{0}?" msgid "Permanently delete {0}?" msgstr "永久删除{0} ?" -#: frappe/core/doctype/user_type/user_type.py:84 frappe/database/query.py:914 +#: frappe/core/page/permission_manager/permission_manager_help.html:19 +msgid "Permission" +msgstr "" + +#: frappe/core/doctype/user_type/user_type.py:84 frappe/database/query.py:957 msgid "Permission Error" msgstr "权限错误" @@ -19310,12 +19506,12 @@ msgid "Permission Inspector" msgstr "权限调试工具" #. Label of the permlevel (Int) field in DocType 'Custom Field' -#: frappe/core/page/permission_manager/permission_manager.js:513 +#: frappe/core/page/permission_manager/permission_manager.js:514 #: frappe/custom/doctype/custom_field/custom_field.json msgid "Permission Level" msgstr "权限级别" -#: frappe/core/page/permission_manager/permission_manager_help.html:22 +#: frappe/core/page/permission_manager/permission_manager_help.html:89 msgid "Permission Levels" msgstr "权限级别" @@ -19324,11 +19520,6 @@ msgstr "权限级别" msgid "Permission Log" msgstr "权限日志" -#. Label of a shortcut in the Users Workspace -#: frappe/core/workspace/users/users.json -msgid "Permission Manager" -msgstr "角色权限管理" - #. Option for the 'Script Type' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "Permission Query" @@ -19359,7 +19550,6 @@ msgstr "" #. Label of the permissions (Table) field in DocType 'DocType' #. Label of the permissions_tab (Tab Break) field in DocType 'DocType' #. Label of the permissions (Section Break) field in DocType 'System Settings' -#. Label of a Card Break in the Users Workspace #. Label of the permissions (Section Break) field in DocType 'Customize Form #. Field' #: frappe/core/doctype/custom_docperm/custom_docperm.json @@ -19370,13 +19560,12 @@ msgstr "" #: frappe/core/doctype/user/user.js:136 frappe/core/doctype/user/user.js:145 #: frappe/core/doctype/user/user.js:154 #: frappe/core/page/permission_manager/permission_manager.js:221 -#: frappe/core/workspace/users/users.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Permissions" msgstr "权限" -#: frappe/core/doctype/doctype/doctype.py:1869 -#: frappe/core/doctype/doctype/doctype.py:1879 +#: frappe/core/doctype/doctype/doctype.py:1933 +#: frappe/core/doctype/doctype/doctype.py:1943 msgid "Permissions Error" msgstr "权限错误" @@ -19388,11 +19577,11 @@ msgstr "权限会自动应用于标准报表和搜索。" msgid "Permissions are set on Roles and Document Types (called DocTypes) by setting rights like Read, Write, Create, Delete, Submit, Cancel, Amend, Report, Import, Export, Print, Email and Set User Permissions." msgstr "权限设置基于用户角色和单据类型,可设置的权限包括读,写,创建,删除,提交,取消,修改,报表,导入,导出,打印,电子邮件和设置用户权限限制。" -#: frappe/core/page/permission_manager/permission_manager_help.html:26 +#: frappe/core/page/permission_manager/permission_manager_help.html:93 msgid "Permissions at higher levels are Field Level permissions. All Fields have a Permission Level set against them and the rules defined at that permissions apply to the field. This is useful in case you want to hide or make certain field read-only for certain Roles." msgstr "更高级权限是字段级权限。可以为每个字段设置所需的权限等级,特定的角色被分配对应的权限等级,据此就可以用不同的角色限制不同的用户有不同的字段访问权限。" -#: frappe/core/page/permission_manager/permission_manager_help.html:24 +#: frappe/core/page/permission_manager/permission_manager_help.html:91 msgid "Permissions at level 0 are Document Level permissions, i.e. they are primary for access to the document." msgstr "0级权限是单据级的权限,也就是说,它们是主要用于访问文件。" @@ -19462,13 +19651,13 @@ msgstr "电话" msgid "Phone No." msgstr "电话号码" -#: frappe/utils/__init__.py:124 +#: frappe/utils/__init__.py:115 msgid "Phone Number {0} set in field {1} is not valid." msgstr "字段{1}中设置的电话号码{0}无效" #: frappe/public/js/frappe/form/print_utils.js:68 -#: frappe/public/js/frappe/views/reports/report_view.js:1570 -#: frappe/public/js/frappe/views/reports/report_view.js:1573 +#: frappe/public/js/frappe/views/reports/report_view.js:1571 +#: frappe/public/js/frappe/views/reports/report_view.js:1574 msgid "Pick Columns" msgstr "选择报表输出字段" @@ -19526,7 +19715,7 @@ msgstr "请复制此网址主题定制。" msgid "Please Install the ldap3 library via pip to use ldap functionality." msgstr "请通过pip安装ldap3库以使用ldap功能。" -#: frappe/public/js/frappe/views/reports/query_report.js:308 +#: frappe/public/js/frappe/views/reports/query_report.js:309 msgid "Please Set Chart" msgstr "请设置图表" @@ -19542,7 +19731,7 @@ msgstr "请在您的电子邮件中添加主题" msgid "Please add a valid comment." msgstr "请添加有效评论" -#: frappe/core/doctype/user/user.py:1123 +#: frappe/core/doctype/user/user.py:1126 msgid "Please ask your administrator to verify your sign-up" msgstr "请联络管理员确认您的注册" @@ -19550,11 +19739,11 @@ msgstr "请联络管理员确认您的注册" msgid "Please attach a file first." msgstr "请附上文件第一。" -#: frappe/printing/doctype/letter_head/letter_head.py:82 +#: frappe/printing/doctype/letter_head/letter_head.py:89 msgid "Please attach an image file to set HTML for Footer." msgstr "请附加图像文件以设置页脚HTML" -#: frappe/printing/doctype/letter_head/letter_head.py:70 +#: frappe/printing/doctype/letter_head/letter_head.py:77 msgid "Please attach an image file to set HTML for Letter Head." msgstr "请附加图像文件以设置信头HTML" @@ -19566,11 +19755,11 @@ msgstr "请附加安装包" msgid "Please check the filter values set for Dashboard Chart: {}" msgstr "请检查仪表板图表设置的过滤值:{}" -#: frappe/model/base_document.py:1052 +#: frappe/model/base_document.py:1069 msgid "Please check the value of \"Fetch From\" set for field {0}" msgstr "请检查为字段{0}设置的“提取自”的值" -#: frappe/core/doctype/user/user.py:1121 +#: frappe/core/doctype/user/user.py:1124 msgid "Please check your email for verification" msgstr "请在您的电子邮件中查看验证码" @@ -19602,7 +19791,7 @@ msgstr "请点击以下链接来设置新密码" msgid "Please confirm your action to {0} this document." msgstr "确认 {0} 本单据。" -#: frappe/printing/page/print/print.js:677 +#: frappe/printing/page/print/print.js:685 msgid "Please contact your system manager to install correct version." msgstr "请联系系统管理员安装正确版本" @@ -19632,10 +19821,10 @@ msgstr "禁用用户名/密码登录前,请至少启用一个社交登录密 #: frappe/desk/doctype/notification_log/notification_log.js:45 #: frappe/email/doctype/auto_email_report/auto_email_report.js:17 -#: frappe/printing/page/print/print.js:697 -#: frappe/printing/page/print/print.js:733 +#: frappe/printing/page/print/print.js:705 +#: frappe/printing/page/print/print.js:747 #: frappe/public/js/frappe/list/bulk_operations.js:161 -#: frappe/public/js/frappe/utils/utils.js:1577 +#: frappe/public/js/frappe/utils/utils.js:1700 msgid "Please enable pop-ups" msgstr "请启用弹出窗口" @@ -19648,7 +19837,7 @@ msgstr "请在浏览器中启用弹窗" msgid "Please enable {} before continuing." msgstr "请先启用{}再继续" -#: frappe/utils/oauth.py:220 +#: frappe/utils/oauth.py:222 msgid "Please ensure that your profile has an email address" msgstr "请确保您的个人资料有一个电子邮件地址," @@ -19722,15 +19911,15 @@ msgstr "请登录后发表评论" msgid "Please make sure the Reference Communication Docs are not circularly linked." msgstr "请确保参考通信单据未被递归引用。" -#: frappe/model/document.py:1037 +#: frappe/model/document.py:1036 msgid "Please refresh to get the latest document." msgstr "请刷新获取最新数据。" -#: frappe/printing/page/print/print.js:594 +#: frappe/printing/page/print/print.js:602 msgid "Please remove the printer mapping in Printer Settings and try again." msgstr "请在打印机设置中移除打印机映射后重试" -#: frappe/public/js/frappe/form/form.js:359 +#: frappe/public/js/frappe/form/form.js:360 msgid "Please save before attaching." msgstr "请安装前保存。" @@ -19746,7 +19935,7 @@ msgstr "请删除分派之前保存的单据" msgid "Please save the form before previewing the message" msgstr "" -#: frappe/public/js/frappe/views/reports/report_view.js:1722 +#: frappe/public/js/frappe/views/reports/report_view.js:1723 msgid "Please save the report first" msgstr "请先保存报表" @@ -19766,7 +19955,7 @@ msgstr "请先选择实体类型" msgid "Please select Minimum Password Score" msgstr "请选择最低密码分数" -#: frappe/public/js/frappe/views/reports/query_report.js:1215 +#: frappe/public/js/frappe/views/reports/query_report.js:1232 msgid "Please select X and Y fields" msgstr "请选择X和Y轴字段" @@ -19774,7 +19963,7 @@ msgstr "请选择X和Y轴字段" msgid "Please select a DocType in options before setting filters" msgstr "" -#: frappe/utils/__init__.py:131 +#: frappe/utils/__init__.py:122 msgid "Please select a country code for field {1}." msgstr "请为字段{1}选择国家代码" @@ -19824,11 +20013,11 @@ msgstr "请选择{0}" msgid "Please set Email Address" msgstr "请设置电子邮件地址" -#: frappe/printing/page/print/print.js:608 +#: frappe/printing/page/print/print.js:616 msgid "Please set a printer mapping for this print format in the Printer Settings" msgstr "请在“打印机设置”中为此打印格式设置打印机映射" -#: frappe/public/js/frappe/views/reports/query_report.js:1438 +#: frappe/public/js/frappe/views/reports/query_report.js:1455 msgid "Please set filters" msgstr "请设置过滤条件" @@ -19836,7 +20025,7 @@ msgstr "请设置过滤条件" msgid "Please set filters value in Report Filter table." msgstr "请设置在报表过滤表过滤条件值。" -#: frappe/model/naming.py:580 +#: frappe/model/naming.py:578 msgid "Please set the document name" msgstr "请设置文档名称" @@ -19856,7 +20045,7 @@ msgstr "请通过SMS设置将其设置为身份验证方式之前设置短信" msgid "Please setup a message first" msgstr "请先设置一条消息" -#: frappe/core/doctype/user/user.py:462 +#: frappe/core/doctype/user/user.py:465 msgid "Please setup default outgoing Email Account from Settings > Email Account" msgstr "请通过设置 > 邮箱账户配置默认发件账户" @@ -19868,7 +20057,7 @@ msgstr "请通过工具 > 邮箱账户配置默认发件账户" msgid "Please specify" msgstr "请先输入" -#: frappe/permissions.py:809 +#: frappe/permissions.py:815 msgid "Please specify a valid parent DocType for {0}" msgstr "请为{0}指定有效的父文档类型" @@ -19896,7 +20085,7 @@ msgstr "请指定需要检查的日期时间字段" msgid "Please specify which value field must be checked" msgstr "请指定必须检查的值字段" -#: frappe/public/js/frappe/request.js:187 +#: frappe/public/js/frappe/request.js:185 #: frappe/public/js/frappe/views/translation_manager.js:102 msgid "Please try again" msgstr "请再试一次" @@ -20017,11 +20206,11 @@ msgstr "过账时间戳" msgid "Precision" msgstr "精度" -#: frappe/core/doctype/doctype/doctype.py:1691 +#: frappe/core/doctype/doctype/doctype.py:1705 msgid "Precision ({0}) for {1} cannot be greater than its length ({2})." msgstr "{1}的精度({0})不能大于其长度({2})。" -#: frappe/core/doctype/doctype/doctype.py:1415 +#: frappe/core/doctype/doctype/doctype.py:1429 msgid "Precision should be between 1 and 6" msgstr "精度应为1和6之间" @@ -20073,11 +20262,11 @@ msgstr "后台运行报表用户" msgid "Prepared report render failed" msgstr "预制报表渲染失败" -#: frappe/public/js/frappe/views/reports/query_report.js:478 +#: frappe/public/js/frappe/views/reports/query_report.js:479 msgid "Preparing Report" msgstr "准备报表" -#: frappe/public/js/frappe/views/communication.js:425 +#: frappe/public/js/frappe/views/communication.js:484 msgid "Prepend the template to the email message" msgstr "将模板内容追加到邮件正文(消息)" @@ -20085,7 +20274,7 @@ msgstr "将模板内容追加到邮件正文(消息)" msgid "Press Alt Key to trigger additional shortcuts in Menu and Sidebar" msgstr "按Alt键可在菜单和侧边栏中触发其他快速访问" -#: frappe/public/js/frappe/list/list_filter.js:87 +#: frappe/public/js/frappe/list/list_filter.js:104 msgid "Press Enter to save" msgstr "按Enter键保存" @@ -20103,7 +20292,7 @@ msgstr "按Enter键保存" #: frappe/printing/doctype/print_style/print_style.json #: frappe/public/js/frappe/form/controls/markdown_editor.js:17 #: frappe/public/js/frappe/form/controls/markdown_editor.js:31 -#: frappe/public/js/frappe/ui/capture.js:236 +#: frappe/public/js/frappe/ui/capture.js:237 msgid "Preview" msgstr "预览" @@ -20147,16 +20336,16 @@ msgstr "预览:" msgid "Previous" msgstr "上一个" -#: frappe/public/js/frappe/ui/slides.js:351 +#: frappe/public/js/frappe/ui/slides.js:365 msgctxt "Go to previous slide" msgid "Previous" msgstr "上一条" -#: frappe/public/js/frappe/form/toolbar.js:328 +#: frappe/public/js/frappe/form/toolbar.js:349 msgid "Previous Document" msgstr "上一份文档" -#: frappe/public/js/frappe/form/form.js:2232 +#: frappe/public/js/frappe/form/form.js:2263 msgid "Previous Submission" msgstr "前次提交" @@ -20209,19 +20398,19 @@ msgstr "文档类型{0}的主键存在值,不可修改" #: frappe/core/doctype/docperm/docperm.json #: frappe/core/doctype/success_action/success_action.js:58 #: frappe/core/doctype/user_document_type/user_document_type.json -#: frappe/printing/page/print/print.js:79 +#: frappe/core/page/permission_manager/permission_manager_help.html:51 +#: frappe/printing/page/print/print.js:85 +#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:106 #: frappe/public/js/frappe/form/success_action.js:81 #: frappe/public/js/frappe/form/templates/print_layout.html:46 -#: frappe/public/js/frappe/form/toolbar.js:393 -#: frappe/public/js/frappe/form/toolbar.js:405 #: frappe/public/js/frappe/list/bulk_operations.js:95 -#: frappe/public/js/frappe/views/reports/query_report.js:1819 +#: frappe/public/js/frappe/views/reports/query_report.js:1869 #: frappe/public/js/frappe/views/reports/report_view.js:1533 #: frappe/public/js/frappe/views/treeview.js:492 frappe/www/printview.html:18 msgid "Print" msgstr "打印" -#: frappe/public/js/frappe/list/list_view.js:2243 +#: frappe/public/js/frappe/list/list_view.js:2251 msgctxt "Button in list view actions menu" msgid "Print" msgstr "打印" @@ -20239,8 +20428,9 @@ msgstr "打印单据" #: frappe/core/workspace/build/build.json #: frappe/email/doctype/notification/notification.json #: frappe/printing/doctype/print_format/print_format.json -#: frappe/printing/page/print/print.js:108 -#: frappe/printing/page/print/print.js:886 +#: frappe/printing/page/print/print.js:116 +#: frappe/printing/page/print/print.js:900 +#: frappe/public/js/frappe/form/print_utils.js:31 #: frappe/public/js/frappe/list/bulk_operations.js:59 #: frappe/website/doctype/web_form/web_form.json msgid "Print Format" @@ -20284,7 +20474,7 @@ msgstr "打印格式帮助" msgid "Print Format Type" msgstr "打印格式类型" -#: frappe/public/js/frappe/views/reports/query_report.js:1608 +#: frappe/public/js/frappe/views/reports/query_report.js:1644 msgid "Print Format not found" msgstr "未找到打印格式" @@ -20317,11 +20507,11 @@ msgstr "不打印" msgid "Print Hide If No Value" msgstr "无值不打印" -#: frappe/public/js/frappe/views/communication.js:159 +#: frappe/public/js/frappe/views/communication.js:186 msgid "Print Language" msgstr "打印语言" -#: frappe/public/js/frappe/form/print_utils.js:225 +#: frappe/public/js/frappe/form/print_utils.js:238 msgid "Print Sent to the printer!" msgstr "已发送到打印机!" @@ -20334,8 +20524,8 @@ msgstr "打印服务器" #. Name of a DocType #: frappe/printing/doctype/print_settings/print_settings.json #: frappe/printing/doctype/print_style/print_style.js:6 -#: frappe/printing/page/print/print.js:174 -#: frappe/public/js/frappe/form/print_utils.js:99 +#: frappe/printing/page/print/print.js:182 +#: frappe/public/js/frappe/form/print_utils.js:112 #: frappe/public/js/frappe/form/templates/print_layout.html:35 msgid "Print Settings" msgstr "打印设置" @@ -20374,7 +20564,7 @@ msgstr "打印宽度" msgid "Print Width of the field, if the field is a column in a table" msgstr "表中的列(字段)打印宽度" -#: frappe/public/js/frappe/form/form.js:171 +#: frappe/public/js/frappe/form/form.js:172 msgid "Print document" msgstr "打印单据" @@ -20383,11 +20573,11 @@ msgstr "打印单据" msgid "Print with letterhead" msgstr "打印表头" -#: frappe/printing/page/print/print.js:895 +#: frappe/printing/page/print/print.js:909 msgid "Printer" msgstr "打印机" -#: frappe/printing/page/print/print.js:872 +#: frappe/printing/page/print/print.js:886 msgid "Printer Mapping" msgstr "打印机映射" @@ -20397,11 +20587,11 @@ msgstr "打印机映射" msgid "Printer Name" msgstr "打印机名称" -#: frappe/printing/page/print/print.js:864 +#: frappe/printing/page/print/print.js:878 msgid "Printer Settings" msgstr "打印机设置" -#: frappe/printing/page/print/print.js:607 +#: frappe/printing/page/print/print.js:615 msgid "Printer mapping not set." msgstr "未设置打印机映射" @@ -20454,7 +20644,7 @@ msgstr "ProTip:添加Reference: {{ reference_doctype }} {{ reference_nam msgid "Proceed" msgstr "继续" -#: frappe/public/js/frappe/views/reports/query_report.js:943 +#: frappe/public/js/frappe/views/reports/query_report.js:960 msgid "Proceed Anyway" msgstr "仍然继续" @@ -20494,9 +20684,9 @@ msgid "Project" msgstr "项目" #. Label of the property (Data) field in DocType 'Property Setter' -#: frappe/core/doctype/version/version_view.html:13 -#: frappe/core/doctype/version/version_view.html:38 -#: frappe/core/doctype/version/version_view.html:75 +#: frappe/core/doctype/version/version_view.html:73 +#: frappe/core/doctype/version/version_view.html:101 +#: frappe/core/doctype/version/version_view.html:138 #: frappe/custom/doctype/property_setter/property_setter.json msgid "Property" msgstr "属性" @@ -20566,7 +20756,7 @@ msgstr "提供者名称" #: frappe/desk/doctype/note/note_list.js:6 #: frappe/desk/doctype/workspace/workspace.json #: frappe/public/js/frappe/views/interaction.js:78 -#: frappe/public/js/frappe/views/workspace/workspace.js:454 +#: frappe/public/js/frappe/views/workspace/workspace.js:502 msgid "Public" msgstr "公开" @@ -20716,7 +20906,7 @@ msgstr "二维码" msgid "QR Code for Login Verification" msgstr "用于登录验证的QR码" -#: frappe/public/js/frappe/form/print_utils.js:234 +#: frappe/public/js/frappe/form/print_utils.js:247 msgid "QZ Tray Failed:" msgstr "QZ托盘失败:" @@ -20778,7 +20968,7 @@ msgstr "查询必须为SELECT或只读WITH类型" msgid "Queue" msgstr "队列" -#: frappe/utils/background_jobs.py:738 +#: frappe/utils/background_jobs.py:737 msgid "Queue Overloaded" msgstr "队列过载" @@ -20799,7 +20989,7 @@ msgstr "队列类型" msgid "Queue in Background (BETA)" msgstr "启用后台提交(试验功能)" -#: frappe/utils/background_jobs.py:563 +#: frappe/utils/background_jobs.py:562 msgid "Queue should be one of {0}" msgstr "队列应该是{0}" @@ -20840,7 +21030,7 @@ msgstr "排队备份。您将收到一封包含下载链接的电子邮件" msgid "Queues" msgstr "队列列表" -#: frappe/desk/doctype/bulk_update/bulk_update.py:85 +#: frappe/desk/doctype/bulk_update/bulk_update.py:86 msgid "Queuing {0} for Submission" msgstr "正在将{0}加入提交队列" @@ -20932,6 +21122,15 @@ msgstr "原生命令" msgid "Raw Email" msgstr "原始电子邮件" +#: frappe/core/doctype/communication/email.py:95 +msgid "Raw HTML can be used only with Email Templates having 'Use HTML' checked. Proceeding with plain text email." +msgstr "" + +#. Description of the 'Send As Raw HTML' (Check) field in DocType 'Email Queue' +#: frappe/email/doctype/email_queue/email_queue.json +msgid "Raw HTML emails are rendered as complete Jinja templates. Otherwise, emails are wrapped in the standard.html email template, which inserts brand_logo, header and footer." +msgstr "" + #. Label of the raw_printing (Check) field in DocType 'Print Format' #. Label of the raw_printing_section (Section Break) field in DocType 'Print #. Settings' @@ -20940,7 +21139,7 @@ msgstr "原始电子邮件" msgid "Raw Printing" msgstr "原生打印" -#: frappe/printing/page/print/print.js:179 +#: frappe/printing/page/print/print.js:187 msgid "Raw Printing Setting" msgstr "原始打印设置" @@ -20958,7 +21157,7 @@ msgstr "回覆:" #: frappe/core/doctype/communication/communication.js:268 #: frappe/public/js/frappe/form/footer/form_timeline.js:601 -#: frappe/public/js/frappe/views/communication.js:361 +#: frappe/public/js/frappe/views/communication.js:419 msgid "Re: {0}" msgstr "回复:{0}" @@ -20969,11 +21168,12 @@ msgstr "回复:{0}" #. Label of the read (Check) field in DocType 'User Document Type' #. Label of the read (Check) field in DocType 'Notification Log' #. Option for the 'Action' (Select) field in DocType 'Email Flag Queue' -#: frappe/client.py:453 frappe/core/doctype/communication/communication.json +#: frappe/client.py:502 frappe/core/doctype/communication/communication.json #: frappe/core/doctype/custom_docperm/custom_docperm.json #: frappe/core/doctype/docperm/docperm.json #: frappe/core/doctype/docshare/docshare.json #: frappe/core/doctype/user_document_type/user_document_type.json +#: frappe/core/page/permission_manager/permission_manager_help.html:31 #: frappe/desk/doctype/notification_log/notification_log.json #: frappe/email/doctype/email_flag_queue/email_flag_queue.json #: frappe/public/js/frappe/form/templates/set_sharing.html:2 @@ -21010,7 +21210,7 @@ msgstr "是否只读先决条件" msgid "Read Only Depends On (JS)" msgstr "只读先决条件(JS)" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:18 +#: frappe/public/js/frappe/ui/toolbar/navbar.html:8 #: frappe/templates/includes/navbar/navbar_items.html:97 msgid "Read Only Mode" msgstr "只读模式" @@ -21050,7 +21250,7 @@ msgstr "实时通信(SocketIO)" msgid "Reason" msgstr "原因" -#: frappe/public/js/frappe/views/reports/query_report.js:897 +#: frappe/public/js/frappe/views/reports/query_report.js:914 msgid "Rebuild" msgstr "重新生成" @@ -21092,7 +21292,7 @@ msgstr "接收人参数" msgid "Recent years are easy to guess." msgstr "近年来,很容易被猜到。" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:576 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:546 msgid "Recents" msgstr "最近" @@ -21143,7 +21343,7 @@ msgstr "记录器建议索引" msgid "Records for following doctypes will be filtered" msgstr "以下单据类型的记录将被过滤" -#: frappe/core/doctype/doctype/doctype.py:1623 +#: frappe/core/doctype/doctype/doctype.py:1637 msgid "Recursive Fetch From" msgstr "递归获取自" @@ -21209,12 +21409,12 @@ msgstr "重定向" msgid "Redis cache server not running. Please contact Administrator / Tech support" msgstr "Redis缓存服务器无法运行。请联系管理员/技术支持" -#: frappe/public/js/frappe/form/toolbar.js:563 +#: frappe/public/js/frappe/form/toolbar.js:566 msgid "Redo" msgstr "恢复" #: frappe/public/js/frappe/form/form.js:165 -#: frappe/public/js/frappe/form/toolbar.js:571 +#: frappe/public/js/frappe/form/toolbar.js:574 msgid "Redo last action" msgstr "重做上一步操作" @@ -21430,12 +21630,12 @@ msgstr "参考:{0} {1}" msgid "Referrer" msgstr "来源页" -#: frappe/printing/page/print/print.js:87 frappe/public/js/frappe/desk.js:168 +#: frappe/printing/page/print/print.js:93 frappe/public/js/frappe/desk.js:168 #: frappe/public/js/frappe/desk.js:552 -#: frappe/public/js/frappe/form/form.js:1213 +#: frappe/public/js/frappe/form/form.js:1242 #: frappe/public/js/frappe/form/templates/print_layout.html:6 #: frappe/public/js/frappe/list/base_list.js:67 -#: frappe/public/js/frappe/views/reports/query_report.js:1808 +#: frappe/public/js/frappe/views/reports/query_report.js:1858 #: frappe/public/js/frappe/views/treeview.js:498 #: frappe/public/js/frappe/widgets/chart_widget.js:291 #: frappe/public/js/frappe/widgets/number_card_widget.js:352 @@ -21452,7 +21652,7 @@ msgstr "全部刷新" msgid "Refresh Google Sheet" msgstr "刷新Google表格" -#: frappe/printing/page/print/print.js:390 +#: frappe/printing/page/print/print.js:398 msgid "Refresh Print Preview" msgstr "刷新打印预览" @@ -21467,7 +21667,7 @@ msgstr "刷新打印预览" msgid "Refresh Token" msgstr "刷新令牌" -#: frappe/public/js/frappe/list/list_view.js:537 +#: frappe/public/js/frappe/list/list_view.js:540 msgctxt "Document count in list view" msgid "Refreshing" msgstr "正在刷新" @@ -21478,7 +21678,7 @@ msgstr "正在刷新" msgid "Refreshing..." msgstr "正在刷新..." -#: frappe/core/doctype/user/user.py:1083 +#: frappe/core/doctype/user/user.py:1086 msgid "Registered but disabled" msgstr "已注册但被禁用" @@ -21524,10 +21724,8 @@ msgstr "重新链接沟通" msgid "Relinked" msgstr "重新链接" -#. Label of a standard navbar item -#. Type: Action -#: frappe/custom/doctype/customize_form/customize_form.js:120 frappe/hooks.py -#: frappe/public/js/frappe/form/toolbar.js:480 +#: frappe/custom/doctype/customize_form/customize_form.js:120 +#: frappe/public/js/frappe/form/toolbar.js:483 msgid "Reload" msgstr "刷新" @@ -21539,7 +21737,7 @@ msgstr "重新加载数据" msgid "Reload List" msgstr "重新加载列表" -#: frappe/public/js/frappe/views/reports/query_report.js:100 +#: frappe/public/js/frappe/views/reports/query_report.js:101 msgid "Reload Report" msgstr "重新加载报表" @@ -21558,7 +21756,7 @@ msgstr "保存最后一次输入值" msgid "Remind At" msgstr "提醒时间" -#: frappe/public/js/frappe/form/toolbar.js:512 +#: frappe/public/js/frappe/form/toolbar.js:515 msgid "Remind Me" msgstr "提醒我" @@ -21638,9 +21836,9 @@ msgid "Removed" msgstr "已移除" #: frappe/custom/doctype/custom_field/custom_field.js:138 -#: frappe/public/js/frappe/form/toolbar.js:265 -#: frappe/public/js/frappe/form/toolbar.js:269 -#: frappe/public/js/frappe/form/toolbar.js:468 +#: frappe/public/js/frappe/form/toolbar.js:282 +#: frappe/public/js/frappe/form/toolbar.js:286 +#: frappe/public/js/frappe/form/toolbar.js:458 #: frappe/public/js/frappe/model/model.js:723 #: frappe/public/js/frappe/views/treeview.js:311 msgid "Rename" @@ -21668,7 +21866,7 @@ msgstr "本部分标签左对齐,值右对齐" msgid "Reopen" msgstr "重新打开" -#: frappe/public/js/frappe/form/toolbar.js:580 +#: frappe/public/js/frappe/form/toolbar.js:583 msgid "Repeat" msgstr "重复" @@ -21715,7 +21913,7 @@ msgstr "像“AAA”重复很容易被猜到" msgid "Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"" msgstr "重复像“ABCABCABC”只稍硬比“ABC”猜测" -#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:174 +#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:196 msgid "Repeats {0}" msgstr "重复{0}" @@ -21778,6 +21976,7 @@ msgstr "全部回复" #: frappe/core/doctype/docperm/docperm.json #: frappe/core/doctype/report/report.json #: frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.json +#: frappe/core/page/permission_manager/permission_manager_help.html:61 #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.js:8 #: frappe/core/workspace/build/build.json #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json @@ -21792,10 +21991,9 @@ msgstr "全部回复" #: frappe/email/doctype/auto_email_report/auto_email_report.json #: frappe/printing/doctype/print_format/print_format.json #: frappe/printing/doctype/print_format/print_format.py:104 -#: frappe/public/js/frappe/form/print_utils.js:31 -#: frappe/public/js/frappe/request.js:616 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:104 -#: frappe/public/js/frappe/utils/utils.js:949 +#: frappe/public/js/frappe/request.js:614 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:95 +#: frappe/public/js/frappe/utils/utils.js:947 msgid "Report" msgstr "报表" @@ -21864,7 +22062,7 @@ msgstr "报表管理" #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.py:39 #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/desk/doctype/number_card/number_card.json -#: frappe/public/js/frappe/views/reports/query_report.js:1995 +#: frappe/public/js/frappe/views/reports/query_report.js:2048 msgid "Report Name" msgstr "报表名称" @@ -21898,14 +22096,10 @@ msgstr "报表类型" msgid "Report View" msgstr "报表视图" -#: frappe/public/js/frappe/form/templates/form_sidebar.html:44 +#: frappe/public/js/frappe/form/templates/form_sidebar.html:63 msgid "Report bug" msgstr "报告缺陷" -#: frappe/core/doctype/doctype/doctype.py:1844 -msgid "Report cannot be set for Single types" -msgstr "报表不能单类型设置" - #: frappe/desk/doctype/dashboard_chart/dashboard_chart.js:208 #: frappe/desk/doctype/number_card/number_card.js:194 msgid "Report has no data, please modify the filters or change the Report Name" @@ -21916,7 +22110,7 @@ msgstr "报表无数据,请调整过滤器或更换报表名称" msgid "Report has no numeric fields, please change the Report Name" msgstr "报表无数字字段,请更换报表名称" -#: frappe/public/js/frappe/views/reports/query_report.js:1024 +#: frappe/public/js/frappe/views/reports/query_report.js:1041 msgid "Report initiated, click to view status" msgstr "生成报表结果的后台任务已启动,点击查看任务状态" @@ -21928,7 +22122,7 @@ msgstr "达到报表限制" msgid "Report timed out." msgstr "报表超时" -#: frappe/desk/query_report.py:686 +#: frappe/desk/query_report.py:685 msgid "Report updated successfully" msgstr "报表已成功更新" @@ -21936,12 +22130,12 @@ msgstr "报表已成功更新" msgid "Report was not saved (there were errors)" msgstr "报表尚未保存(有错误)" -#: frappe/public/js/frappe/views/reports/query_report.js:2033 +#: frappe/public/js/frappe/views/reports/query_report.js:2086 msgid "Report with more than 10 columns looks better in Landscape mode." msgstr "超过10列的报表更适合横向模式" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:286 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:287 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:262 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:263 msgid "Report {0}" msgstr "报表{0}" @@ -21964,7 +22158,7 @@ msgstr "报表:" #. Label of the prepared_report_section (Section Break) field in DocType #. 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:591 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:561 msgid "Reports" msgstr "报表" @@ -21972,7 +22166,7 @@ msgstr "报表" msgid "Reports & Masters" msgstr "报表与主数据" -#: frappe/public/js/frappe/views/reports/query_report.js:940 +#: frappe/public/js/frappe/views/reports/query_report.js:957 msgid "Reports already in Queue" msgstr "报表已加入队列" @@ -22031,13 +22225,13 @@ msgstr "请求方法" msgid "Request Structure" msgstr "请求数据格式" -#: frappe/public/js/frappe/request.js:231 +#: frappe/public/js/frappe/request.js:229 msgid "Request Timed Out" msgstr "请求超时" #. Label of the timeout (Int) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json -#: frappe/public/js/frappe/request.js:244 +#: frappe/public/js/frappe/request.js:242 msgid "Request Timeout" msgstr "请求超时" @@ -22153,7 +22347,7 @@ msgstr "重置为默认" msgid "Reset sorting" msgstr "重置排序" -#: frappe/public/js/frappe/form/grid_row.js:433 +#: frappe/public/js/frappe/form/grid_row.js:435 msgid "Reset to default" msgstr "恢复默认设置" @@ -22211,7 +22405,7 @@ msgstr "" msgid "Response Type" msgstr "响应类型" -#: frappe/public/js/frappe/ui/notifications/notifications.js:445 +#: frappe/public/js/frappe/ui/notifications/notifications.js:454 msgid "Rest of the day" msgstr "今日剩余时间" @@ -22220,7 +22414,7 @@ msgstr "今日剩余时间" msgid "Restore" msgstr "恢复" -#: frappe/core/page/permission_manager/permission_manager.js:559 +#: frappe/core/page/permission_manager/permission_manager.js:560 msgid "Restore Original Permissions" msgstr "恢复原权限" @@ -22242,6 +22436,11 @@ msgstr "正在恢复已删除文档" msgid "Restrict IP" msgstr "限制IP" +#. Label of the restrict_removal (Check) field in DocType 'Desktop Icon' +#: frappe/desk/doctype/desktop_icon/desktop_icon.json +msgid "Restrict Removal" +msgstr "" + #. Label of the restrict_to_domain (Link) field in DocType 'DocType' #. Label of the restrict_to_domain (Link) field in DocType 'Module Def' #. Label of the restrict_to_domain (Link) field in DocType 'Page' @@ -22269,8 +22468,8 @@ msgctxt "Title of message showing restrictions in list view" msgid "Restrictions" msgstr "限制条件" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:455 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:470 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:457 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:472 msgid "Result" msgstr "结果" @@ -22317,9 +22516,15 @@ msgstr "撤销" msgid "Rich Text" msgstr "富文本" +#. Option for the 'Alignment' (Select) field in DocType 'DocField' +#. Option for the 'Alignment' (Select) field in DocType 'Custom Field' +#. Option for the 'Alignment' (Select) field in DocType 'Customize Form Field' #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #. Option for the 'Align' (Select) field in DocType 'Letter Head' #. Option for the 'Text Align' (Select) field in DocType 'Web Page' +#: frappe/core/doctype/docfield/docfield.json +#: frappe/custom/doctype/custom_field/custom_field.json +#: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/desk/doctype/form_tour_step/form_tour_step.json #: frappe/printing/doctype/letter_head/letter_head.json #: frappe/website/doctype/web_page/web_page.json @@ -22354,8 +22559,6 @@ msgstr "机器人自动回复文字" #. Name of a DocType #. Label of the role (Link) field in DocType 'User Role' #. Label of the role (Link) field in DocType 'User Type' -#. Label of a Link in the Users Workspace -#. Label of a shortcut in the Users Workspace #. Label of the role (Link) field in DocType 'Onboarding Permission' #. Label of the role (Link) field in DocType 'ToDo' #. Label of the role (Link) field in DocType 'OAuth Client Role' @@ -22370,8 +22573,7 @@ msgstr "机器人自动回复文字" #: frappe/core/doctype/user_type/user_type.json #: frappe/core/doctype/user_type/user_type.py:110 #: frappe/core/page/permission_manager/permission_manager.js:219 -#: frappe/core/page/permission_manager/permission_manager.js:506 -#: frappe/core/workspace/users/users.json +#: frappe/core/page/permission_manager/permission_manager.js:507 #: frappe/desk/doctype/onboarding_permission/onboarding_permission.json #: frappe/desk/doctype/todo/todo.json #: frappe/integrations/doctype/oauth_client_role/oauth_client_role.json @@ -22415,7 +22617,7 @@ msgstr "角色权限" msgid "Role Permissions Manager" msgstr "角色权限管理" -#: frappe/public/js/frappe/list/list_view.js:1936 +#: frappe/public/js/frappe/list/list_view.js:1944 msgctxt "Button in list view menu" msgid "Role Permissions Manager" msgstr "角色权限管理器" @@ -22423,11 +22625,9 @@ msgstr "角色权限管理器" #. Name of a DocType #. Label of the role_profile_name (Link) field in DocType 'User' #. Label of the role_profile (Link) field in DocType 'User Role Profile' -#. Label of a Link in the Users Workspace #: frappe/core/doctype/role_profile/role_profile.json #: frappe/core/doctype/user/user.json #: frappe/core/doctype/user_role_profile/user_role_profile.json -#: frappe/core/workspace/users/users.json msgid "Role Profile" msgstr "岗位" @@ -22449,7 +22649,7 @@ msgstr "角色复制" msgid "Role and Level" msgstr "角色和级别" -#: frappe/core/doctype/user/user.py:403 +#: frappe/core/doctype/user/user.py:406 msgid "Role has been set as per the user type {0}" msgstr "已根据用户类型{0}设置角色" @@ -22568,20 +22768,20 @@ msgstr "网址重定向" msgid "Route: Example \"/app\"" msgstr "路径: 例如 \"/app\"" -#: frappe/model/base_document.py:953 frappe/model/document.py:822 +#: frappe/model/base_document.py:972 frappe/model/document.py:821 msgid "Row" msgstr "行" -#: frappe/core/doctype/version/version_view.html:74 +#: frappe/core/doctype/version/version_view.html:137 msgid "Row #" msgstr "行#" -#: frappe/core/doctype/doctype/doctype.py:1866 -#: frappe/core/doctype/doctype/doctype.py:1876 -msgid "Row # {0}: Non administrator user can not set the role {1} to the custom doctype" -msgstr "行号{0}:非管理员用户无法为自定义文档类型设置角色{1}" +#: frappe/core/doctype/doctype/doctype.py:1930 +#: frappe/core/doctype/doctype/doctype.py:1940 +msgid "Row # {0}: Non-administrator users cannot add the role {1} to a custom DocType." +msgstr "" -#: frappe/model/base_document.py:1083 +#: frappe/model/base_document.py:1100 msgid "Row #{0}:" msgstr "行#{0}:" @@ -22608,7 +22808,7 @@ msgstr "行名称" msgid "Row Number" msgstr "行号" -#: frappe/core/doctype/version/version_view.html:69 +#: frappe/core/doctype/version/version_view.html:132 msgid "Row Values Changed" msgstr "明细表变更" @@ -22627,14 +22827,14 @@ msgstr "行{0}:不允许启用允许对提交的标准字段" #. Label of the rows_added_section (Section Break) field in DocType 'Audit #. Trail' #: frappe/core/doctype/audit_trail/audit_trail.json -#: frappe/core/doctype/version/version_view.html:33 +#: frappe/core/doctype/version/version_view.html:96 msgid "Rows Added" msgstr "新增行" #. Label of the rows_removed_section (Section Break) field in DocType 'Audit #. Trail' #: frappe/core/doctype/audit_trail/audit_trail.json -#: frappe/core/doctype/version/version_view.html:33 +#: frappe/core/doctype/version/version_view.html:96 msgid "Rows Removed" msgstr "已删除行" @@ -22657,7 +22857,7 @@ msgstr "规则" msgid "Rule Conditions" msgstr "规则条件" -#: frappe/permissions.py:681 +#: frappe/permissions.py:687 msgid "Rule for this doctype, role, permlevel and if-owner combination already exists." msgstr "该文档类型、角色、权限层级和所有者条件的组合规则已存在。" @@ -22737,7 +22937,7 @@ msgstr "短信设置" msgid "SMS sent successfully" msgstr "短信发送成功" -#: frappe/templates/includes/login/login.js:369 +#: frappe/templates/includes/login/login.js:368 msgid "SMS was not sent. Please contact Administrator." msgstr "短信未发送,请联系管理员。" @@ -22771,7 +22971,7 @@ msgstr "SQL输出" msgid "SQL Queries" msgstr "SQL查询" -#: frappe/database/query.py:1876 +#: frappe/database/query.py:1954 msgid "SQL functions are not allowed as strings in SELECT: {0}. Use dict syntax like {{'COUNT': '*'}} instead." msgstr "" @@ -22843,22 +23043,23 @@ msgstr "星期六" #. Option for the 'Send Alert On' (Select) field in DocType 'Notification' #: cypress/integration/web_form.js:52 #: frappe/core/doctype/data_import/data_import.js:119 +#: frappe/desk/page/desktop/desktop.html:65 #: frappe/email/doctype/notification/notification.json -#: frappe/printing/page/print/print.js:923 +#: frappe/printing/page/print/print.js:937 #: frappe/printing/page/print_format_builder/print_format_builder.js:160 #: frappe/public/js/frappe/form/footer/form_timeline.js:678 -#: frappe/public/js/frappe/form/quick_entry.js:185 +#: frappe/public/js/frappe/form/quick_entry.js:196 #: frappe/public/js/frappe/list/list_settings.js:37 #: frappe/public/js/frappe/list/list_settings.js:245 -#: frappe/public/js/frappe/list/list_view.js:1998 -#: frappe/public/js/frappe/ui/toolbar/toolbar.js:267 +#: frappe/public/js/frappe/list/list_view.js:2006 +#: frappe/public/js/frappe/ui/toolbar/toolbar.js:252 #: frappe/public/js/frappe/utils/common.js:452 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:45 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:189 #: frappe/public/js/frappe/views/kanban/kanban_view.js:357 -#: frappe/public/js/frappe/views/reports/query_report.js:1987 -#: frappe/public/js/frappe/views/reports/report_view.js:1739 -#: frappe/public/js/frappe/views/workspace/workspace.js:350 +#: frappe/public/js/frappe/views/reports/query_report.js:2040 +#: frappe/public/js/frappe/views/reports/report_view.js:1740 +#: frappe/public/js/frappe/views/workspace/workspace.js:398 #: frappe/public/js/frappe/widgets/base_widget.js:142 #: frappe/public/js/frappe/widgets/quick_list_widget.js:120 #: frappe/public/js/print_format_builder/print_format_builder.bundle.js:15 @@ -22871,7 +23072,7 @@ msgid "Save Anyway" msgstr "仍然保存" #: frappe/public/js/frappe/views/reports/report_view.js:1384 -#: frappe/public/js/frappe/views/reports/report_view.js:1746 +#: frappe/public/js/frappe/views/reports/report_view.js:1747 msgid "Save As" msgstr "另存为" @@ -22879,7 +23080,7 @@ msgstr "另存为" msgid "Save Customizations" msgstr "保存自定义" -#: frappe/public/js/frappe/views/reports/query_report.js:1990 +#: frappe/public/js/frappe/views/reports/query_report.js:2043 msgid "Save Report" msgstr "保存报表" @@ -22897,20 +23098,20 @@ msgid "Save the document." msgstr "保存文档。" #: frappe/model/rename_doc.py:106 -#: frappe/printing/page/print_format_builder/print_format_builder.js:858 -#: frappe/public/js/frappe/form/toolbar.js:297 +#: frappe/printing/page/print_format_builder/print_format_builder.js:892 +#: frappe/public/js/frappe/form/toolbar.js:315 #: frappe/public/js/frappe/views/kanban/kanban_board.bundle.js:917 -#: frappe/public/js/frappe/views/workspace/workspace.js:729 +#: frappe/public/js/frappe/views/workspace/workspace.js:778 msgid "Saved" msgstr "已保存" -#: frappe/public/js/frappe/list/list_filter.js:20 +#: frappe/public/js/frappe/list/list_filter.js:21 msgid "Saved Filters" msgstr "已保存的筛选器" #: frappe/public/js/frappe/list/list_settings.js:41 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:47 -#: frappe/public/js/frappe/views/workspace/workspace.js:362 +#: frappe/public/js/frappe/views/workspace/workspace.js:410 msgid "Saving" msgstr "保存" @@ -22919,11 +23120,11 @@ msgctxt "Freeze message while saving a document" msgid "Saving" msgstr "正在保存" -#: frappe/public/js/frappe/list/list_view.js:2009 +#: frappe/public/js/frappe/list/list_view.js:2017 msgid "Saving Changes..." msgstr "" -#: frappe/custom/doctype/customize_form/customize_form.js:411 +#: frappe/custom/doctype/customize_form/customize_form.js:421 msgid "Saving Customization..." msgstr "正在保存自定义..." @@ -23127,7 +23328,7 @@ msgstr "脚本" #: frappe/public/js/frappe/form/link_selector.js:46 #: frappe/public/js/frappe/list/list_sidebar_stat.html:4 #: frappe/public/js/frappe/ui/address_autocomplete/autocomplete_dialog.js:20 -#: frappe/public/js/frappe/ui/sidebar/sidebar.js:246 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:282 #: frappe/public/js/frappe/ui/toolbar/search.js:49 #: frappe/public/js/frappe/ui/toolbar/search.js:68 #: frappe/templates/discussions/search.html:2 @@ -23147,7 +23348,7 @@ msgstr "搜索框" msgid "Search Fields" msgstr "搜索字段" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:253 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:260 msgid "Search Help" msgstr "搜索帮助" @@ -23165,7 +23366,7 @@ msgstr "搜索结果" msgid "Search by filename or extension" msgstr "按文件名或后缀搜索" -#: frappe/core/doctype/doctype/doctype.py:1482 +#: frappe/core/doctype/doctype/doctype.py:1496 msgid "Search field {0} is not valid" msgstr "搜索字段{0}无效" @@ -23182,12 +23383,12 @@ msgstr "搜索字段类型" msgid "Search for anything" msgstr "搜索任何内容" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:367 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:374 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:372 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:378 msgid "Search for {0}" msgstr "搜索{0}" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:228 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:235 msgid "Search in a document type" msgstr "在单据类型中搜索" @@ -23259,15 +23460,15 @@ msgstr "段至少须包括一栏" msgid "Security Settings" msgstr "安全设置" -#: frappe/public/js/frappe/ui/notifications/notifications.js:340 +#: frappe/public/js/frappe/ui/notifications/notifications.js:349 msgid "See all Activity" msgstr "查看所有活动" -#: frappe/public/js/frappe/views/reports/query_report.js:866 +#: frappe/public/js/frappe/views/reports/query_report.js:883 msgid "See all past reports." msgstr "点这儿可以查看之前的历史报表。" -#: frappe/public/js/frappe/form/form.js:1247 +#: frappe/public/js/frappe/form/form.js:1276 #: frappe/website/doctype/contact_us_settings/contact_us_settings.js:4 msgid "See on Website" msgstr "在门户网站查看" @@ -23317,24 +23518,26 @@ msgstr "查看人列表" #: frappe/core/doctype/docperm/docperm.json #: frappe/core/doctype/report_column/report_column.json #: frappe/core/doctype/report_filter/report_filter.json +#: frappe/core/page/permission_manager/permission_manager_help.html:26 #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json -#: frappe/printing/page/print/print.js:661 +#: frappe/printing/page/print/print.js:669 #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Select" msgstr "单选" -#: frappe/public/js/frappe/data_import/data_exporter.js:149 +#: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:8 +#: frappe/public/js/frappe/data_import/data_exporter.js:150 #: frappe/public/js/frappe/form/controls/multicheck.js:167 #: frappe/public/js/frappe/form/controls/multiselect_list.js:6 -#: frappe/public/js/frappe/form/grid_row.js:497 -#: frappe/public/js/frappe/views/reports/report_view.js:1605 +#: frappe/public/js/frappe/form/grid_row.js:499 +#: frappe/public/js/frappe/views/reports/report_view.js:1606 msgid "Select All" msgstr "全选" -#: frappe/public/js/frappe/views/communication.js:168 -#: frappe/public/js/frappe/views/communication.js:592 +#: frappe/public/js/frappe/views/communication.js:202 +#: frappe/public/js/frappe/views/communication.js:653 #: frappe/public/js/frappe/views/interaction.js:93 #: frappe/public/js/frappe/views/interaction.js:155 msgid "Select Attachments" @@ -23350,7 +23553,7 @@ msgid "Select Column" msgstr "选择列" #: frappe/printing/page/print_format_builder/print_format_builder_field.html:42 -#: frappe/public/js/frappe/form/print_utils.js:73 +#: frappe/public/js/frappe/form/print_utils.js:74 msgid "Select Columns" msgstr "选择列" @@ -23394,13 +23597,13 @@ msgstr "选择单据类型" msgid "Select Document Type or Role to start." msgstr "请选择单据类型或角色。" -#: frappe/core/page/permission_manager/permission_manager_help.html:34 +#: frappe/core/page/permission_manager/permission_manager_help.html:101 msgid "Select Document Types to set which User Permissions are used to limit access." msgstr "选择用户权限限制单据类型。" #: frappe/public/js/form_builder/components/controls/FetchFromControl.vue:33 #: frappe/public/js/frappe/doctype/index.js:207 -#: frappe/public/js/frappe/form/toolbar.js:871 +#: frappe/public/js/frappe/form/toolbar.js:874 msgid "Select Field" msgstr "选择字段" @@ -23409,7 +23612,7 @@ msgstr "选择字段" msgid "Select Field..." msgstr "选择字段" -#: frappe/public/js/frappe/form/grid_row.js:489 +#: frappe/public/js/frappe/form/grid_row.js:491 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:181 msgid "Select Fields" msgstr "选择字段" @@ -23418,19 +23621,19 @@ msgstr "选择字段" msgid "Select Fields (Up to {0})" msgstr "选择字段(最多{0}个)" -#: frappe/public/js/frappe/data_import/data_exporter.js:147 +#: frappe/public/js/frappe/data_import/data_exporter.js:148 msgid "Select Fields To Insert" msgstr "选择字段" -#: frappe/public/js/frappe/data_import/data_exporter.js:148 +#: frappe/public/js/frappe/data_import/data_exporter.js:149 msgid "Select Fields To Update" msgstr "选择要更新的字段" -#: frappe/public/js/frappe/list/list_view.js:1994 +#: frappe/public/js/frappe/list/list_view.js:2002 msgid "Select Filters" msgstr "选择过滤条件" -#: frappe/desk/doctype/event/event.py:107 +#: frappe/desk/doctype/event/event.py:112 msgid "Select Google Calendar to which event should be synced." msgstr "选择要同步事件的Google日历。" @@ -23455,16 +23658,16 @@ msgstr "选择语言" msgid "Select List View" msgstr "选择列表视图" -#: frappe/public/js/frappe/data_import/data_exporter.js:158 +#: frappe/public/js/frappe/data_import/data_exporter.js:159 msgid "Select Mandatory" msgstr "选择必填字段" -#: frappe/custom/doctype/customize_form/customize_form.js:280 +#: frappe/custom/doctype/customize_form/customize_form.js:290 msgid "Select Module" msgstr "选择模块" -#: frappe/printing/page/print/print.js:189 -#: frappe/printing/page/print/print.js:644 +#: frappe/printing/page/print/print.js:197 +#: frappe/printing/page/print/print.js:652 msgid "Select Network Printer" msgstr "选择网络打印机" @@ -23474,7 +23677,7 @@ msgid "Select Page" msgstr "选择页面" #: frappe/printing/page/print_format_builder_beta/print_format_builder_beta.js:68 -#: frappe/public/js/frappe/views/communication.js:151 +#: frappe/public/js/frappe/views/communication.js:178 msgid "Select Print Format" msgstr "选择打印格式" @@ -23532,11 +23735,11 @@ msgstr "选择字段在此编辑属性" msgid "Select a group {0} first." msgstr "请先选择{0}组。" -#: frappe/core/doctype/doctype/doctype.py:1977 +#: frappe/core/doctype/doctype/doctype.py:2041 msgid "Select a valid Sender Field for creating documents from Email" msgstr "选择有效的发件人字段以从邮件创建文档" -#: frappe/core/doctype/doctype/doctype.py:1961 +#: frappe/core/doctype/doctype/doctype.py:2025 msgid "Select a valid Subject field for creating documents from Email" msgstr "选择有效的主旨字段以从邮件创建文档" @@ -23562,13 +23765,13 @@ msgstr "选择打印ATLEAST 1项纪录" msgid "Select atleast 2 actions" msgstr "选择至少2个操作" -#: frappe/public/js/frappe/list/list_view.js:1455 +#: frappe/public/js/frappe/list/list_view.js:1463 msgctxt "Description of a list view shortcut" msgid "Select list item" msgstr "选择列表项" -#: frappe/public/js/frappe/list/list_view.js:1407 -#: frappe/public/js/frappe/list/list_view.js:1423 +#: frappe/public/js/frappe/list/list_view.js:1415 +#: frappe/public/js/frappe/list/list_view.js:1431 msgctxt "Description of a list view shortcut" msgid "Select multiple list items" msgstr "选择多个列表项" @@ -23602,7 +23805,7 @@ msgstr "选择两个版本比较差异" msgid "Select {0}" msgstr "选择{0}" -#: frappe/model/workflow.py:120 +#: frappe/model/workflow.py:138 msgid "Self approval is not allowed" msgstr "不允许申请者自己批准" @@ -23632,6 +23835,11 @@ msgstr "发送后" msgid "Send Alert On" msgstr "通知发送时机" +#. Label of the raw_html (Check) field in DocType 'Email Queue' +#: frappe/email/doctype/email_queue/email_queue.json +msgid "Send As Raw HTML" +msgstr "" + #. Label of the send_email_alert (Check) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "Send Email Alert" @@ -23684,7 +23892,7 @@ msgstr "立即发送" msgid "Send Print as PDF" msgstr "使用PDF格式发送打印" -#: frappe/public/js/frappe/views/communication.js:141 +#: frappe/public/js/frappe/views/communication.js:168 msgid "Send Read Receipt" msgstr "发送阅读回执" @@ -23747,7 +23955,7 @@ msgstr "向此邮件地址发送询价" msgid "Send login link" msgstr "发送登录链接" -#: frappe/public/js/frappe/views/communication.js:135 +#: frappe/public/js/frappe/views/communication.js:162 msgid "Send me a copy" msgstr "抄送给自己" @@ -23786,7 +23994,7 @@ msgstr "发件人电子邮箱" msgid "Sender Email Field" msgstr "发件人邮箱字段" -#: frappe/core/doctype/doctype/doctype.py:1980 +#: frappe/core/doctype/doctype/doctype.py:2044 msgid "Sender Field should have Email in options" msgstr "发件人字段选项中应包含邮箱" @@ -23880,7 +24088,7 @@ msgstr "单据类型 {} 的编号模板已更新" msgid "Series counter for {} updated to {} successfully" msgstr "{}的序列计数器成功更新至{}" -#: frappe/core/doctype/doctype/doctype.py:1124 +#: frappe/core/doctype/doctype/doctype.py:1127 #: frappe/core/doctype/document_naming_settings/document_naming_settings.py:170 msgid "Series {0} already used in {1}" msgstr "单据编号模板{0}已经被{1}使用" @@ -23890,7 +24098,7 @@ msgstr "单据编号模板{0}已经被{1}使用" msgid "Server Action" msgstr "服务器操作" -#: frappe/app.py:399 frappe/public/js/frappe/request.js:611 +#: frappe/app.py:399 frappe/public/js/frappe/request.js:609 #: frappe/www/error.html:36 frappe/www/error.py:15 msgid "Server Error" msgstr "服务器错误" @@ -23917,11 +24125,15 @@ msgstr "服务器(python)脚本已禁用,可通过后台bench命令 bench set- msgid "Server Scripts feature is not available on this site." msgstr "此站点未启用服务器脚本功能" -#: frappe/public/js/frappe/request.js:254 +#: frappe/public/js/frappe/file_uploader/FileUploader.vue:641 +msgid "Server error during upload. The file might be corrupted." +msgstr "" + +#: frappe/public/js/frappe/request.js:252 msgid "Server failed to process this request because of a concurrent conflicting request. Please try again." msgstr "因并发请求冲突,服务器未能处理本请求。请稍后重试。" -#: frappe/public/js/frappe/request.js:246 +#: frappe/public/js/frappe/request.js:244 msgid "Server was too busy to process this request. Please try again." msgstr "服务器繁忙,请稍后重试" @@ -23949,16 +24161,14 @@ msgstr "会话默认值" msgid "Session Default Settings" msgstr "会话默认设置" -#. Label of a standard navbar item -#. Type: Action #. Label of the session_defaults (Table) field in DocType 'Session Default #. Settings' #: frappe/core/doctype/session_default_settings/session_default_settings.json -#: frappe/hooks.py frappe/public/js/frappe/ui/toolbar/toolbar.js:266 +#: frappe/public/js/frappe/ui/toolbar/toolbar.js:251 msgid "Session Defaults" msgstr "会话默认值" -#: frappe/public/js/frappe/ui/toolbar/toolbar.js:251 +#: frappe/public/js/frappe/ui/toolbar/toolbar.js:236 msgid "Session Defaults Saved" msgstr "会话默认值已保存" @@ -23999,7 +24209,7 @@ msgstr "设置" msgid "Set Banner from Image" msgstr "从图像设置横幅" -#: frappe/public/js/frappe/views/reports/query_report.js:200 +#: frappe/public/js/frappe/views/reports/query_report.js:201 msgid "Set Chart" msgstr "设置图表" @@ -24025,7 +24235,7 @@ msgstr "设置过滤条件" msgid "Set Filters for {0}" msgstr "为{0}设置过滤器" -#: frappe/public/js/frappe/views/reports/query_report.js:2143 +#: frappe/public/js/frappe/views/reports/query_report.js:2199 msgid "Set Level" msgstr "设置层级" @@ -24068,8 +24278,8 @@ msgstr "设置属性" msgid "Set Property After Alert" msgstr "发送通知后变更字段值" -#: frappe/public/js/frappe/form/link_selector.js:207 -#: frappe/public/js/frappe/form/link_selector.js:208 +#: frappe/public/js/frappe/form/link_selector.js:216 +#: frappe/public/js/frappe/form/link_selector.js:217 msgid "Set Quantity" msgstr "设置数量" @@ -24089,12 +24299,12 @@ msgstr "设置用户权限限制" msgid "Set Value" msgstr "设定值" -#: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:96 -#: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:155 +#: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:103 +#: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:162 msgid "Set all private" msgstr "设为私有" -#: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:96 +#: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:103 msgid "Set all public" msgstr "设为公共" @@ -24222,8 +24432,8 @@ msgstr "设置您的系统" #: frappe/core/doctype/doctype/doctype.json frappe/core/doctype/user/user.json #: frappe/integrations/workspace/integrations/integrations.json #: frappe/public/js/frappe/form/templates/print_layout.html:25 -#: frappe/public/js/frappe/ui/toolbar/toolbar.js:224 -#: frappe/public/js/frappe/views/workspace/workspace.js:376 +#: frappe/public/js/frappe/ui/toolbar/toolbar.js:209 +#: frappe/public/js/frappe/views/workspace/workspace.js:424 #: frappe/website/doctype/web_form/web_form.json #: frappe/website/doctype/web_page/web_page.json frappe/www/me.html:20 msgid "Settings" @@ -24246,11 +24456,11 @@ msgstr "关于我们页面的设置" #. Option for the 'Show in Module Section' (Select) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:611 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:581 msgid "Setup" msgstr "设置" -#: frappe/core/page/permission_manager/permission_manager_help.html:27 +#: frappe/core/page/permission_manager/permission_manager_help.html:94 msgid "Setup > Customize Form" msgstr "设置 > 自定义表单" @@ -24258,12 +24468,12 @@ msgstr "设置 > 自定义表单" msgid "Setup > User" msgstr "设置 > 用户" -#: frappe/core/page/permission_manager/permission_manager_help.html:33 +#: frappe/core/page/permission_manager/permission_manager_help.html:100 msgid "Setup > User Permissions" msgstr "设置 > 用户权限" -#: frappe/public/js/frappe/views/reports/query_report.js:1856 -#: frappe/public/js/frappe/views/reports/report_view.js:1717 +#: frappe/public/js/frappe/views/reports/query_report.js:1905 +#: frappe/public/js/frappe/views/reports/report_view.js:1718 msgid "Setup Auto Email" msgstr "设置电子邮件自动发送" @@ -24292,13 +24502,14 @@ msgstr "始始化失败" #: frappe/core/doctype/docperm/docperm.json #: frappe/core/doctype/docshare/docshare.json #: frappe/core/doctype/user_document_type/user_document_type.json +#: frappe/core/page/permission_manager/permission_manager_help.html:76 #: frappe/desk/doctype/notification_log/notification_log.json -#: frappe/public/js/frappe/form/templates/form_sidebar.html:112 +#: frappe/public/js/frappe/form/templates/form_sidebar.html:133 #: frappe/public/js/frappe/form/templates/set_sharing.html:5 msgid "Share" msgstr "分享" -#: frappe/public/js/frappe/form/sidebar/share.js:108 +#: frappe/public/js/frappe/form/sidebar/share.js:114 msgid "Share With" msgstr "分享" @@ -24306,7 +24517,7 @@ msgstr "分享" msgid "Share this document with" msgstr "分享给" -#: frappe/public/js/frappe/form/sidebar/share.js:45 +#: frappe/public/js/frappe/form/sidebar/share.js:51 msgid "Share {0} with" msgstr "分享给{0}" @@ -24366,16 +24577,10 @@ msgstr "在时间轴中显示绝对日期时间" msgid "Show Absolute Values" msgstr "显示绝对值" -#: frappe/public/js/frappe/form/templates/form_sidebar.html:93 +#: frappe/public/js/frappe/form/templates/form_sidebar.html:114 msgid "Show All" msgstr "显示全部" -#. Label of the show_app_icons_as_folder (Check) field in DocType 'Desktop -#. Settings' -#: frappe/desk/doctype/desktop_settings/desktop_settings.json -msgid "Show App Icons As Folder" -msgstr "" - #. Label of the show_arrow (Check) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Show Arrow" @@ -24421,7 +24626,7 @@ msgstr "显示错误" msgid "Show External Link Warning" msgstr "显示外部链接警告" -#: frappe/public/js/frappe/form/layout.js:603 +#: frappe/public/js/frappe/form/layout.js:597 msgid "Show Fieldname (click to copy on clipboard)" msgstr "显示字段名(点击复制到剪贴板)" @@ -24473,7 +24678,7 @@ msgstr "显示语言选择框" msgid "Show Line Breaks after Sections" msgstr "章节后,显示换行符" -#: frappe/public/js/frappe/form/toolbar.js:443 +#: frappe/public/js/frappe/form/toolbar.js:433 msgid "Show Links" msgstr "显示链接" @@ -24593,7 +24798,7 @@ msgstr "显示周末" msgid "Show account deletion link in My Account page" msgstr "在我的账号页显示帐号删除链接" -#: frappe/core/doctype/version/version.js:6 +#: frappe/core/doctype/version/version.js:3 msgid "Show all Versions" msgstr "显示所有版本" @@ -24735,7 +24940,7 @@ msgstr "退出登录" msgid "Sign Up and Confirmation" msgstr "注册与确认" -#: frappe/core/doctype/user/user.py:1076 +#: frappe/core/doctype/user/user.py:1079 msgid "Sign Up is disabled" msgstr "禁止注册" @@ -24858,7 +25063,7 @@ msgstr "跳过未命名列" msgid "Skipping column {0}" msgstr "跳过列{0}" -#: frappe/modules/utils.py:179 +#: frappe/modules/utils.py:219 msgid "Skipping fixture syncing for doctype {0} from file {1}" msgstr "跳过从文件{1}同步文档类型{0}的夹具" @@ -25033,15 +25238,15 @@ msgstr "出了些问题" msgid "Something went wrong during the token generation. Click on {0} to generate a new one." msgstr "在令牌生成期间出了点问题。单击{0}以生成新的。" -#: frappe/templates/includes/login/login.js:293 +#: frappe/templates/includes/login/login.js:292 msgid "Something went wrong." msgstr "出现错误" -#: frappe/public/js/frappe/views/pageview.js:122 +#: frappe/public/js/frappe/views/pageview.js:127 msgid "Sorry! I could not find what you were looking for." msgstr "抱歉,无法找你要的信息。" -#: frappe/public/js/frappe/views/pageview.js:130 +#: frappe/public/js/frappe/views/pageview.js:135 msgid "Sorry! You are not permitted to view this page." msgstr "抱歉,你不允许查看此页面。" @@ -25072,13 +25277,13 @@ msgstr "按选项值排序" msgid "Sort Order" msgstr "排序" -#: frappe/core/doctype/doctype/doctype.py:1565 +#: frappe/core/doctype/doctype/doctype.py:1579 msgid "Sort field {0} must be a valid fieldname" msgstr "排序字段{0}必须是有效的字段名" #. Label of the source (Data) field in DocType 'Web Page View' #. Label of the source (Small Text) field in DocType 'Website Route Redirect' -#: frappe/public/js/frappe/utils/utils.js:1872 +#: frappe/public/js/frappe/utils/utils.js:2003 #: frappe/website/doctype/web_page_view/web_page_view.json #: frappe/website/doctype/website_route_redirect/website_route_redirect.json #: frappe/website/report/website_analytics/website_analytics.js:38 @@ -25127,7 +25332,7 @@ msgstr "在后台任务中生成操作" msgid "Special Characters are not allowed" msgstr "不能使用特殊字符" -#: frappe/model/naming.py:68 +#: frappe/model/naming.py:66 msgid "Special Characters except '-', '#', '.', '/', '{{' and '}}' not allowed in naming series {0}" msgstr "命名序列{0}中不允许使用除'-'、'#'、'.'、'/'、'{{'和'}}'外的特殊字符" @@ -25166,6 +25371,7 @@ msgstr "调用栈" #. Label of the standard (Select) field in DocType 'Page' #. Label of the standard (Check) field in DocType 'Desktop Icon' +#. Label of the standard (Check) field in DocType 'Workspace Sidebar' #. Label of the standard (Select) field in DocType 'Print Format' #. Label of the standard (Check) field in DocType 'Print Format Field Template' #. Label of the standard (Check) field in DocType 'Print Style' @@ -25173,6 +25379,7 @@ msgstr "调用栈" #: frappe/core/doctype/page/page.json #: frappe/core/doctype/user_type/user_type_list.js:5 #: frappe/desk/doctype/desktop_icon/desktop_icon.json +#: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json #: frappe/printing/doctype/print_format/print_format.json #: frappe/printing/doctype/print_format_field_template/print_format_field_template.json #: frappe/printing/doctype/print_style/print_style.json @@ -25240,8 +25447,8 @@ msgstr "标准用户类型{0}不可删除" #: frappe/core/doctype/recorder/recorder_list.js:87 #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.py:45 -#: frappe/printing/page/print/print.js:328 -#: frappe/printing/page/print/print.js:375 +#: frappe/printing/page/print/print.js:336 +#: frappe/printing/page/print/print.js:383 msgid "Start" msgstr "开始" @@ -25413,7 +25620,7 @@ msgstr "频率" #: frappe/integrations/doctype/integration_request/integration_request.json #: frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json #: frappe/public/js/frappe/list/list_settings.js:357 -#: frappe/public/js/frappe/list/list_view.js:2415 +#: frappe/public/js/frappe/list/list_view.js:2443 #: frappe/public/js/frappe/views/reports/report_view.js:974 #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.json #: frappe/website/doctype/personal_data_deletion_step/personal_data_deletion_step.json @@ -25451,7 +25658,7 @@ msgstr "验证您的登录的步骤" #. Label of the sticky (Check) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json -#: frappe/public/js/frappe/form/grid_row.js:454 +#: frappe/public/js/frappe/form/grid_row.js:456 msgid "Sticky" msgstr "置顶" @@ -25565,7 +25772,7 @@ msgstr "子域名" #: frappe/email/doctype/email_template/email_template.json #: frappe/email/doctype/notification/notification.js:214 #: frappe/email/doctype/notification/notification.json -#: frappe/public/js/frappe/views/communication.js:110 +#: frappe/public/js/frappe/views/communication.js:128 #: frappe/public/js/frappe/views/inbox/inbox_view.js:63 msgid "Subject" msgstr "主题" @@ -25579,7 +25786,7 @@ msgstr "主题" msgid "Subject Field" msgstr "主题字段" -#: frappe/core/doctype/doctype/doctype.py:1970 +#: frappe/core/doctype/doctype/doctype.py:2034 msgid "Subject Field type should be Data, Text, Long Text, Small Text, Text Editor" msgstr "主题字段类型应为数据、文本、长文本、短文本或文本编辑器" @@ -25600,14 +25807,14 @@ msgstr "提交队列" #: frappe/core/doctype/user_document_type/user_document_type.json #: frappe/core/doctype/user_permission/user_permission_list.js:138 #: frappe/email/doctype/notification/notification.json -#: frappe/public/js/frappe/form/quick_entry.js:225 +#: frappe/public/js/frappe/form/quick_entry.js:268 #: frappe/public/js/frappe/form/templates/set_sharing.html:4 -#: frappe/public/js/frappe/ui/capture.js:307 +#: frappe/public/js/frappe/ui/capture.js:308 #: frappe/website/web_form/request_to_delete_data/request_to_delete_data.json msgid "Submit" msgstr "提交" -#: frappe/public/js/frappe/list/list_view.js:2310 +#: frappe/public/js/frappe/list/list_view.js:2318 msgctxt "Button in list view actions menu" msgid "Submit" msgstr "提交" @@ -25637,7 +25844,7 @@ msgstr "提交" msgid "Submit After Import" msgstr "将上传单据状态设为已提交" -#: frappe/core/page/permission_manager/permission_manager_help.html:39 +#: frappe/core/page/permission_manager/permission_manager_help.html:106 msgid "Submit an Issue" msgstr "提交问题" @@ -25661,11 +25868,11 @@ msgstr "创建时提交" msgid "Submit this document to complete this step." msgstr "提交此文档以完成此步骤" -#: frappe/public/js/frappe/form/form.js:1233 +#: frappe/public/js/frappe/form/form.js:1262 msgid "Submit this document to confirm" msgstr "点提交按钮进行确认" -#: frappe/public/js/frappe/list/list_view.js:2315 +#: frappe/public/js/frappe/list/list_view.js:2323 msgctxt "Title of confirmation dialog" msgid "Submit {0} documents?" msgstr "是否提交{0}个文档?" @@ -25691,7 +25898,7 @@ msgctxt "Freeze message while submitting a document" msgid "Submitting" msgstr "提交中" -#: frappe/desk/doctype/bulk_update/bulk_update.py:88 +#: frappe/desk/doctype/bulk_update/bulk_update.py:89 msgid "Submitting {0}" msgstr "正在提交{0}" @@ -25726,12 +25933,12 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/desk/doctype/bulk_update/bulk_update.js:31 -#: frappe/public/js/frappe/form/grid.js:1193 +#: frappe/public/js/frappe/form/grid.js:1230 #: frappe/public/js/frappe/views/translation_manager.js:21 -#: frappe/templates/includes/login/login.js:230 -#: frappe/templates/includes/login/login.js:236 -#: frappe/templates/includes/login/login.js:269 -#: frappe/templates/includes/login/login.js:277 +#: frappe/templates/includes/login/login.js:228 +#: frappe/templates/includes/login/login.js:234 +#: frappe/templates/includes/login/login.js:267 +#: frappe/templates/includes/login/login.js:275 #: frappe/templates/pages/integrations/gcalendar-success.html:9 #: frappe/workflow/doctype/workflow_action/workflow_action.py:171 #: frappe/workflow/doctype/workflow_state/workflow_state.json @@ -25773,7 +25980,7 @@ msgstr "成功标题" msgid "Successful Job Count" msgstr "成功任务数量" -#: frappe/model/workflow.py:363 +#: frappe/model/workflow.py:384 msgid "Successful Transactions" msgstr "成功事务" @@ -25798,7 +26005,7 @@ msgstr "成功导入{1}条记录中的{0}条。" msgid "Successfully reset onboarding status for all users." msgstr "已成功重置所有用户的入职状态。" -#: frappe/core/doctype/user/user.py:1478 +#: frappe/core/doctype/user/user.py:1481 msgid "Successfully signed out" msgstr "已成功退出登录" @@ -25823,7 +26030,7 @@ msgstr "建议优化" msgid "Suggested Indexes" msgstr "建议索引" -#: frappe/core/doctype/user/user.py:771 +#: frappe/core/doctype/user/user.py:774 msgid "Suggested Username: {0}" msgstr "建议用户名:{0}" @@ -25864,7 +26071,7 @@ msgstr "星期天" msgid "Suspend Sending" msgstr "暂停发送" -#: frappe/public/js/frappe/ui/capture.js:276 +#: frappe/public/js/frappe/ui/capture.js:277 msgid "Switch Camera" msgstr "切换摄像头" @@ -25877,7 +26084,7 @@ msgstr "切换主题" msgid "Switch To Desk" msgstr "切换到主页(桌面)" -#: frappe/public/js/frappe/ui/capture.js:281 +#: frappe/public/js/frappe/ui/capture.js:282 msgid "Switching Camera" msgstr "正在切换摄像头" @@ -25946,9 +26153,7 @@ msgid "Syntax Error" msgstr "语法错误" #. Option for the 'Show in Module Section' (Select) field in DocType 'DocType' -#. Name of a Workspace #: frappe/core/doctype/doctype/doctype.json -#: frappe/core/workspace/system/system.json msgid "System" msgstr "系统" @@ -25958,7 +26163,7 @@ msgstr "系统" msgid "System Console" msgstr "系统控制台" -#: frappe/custom/doctype/custom_field/custom_field.py:409 +#: frappe/custom/doctype/custom_field/custom_field.py:410 msgid "System Generated Fields can not be renamed" msgstr "系统生成字段不可重命名" @@ -26085,6 +26290,7 @@ msgstr "系统日志" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/desk/doctype/dashboard_chart_source/dashboard_chart_source.json #: frappe/desk/doctype/desktop_icon/desktop_icon.json +#: frappe/desk/doctype/desktop_layout/desktop_layout.json #: frappe/desk/doctype/desktop_settings/desktop_settings.json #: frappe/desk/doctype/event/event.json #: frappe/desk/doctype/form_tour/form_tour.json @@ -26175,6 +26381,11 @@ msgstr "系统页面" msgid "System Settings" msgstr "系统设置" +#. Label of a number card in the Users Workspace +#: frappe/core/workspace/users/users.json +msgid "System Users" +msgstr "" + #. Description of the 'Allow Roles' (Table MultiSelect) field in DocType #. 'Module Onboarding' #: frappe/desk/doctype/module_onboarding/module_onboarding.json @@ -26191,6 +26402,12 @@ msgstr "T" msgid "TOS URI" msgstr "服务条款URI" +#. Label of the navigate_to_tab (Autocomplete) field in DocType 'Workspace +#. Sidebar Item' +#: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json +msgid "Tab" +msgstr "" + #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' #. Option for the 'Type' (Select) field in DocType 'Customize Form Field' @@ -26226,7 +26443,7 @@ msgstr "表" msgid "Table Break" msgstr "表格分页符" -#: frappe/core/doctype/version/version_view.html:73 +#: frappe/core/doctype/version/version_view.html:136 msgid "Table Field" msgstr "表字段" @@ -26235,7 +26452,7 @@ msgstr "表字段" msgid "Table Fieldname" msgstr "表字段名" -#: frappe/core/doctype/doctype/doctype.py:1218 +#: frappe/core/doctype/doctype/doctype.py:1221 msgid "Table Fieldname Missing" msgstr "缺失表格字段名" @@ -26253,7 +26470,7 @@ msgstr "表HTML" msgid "Table MultiSelect" msgstr "表-多选" -#: frappe/desk/search.py:271 +#: frappe/desk/search.py:278 msgid "Table MultiSelect requires a table with at least one Link field, but none was found in {0}" msgstr "" @@ -26261,11 +26478,11 @@ msgstr "" msgid "Table Trimmed" msgstr "表格已截断" -#: frappe/public/js/frappe/form/grid.js:1192 +#: frappe/public/js/frappe/form/grid.js:1229 msgid "Table updated" msgstr "表更新" -#: frappe/model/document.py:1627 +#: frappe/model/document.py:1626 msgid "Table {0} cannot be empty" msgstr "表{0}不能为空" @@ -26285,17 +26502,17 @@ msgid "Tag Link" msgstr "标签链接" #: frappe/model/meta.py:59 -#: frappe/public/js/frappe/form/templates/form_sidebar.html:102 +#: frappe/public/js/frappe/form/templates/form_sidebar.html:123 #: frappe/public/js/frappe/list/base_list.js:813 #: frappe/public/js/frappe/list/base_list.js:996 -#: frappe/public/js/frappe/list/bulk_operations.js:430 +#: frappe/public/js/frappe/list/bulk_operations.js:444 #: frappe/public/js/frappe/model/meta.js:215 #: frappe/public/js/frappe/model/model.js:133 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:233 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:240 msgid "Tags" msgstr "标签" -#: frappe/public/js/frappe/ui/capture.js:220 +#: frappe/public/js/frappe/ui/capture.js:221 msgid "Take Photo" msgstr "拍照" @@ -26379,7 +26596,7 @@ msgstr "模板警告" msgid "Templates" msgstr "模板" -#: frappe/core/doctype/user/user.py:1089 +#: frappe/core/doctype/user/user.py:1092 msgid "Temporarily Disabled" msgstr "暂时禁用" @@ -26477,7 +26694,7 @@ msgstr "谢谢" msgid "The Auto Repeat for this document has been disabled." msgstr "此文档的自动重复功能已禁用。" -#: frappe/public/js/frappe/form/grid.js:1215 +#: frappe/public/js/frappe/form/grid.js:1252 msgid "The CSV format is case sensitive" msgstr "CSV格式区分大小写" @@ -26533,7 +26750,7 @@ msgstr "从\n" "\"API & Services\" > \"Credentials\"\n" "下的 Google Cloud Console 获取的浏览器 API 密钥" -#: frappe/database/database.py:475 +#: frappe/database/database.py:481 msgid "The changes have been reverted." msgstr "更改已还原。" @@ -26549,7 +26766,7 @@ msgstr "评论内容不能为空" msgid "The contents of this email are strictly confidential. Please do not forward this email to anyone." msgstr "此邮件内容严格保密。请勿转发给任何人。" -#: frappe/public/js/frappe/list/list_view.js:688 +#: frappe/public/js/frappe/list/list_view.js:691 msgid "The count shown is an estimated count. Click here to see the accurate count." msgstr "显示数量为估算值。点击此处查看精确数量。" @@ -26575,11 +26792,15 @@ msgstr "该单据已分派给{0}" msgid "The document type selected is a child table, so the parent document type is required." msgstr "所选文档类型为子表,需指定父文档类型。" -#: frappe/desk/search.py:284 +#: frappe/core/page/permission_manager/permission_manager_help.html:58 +msgid "The email button is enabled for the user in the document." +msgstr "" + +#: frappe/desk/search.py:291 msgid "The field {0} in {1} does not allow ignoring user permissions" msgstr "" -#: frappe/desk/search.py:294 +#: frappe/desk/search.py:301 msgid "The field {0} in {1} links to {2} and not {3}" msgstr "" @@ -26646,6 +26867,10 @@ msgstr "请求逾期时间(秒)" msgid "The password of your account has expired." msgstr "您账户的密码已过期。" +#: frappe/core/page/permission_manager/permission_manager_help.html:53 +msgid "The print button is enabled for the user in the document." +msgstr "" + #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.py:398 msgid "The process for deletion of {0} data associated with {1} has been initiated." msgstr "删除与{1}关联的{0}数据的过程已启动。" @@ -26663,15 +26888,15 @@ msgstr "从\n" msgid "The report you requested has been generated.

Click here to download:
{0}

This link will expire in {1} hours." msgstr "您请求的报告已生成。

点击此处下载:
{0}

此链接将在{1}小时后过期。" -#: frappe/core/doctype/user/user.py:1047 +#: frappe/core/doctype/user/user.py:1050 msgid "The reset password link has been expired" msgstr "重置密码链接已过期" -#: frappe/core/doctype/user/user.py:1049 +#: frappe/core/doctype/user/user.py:1052 msgid "The reset password link has either been used before or is invalid" msgstr "重置密码链接已被使用或无效" -#: frappe/app.py:391 frappe/public/js/frappe/request.js:149 +#: frappe/app.py:391 frappe/public/js/frappe/request.js:147 msgid "The resource you are looking for is not available" msgstr "您正在查找的资源不可用" @@ -26683,7 +26908,7 @@ msgstr "角色{0}应为自定义角色。" msgid "The selected document {0} is not a {1}." msgstr "所选文档{0}不是{1}类型。" -#: frappe/utils/response.py:338 +#: frappe/utils/response.py:343 msgid "The system is being updated. Please refresh again after a few moments." msgstr "系统正在更新。请稍后刷新页面。" @@ -26695,6 +26920,42 @@ msgstr "本系统提供了许多预定义角色。您可以添加新角色设定 msgid "The total number of user document types limit has been crossed." msgstr "已超过用户文档类型总数限制。" +#: frappe/core/page/permission_manager/permission_manager_help.html:43 +msgid "The user can create a new Item but cannot edit existing items." +msgstr "" + +#: frappe/core/page/permission_manager/permission_manager_help.html:48 +msgid "The user can delete Draft / Cancelled documents." +msgstr "" + +#: frappe/core/page/permission_manager/permission_manager_help.html:68 +msgid "The user can export report data." +msgstr "" + +#: frappe/core/page/permission_manager/permission_manager_help.html:73 +msgid "The user can import new records or update existing data for the document." +msgstr "" + +#: frappe/core/page/permission_manager/permission_manager_help.html:28 +msgid "The user can select a Customer in Sales Order but cannot open the Customer master." +msgstr "" + +#: frappe/core/page/permission_manager/permission_manager_help.html:78 +msgid "The user can share document access with another user." +msgstr "" + +#: frappe/core/page/permission_manager/permission_manager_help.html:38 +msgid "The user can update a customer or any other fields in an existing Sales Order but cannot create a new Sales Order." +msgstr "" + +#: frappe/core/page/permission_manager/permission_manager_help.html:33 +msgid "The user can view Sales Invoices but cannot modify any field values in them." +msgstr "" + +#: frappe/model/base_document.py:817 +msgid "The value of the field {0} is too long in the {1} document. To resolve this issue, please reduce the value length or change the {0} field Type to Long Text using customize form, and then try again." +msgstr "" + #: frappe/public/js/frappe/form/controls/data.js:25 msgid "The value you pasted was {0} characters long. Max allowed characters is {1}." msgstr "您粘贴的值长度为{0}个字符。最大允许字符数为{1}。" @@ -26736,7 +26997,7 @@ msgstr "主题网址" msgid "There are documents which have workflow states that do not exist in this Workflow. It is recommended that you add these states to the Workflow and change their states before removing these states." msgstr "存在文档的工作流状态未包含在此工作流中。建议在移除前将这些状态添加至工作流并修改文档状态。" -#: frappe/public/js/frappe/ui/notifications/notifications.js:473 +#: frappe/public/js/frappe/ui/notifications/notifications.js:482 msgid "There are no upcoming events for you." msgstr "你没有待处理事项" @@ -26744,7 +27005,7 @@ msgstr "你没有待处理事项" msgid "There are no {0} for this {1}, why don't you start one!" msgstr "此{1}无{0},何不创建一个!" -#: frappe/public/js/frappe/views/reports/query_report.js:976 +#: frappe/public/js/frappe/views/reports/query_report.js:993 msgid "There are {0} with the same filters already in the queue:" msgstr "队列中已有{0}条相同筛选条件的记录:" @@ -26753,7 +27014,7 @@ msgstr "队列中已有{0}条相同筛选条件的记录:" msgid "There can be only 9 Page Break fields in a Web Form" msgstr "网页表单最多允许9个分页符字段" -#: frappe/core/doctype/doctype/doctype.py:1458 +#: frappe/core/doctype/doctype/doctype.py:1472 msgid "There can be only one Fold in a form" msgstr "一个表单只能有一个折叠" @@ -26765,11 +27026,11 @@ msgstr "地址模板有一个错误{0}" msgid "There is no data to be exported" msgstr "没有可导出的数据" -#: frappe/model/workflow.py:170 +#: frappe/model/workflow.py:191 msgid "There is no task called \"{}\"" msgstr "不存在名为\"{}\"的任务" -#: frappe/public/js/frappe/ui/notifications/notifications.js:523 +#: frappe/public/js/frappe/ui/notifications/notifications.js:532 msgid "There is nothing new to show you right now." msgstr "暂无可显示新消息" @@ -26777,7 +27038,7 @@ msgstr "暂无可显示新消息" msgid "There is some problem with the file url: {0}" msgstr "有一些问题与文件的URL:{0}" -#: frappe/public/js/frappe/views/reports/query_report.js:973 +#: frappe/public/js/frappe/views/reports/query_report.js:990 msgid "There is {0} with the same filters already in the queue:" msgstr "队列中已有{0}条相同筛选条件的记录:" @@ -26793,7 +27054,7 @@ msgstr "构建此页面时出错" msgid "There was an error saving filters" msgstr "保存过滤条件时出错" -#: frappe/public/js/frappe/form/sidebar/attachments.js:237 +#: frappe/public/js/frappe/form/sidebar/attachments.js:216 msgid "There were errors" msgstr "出错了" @@ -26801,11 +27062,11 @@ msgstr "出错了" msgid "There were errors while creating the document. Please try again." msgstr "创建单据时出错。请再试一次。" -#: frappe/public/js/frappe/views/communication.js:834 +#: frappe/public/js/frappe/views/communication.js:903 msgid "There were errors while sending email. Please try again." msgstr "邮件发送失败,请重试。" -#: frappe/model/naming.py:502 +#: frappe/model/naming.py:500 msgid "There were some errors setting the name, please contact the administrator" msgstr "设置名称时出现错误,请与管理员联系" @@ -26874,11 +27135,11 @@ msgstr "本年" msgid "This action is irreversible. Do you wish to continue?" msgstr "此操作不可逆。是否继续?" -#: frappe/__init__.py:545 +#: frappe/__init__.py:543 msgid "This action is only allowed for {}" msgstr "此操作仅允许{}执行" -#: frappe/public/js/frappe/form/toolbar.js:128 +#: frappe/public/js/frappe/form/toolbar.js:127 #: frappe/public/js/frappe/model/model.js:706 msgid "This cannot be undone" msgstr "不可撤销" @@ -26902,7 +27163,7 @@ msgstr "如勾选,所有用户可查看此统计图表" msgid "This doctype has no orphan fields to trim" msgstr "此文档类型无孤立字段需清理" -#: frappe/core/doctype/doctype/doctype.py:1069 +#: frappe/core/doctype/doctype/doctype.py:1072 msgid "This doctype has pending migrations, run 'bench migrate' before modifying the doctype to avoid losing changes." msgstr "此文档类型有待执行迁移,修改前请运行'bench migrate'以避免丢失更改。" @@ -26918,15 +27179,15 @@ msgstr "本文档已加入提交队列。您可通过{0}跟踪进度。" msgid "This document has been modified after the email was sent." msgstr "发电子邮件后,此单据已被修改。" -#: frappe/public/js/frappe/form/form.js:1317 +#: frappe/public/js/frappe/form/form.js:1346 msgid "This document has unsaved changes which might not appear in final PDF.
Consider saving the document before printing." msgstr "此文档存在未保存更改,可能不会反映在最终PDF中。
打印前请先保存文档。" -#: frappe/public/js/frappe/form/form.js:1105 +#: frappe/public/js/frappe/form/form.js:1134 msgid "This document is already amended, you cannot ammend it again" msgstr "此文档已修订,不可再次修订" -#: frappe/model/document.py:509 +#: frappe/model/document.py:508 msgid "This document is currently locked and queued for execution. Please try again after some time." msgstr "单据被后台待执行操作锁定,请稍后再试。" @@ -26940,7 +27201,7 @@ msgid "This feature can not be used as dependencies are missing.\n" msgstr "由于缺少依赖项,该功能无法使用。\n" "\t\t\t\t请联系系统管理员,通过安装 pycups 来启用此功能!" -#: frappe/public/js/frappe/form/templates/form_sidebar.html:41 +#: frappe/public/js/frappe/form/templates/form_sidebar.html:65 msgid "This feature is brand new and still experimental" msgstr "此功能是全新的,仍处于试验阶段" @@ -26968,11 +27229,11 @@ msgstr "本文件为公开文件,无需登录即可访问。请设为私有以 msgid "This file is public. It can be accessed without authentication." msgstr "此为公开文件,用户无需登录即可访问" -#: frappe/public/js/frappe/form/form.js:1211 +#: frappe/public/js/frappe/form/form.js:1240 msgid "This form has been modified after you have loaded it" msgstr "重新加载后表单就已被修改," -#: frappe/public/js/frappe/form/form.js:2275 +#: frappe/public/js/frappe/form/form.js:2306 msgid "This form is not editable due to a Workflow." msgstr "此表单因工作流状态不能被编辑。" @@ -26991,7 +27252,7 @@ msgstr "暂不支持此地理位置服务提供商。" msgid "This goes above the slideshow." msgstr "在幻灯片上面。" -#: frappe/public/js/frappe/views/reports/query_report.js:2219 +#: frappe/public/js/frappe/views/reports/query_report.js:2280 msgid "This is a background report. Please set the appropriate filters and then generate a new one." msgstr "此报表是后台运行报表,请设置恰当的过滤条件并点击右上角生成新报表按钮获取报表结果" @@ -27033,15 +27294,15 @@ msgstr "此链接已激活以进行验证。" msgid "This link is invalid or expired. Please make sure you have pasted correctly." msgstr "此链接是无效或过期。请确保你已经正确粘贴。" -#: frappe/printing/page/print/print.js:450 +#: frappe/printing/page/print/print.js:458 msgid "This may get printed on multiple pages" msgstr "可能会打印多页" -#: frappe/utils/goal.py:121 +#: frappe/utils/goal.py:120 msgid "This month" msgstr "这个月" -#: frappe/public/js/frappe/views/reports/query_report.js:1052 +#: frappe/public/js/frappe/views/reports/query_report.js:1069 msgid "This report contains {0} rows and is too big to display in browser, you can {1} this report instead." msgstr "此报告包含{0}行数据,浏览器显示过大,建议{1}此报告。" @@ -27049,7 +27310,7 @@ msgstr "此报告包含{0}行数据,浏览器显示过大,建议{1}此报告 msgid "This report was generated on {0}" msgstr "此报表是在{0}上生成的" -#: frappe/public/js/frappe/views/reports/query_report.js:864 +#: frappe/public/js/frappe/views/reports/query_report.js:881 msgid "This report was generated {0}." msgstr "报表{0}已生成。" @@ -27073,7 +27334,7 @@ msgstr "本软件基于众多开源软件包构建。" msgid "This title will be used as the title of the webpage as well as in meta tags" msgstr "此标题将作为网页标题及元标签内容" -#: frappe/public/js/frappe/form/controls/base_input.js:129 +#: frappe/public/js/frappe/form/controls/base_input.js:141 msgid "This value is fetched from {0}'s {1} field" msgstr "此值取自{0}的{1}字段" @@ -27117,7 +27378,7 @@ msgstr "将重置此导览并向所有用户显示。是否继续?" msgid "This will terminate the job immediately and might be dangerous, are you sure?" msgstr "此操作将立即终止任务且可能存在风险,是否确认继续?" -#: frappe/core/doctype/user/user.py:1322 +#: frappe/core/doctype/user/user.py:1325 msgid "Throttled" msgstr "节流" @@ -27148,6 +27409,7 @@ msgstr "星期四" #. Option for the 'Fieldtype' (Select) field in DocType 'Report Filter' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' #. Option for the 'Type' (Select) field in DocType 'Customize Form Field' +#. Label of the time (Time) field in DocType 'Event Notifications' #. Option for the 'Fieldtype' (Select) field in DocType 'Web Form Field' #: frappe/core/doctype/docfield/docfield.json #: frappe/core/doctype/recorder/recorder.json @@ -27155,6 +27417,7 @@ msgstr "星期四" #: frappe/core/doctype/report_filter/report_filter.json #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json +#: frappe/desk/doctype/event_notifications/event_notifications.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Time" msgstr "时间" @@ -27237,11 +27500,6 @@ msgstr "时间{0}必须符合格式:{1}" msgid "Timed Out" msgstr "超时" -#. Option for the 'Navbar Style' (Select) field in DocType 'Desktop Settings' -#: frappe/desk/doctype/desktop_settings/desktop_settings.json -msgid "Timeless Launchpad" -msgstr "" - #: frappe/public/js/frappe/ui/theme_switcher.js:64 msgid "Timeless Night" msgstr "永恒之夜主题" @@ -27273,11 +27531,11 @@ msgstr "时间线链接" msgid "Timeline Name" msgstr "时间线名称" -#: frappe/core/doctype/doctype/doctype.py:1553 +#: frappe/core/doctype/doctype/doctype.py:1567 msgid "Timeline field must be a Link or Dynamic Link" msgstr "时间线字段必须是一个链接或动态链接" -#: frappe/core/doctype/doctype/doctype.py:1549 +#: frappe/core/doctype/doctype/doctype.py:1563 msgid "Timeline field must be a valid fieldname" msgstr "时间线字段必须是有效的字段名" @@ -27348,7 +27606,7 @@ msgstr "提示:尝试使用新的下拉控制台" #: frappe/desk/doctype/workspace/workspace.json #: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json #: frappe/email/doctype/email_group/email_group.json -#: frappe/public/js/frappe/views/workspace/workspace.js:407 +#: frappe/public/js/frappe/views/workspace/workspace.js:455 #: frappe/website/doctype/discussion_topic/discussion_topic.json #: frappe/website/doctype/help_article/help_article.json #: frappe/website/doctype/portal_menu_item/portal_menu_item.json @@ -27371,7 +27629,7 @@ msgstr "标题字段" msgid "Title Prefix" msgstr "标题前缀" -#: frappe/core/doctype/doctype/doctype.py:1490 +#: frappe/core/doctype/doctype/doctype.py:1504 msgid "Title field must be a valid fieldname" msgstr "标题字段必须是有效的字段名" @@ -27462,7 +27720,7 @@ msgstr "导出此步骤为JSON需关联到入职文档并保存" msgid "To generate password click {0}" msgstr "生成密码请点击{0}" -#: frappe/public/js/frappe/views/reports/query_report.js:865 +#: frappe/public/js/frappe/views/reports/query_report.js:882 msgid "To get the updated report, click on {0}." msgstr "要获取已更新报表,请单击{0}。" @@ -27515,31 +27773,14 @@ msgstr "待办" msgid "Today" msgstr "今天" -#: frappe/public/js/frappe/views/reports/report_view.js:1566 +#: frappe/public/js/frappe/views/reports/report_view.js:1567 msgid "Toggle Chart" msgstr "切换图表" -#. Label of a standard navbar item -#. Type: Action -#: frappe/hooks.py -msgid "Toggle Full Width" -msgstr "切换全屏宽度显示" - #: frappe/public/js/frappe/views/file/file_view.js:33 msgid "Toggle Grid View" msgstr "切换到图标视图" -#: frappe/public/js/frappe/ui/page.js:206 -#: frappe/public/js/frappe/ui/page.js:208 -msgid "Toggle Sidebar" -msgstr "切换边栏" - -#. Label of a standard navbar item -#. Type: Action -#: frappe/hooks.py -msgid "Toggle Theme" -msgstr "切换主题" - #. Option for the 'Response Type' (Select) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Token" @@ -27575,7 +27816,7 @@ msgid "Tomorrow" msgstr "明天" #: frappe/desk/doctype/bulk_update/bulk_update.py:68 -#: frappe/model/workflow.py:310 +#: frappe/model/workflow.py:331 msgid "Too Many Documents" msgstr "文档数量过多" @@ -27583,15 +27824,19 @@ msgstr "文档数量过多" msgid "Too Many Requests" msgstr "请求过多" -#: frappe/database/database.py:474 +#: frappe/database/database.py:480 msgid "Too many changes to database in single action." msgstr "单次操作中数据库变更过多" -#: frappe/utils/background_jobs.py:737 +#: frappe/utils/background_jobs.py:736 msgid "Too many queued background jobs ({0}). Please retry after some time." msgstr "后台作业队列过长({0}),请稍后重试" -#: frappe/core/doctype/user/user.py:1090 +#: frappe/templates/includes/login/login.js:291 +msgid "Too many requests. Please try again later." +msgstr "" + +#: frappe/core/doctype/user/user.py:1093 msgid "Too many users signed up recently, so the registration is disabled. Please try back in an hour" msgstr "最近有太多用户注册,导致注册功能被自动临时禁用了,请一个小时后重试。" @@ -27647,10 +27892,10 @@ msgstr "顶部右侧" msgid "Topic" msgstr "主题" -#: frappe/desk/query_report.py:622 -#: frappe/public/js/frappe/views/reports/print_grid.html:45 -#: frappe/public/js/frappe/views/reports/query_report.js:1354 -#: frappe/public/js/frappe/views/reports/report_view.js:1547 +#: frappe/desk/query_report.py:621 +#: frappe/public/js/frappe/views/reports/print_grid.html:50 +#: frappe/public/js/frappe/views/reports/query_report.js:1371 +#: frappe/public/js/frappe/views/reports/report_view.js:1548 msgid "Total" msgstr "总计" @@ -27665,7 +27910,7 @@ msgstr "后台工作进程总数" msgid "Total Errors (last 1 day)" msgstr "总错误数(最近1天)" -#: frappe/public/js/frappe/ui/capture.js:259 +#: frappe/public/js/frappe/ui/capture.js:260 msgid "Total Images" msgstr "总图片数" @@ -27767,7 +28012,7 @@ msgstr "追踪收件人是否打开邮件.\n" msgid "Track milestones for any document" msgstr "跟踪任何单据的里程碑" -#: frappe/public/js/frappe/utils/utils.js:1936 +#: frappe/public/js/frappe/utils/utils.js:2067 msgid "Tracking URL generated and copied to clipboard" msgstr "跟踪URL已生成并复制到剪贴板" @@ -27803,7 +28048,7 @@ msgstr "状态转换" msgid "Translatable" msgstr "可翻译" -#: frappe/public/js/frappe/views/reports/query_report.js:2274 +#: frappe/public/js/frappe/views/reports/query_report.js:2341 msgid "Translate Data" msgstr "翻译数据" @@ -27814,7 +28059,7 @@ msgstr "翻译数据" msgid "Translate Link Fields" msgstr "翻译链接字段" -#: frappe/public/js/frappe/views/reports/report_view.js:1662 +#: frappe/public/js/frappe/views/reports/report_view.js:1663 msgid "Translate values" msgstr "翻译值" @@ -27850,7 +28095,7 @@ msgstr "垃圾" #. Option for the 'DocType View' (Select) field in DocType 'Workspace Shortcut' #: frappe/desk/doctype/form_tour/form_tour.json #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:96 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:89 msgid "Tree" msgstr "树" @@ -27899,8 +28144,8 @@ msgstr "重试" msgid "Try a Naming Series" msgstr "单据编号模板预览" -#: frappe/printing/page/print/print.js:204 -#: frappe/printing/page/print/print.js:210 +#: frappe/printing/page/print/print.js:212 +#: frappe/printing/page/print/print.js:218 msgid "Try the new Print Designer" msgstr "试用新版打印设计器" @@ -27946,6 +28191,7 @@ msgstr "双重验证方法" #. Label of the fieldtype (Select) field in DocType 'Customize Form Field' #. Label of the type (Data) field in DocType 'Console Log' #. Label of the type (Select) field in DocType 'Dashboard Chart' +#. Label of the type (Select) field in DocType 'Event Notifications' #. Label of the type (Select) field in DocType 'Notification Log' #. Label of the type (Select) field in DocType 'Number Card' #. Label of the type (Select) field in DocType 'System Console' @@ -27959,6 +28205,7 @@ msgstr "双重验证方法" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/desk/doctype/console_log/console_log.json #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json +#: frappe/desk/doctype/event_notifications/event_notifications.json #: frappe/desk/doctype/notification_log/notification_log.json #: frappe/desk/doctype/number_card/number_card.json #: frappe/desk/doctype/system_console/system_console.json @@ -27967,7 +28214,7 @@ msgstr "双重验证方法" #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json #: frappe/public/js/frappe/views/file/file_view.js:371 -#: frappe/public/js/frappe/views/workspace/workspace.js:413 +#: frappe/public/js/frappe/views/workspace/workspace.js:461 #: frappe/public/js/frappe/widgets/widget_dialog.js:404 #: frappe/website/doctype/web_template/web_template.json #: frappe/www/attribution.html:35 @@ -28143,7 +28390,7 @@ msgstr "取消关注文档{0}" msgid "Unable to find DocType {0}" msgstr "无法找到DocType {0}" -#: frappe/public/js/frappe/ui/capture.js:338 +#: frappe/public/js/frappe/ui/capture.js:339 msgid "Unable to load camera." msgstr "无法加载相机。" @@ -28159,7 +28406,7 @@ msgstr "无法打开附件单据,您确认导出文件并存为了CSV格式? msgid "Unable to read file format for {0}" msgstr "无法读取{0}的文件格式" -#: frappe/core/doctype/communication/email.py:180 +#: frappe/core/doctype/communication/email.py:204 msgid "Unable to send mail because of a missing email account. Please setup default Email Account from Settings > Email Account" msgstr "缺少邮箱账户无法发送邮件,请通过设置>邮箱账户配置默认账户" @@ -28180,20 +28427,20 @@ msgstr "取消分派条件" msgid "Uncaught Exception" msgstr "未捕获异常" -#: frappe/public/js/frappe/form/toolbar.js:114 +#: frappe/public/js/frappe/form/toolbar.js:113 msgid "Unchanged" msgstr "未变更" -#: frappe/public/js/frappe/form/toolbar.js:551 +#: frappe/public/js/frappe/form/toolbar.js:554 msgid "Undo" msgstr "撤销" -#: frappe/public/js/frappe/form/toolbar.js:559 +#: frappe/public/js/frappe/form/toolbar.js:562 msgid "Undo last action" msgstr "撤销上一步操作" -#: frappe/public/js/frappe/form/templates/form_sidebar.html:131 -#: frappe/public/js/frappe/form/toolbar.js:912 +#: frappe/public/js/frappe/form/templates/form_sidebar.html:152 +#: frappe/public/js/frappe/form/toolbar.js:945 msgid "Unfollow" msgstr "取消关注" @@ -28267,9 +28514,10 @@ msgstr "未读发送通知" msgid "Unsafe SQL query" msgstr "不安全的SQL查询" -#: frappe/public/js/frappe/data_import/data_exporter.js:159 +#: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:9 +#: frappe/public/js/frappe/data_import/data_exporter.js:160 #: frappe/public/js/frappe/form/controls/multicheck.js:167 -#: frappe/public/js/frappe/views/reports/report_view.js:1605 +#: frappe/public/js/frappe/views/reports/report_view.js:1606 msgid "Unselect All" msgstr "全部不选" @@ -28302,11 +28550,11 @@ msgstr "退订参数" msgid "Unsubscribed" msgstr "已退订" -#: frappe/database/query.py:1055 +#: frappe/database/query.py:1098 msgid "Unsupported function or operator: {0}" msgstr "" -#: frappe/database/query.py:1967 +#: frappe/database/query.py:2045 msgid "Unsupported {0}: {1}" msgstr "" @@ -28326,7 +28574,7 @@ msgstr "解压缩{0}个文件" msgid "Unzipping files..." msgstr "解压缩文件..." -#: frappe/desk/doctype/event/event.py:273 +#: frappe/desk/doctype/event/event.py:323 msgid "Upcoming Events for Today" msgstr "今日活动" @@ -28334,13 +28582,13 @@ msgstr "今日活动" #: frappe/core/doctype/data_import/data_import_list.js:36 #: frappe/core/doctype/document_naming_settings/document_naming_settings.json #: frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js:23 -#: frappe/custom/doctype/customize_form/customize_form.js:438 +#: frappe/custom/doctype/customize_form/customize_form.js:448 #: frappe/desk/doctype/bulk_update/bulk_update.js:15 #: frappe/printing/page/print_format_builder/print_format_builder.js:447 #: frappe/printing/page/print_format_builder/print_format_builder.js:507 #: frappe/printing/page/print_format_builder/print_format_builder.js:678 -#: frappe/printing/page/print_format_builder/print_format_builder.js:765 -#: frappe/public/js/frappe/form/grid_row.js:427 +#: frappe/printing/page/print_format_builder/print_format_builder.js:799 +#: frappe/public/js/frappe/form/grid_row.js:429 msgid "Update" msgstr "更新" @@ -28411,7 +28659,7 @@ msgstr "更新值" msgid "Update from Frappe Cloud" msgstr "从Frappe云更新" -#: frappe/public/js/frappe/list/bulk_operations.js:375 +#: frappe/public/js/frappe/list/bulk_operations.js:387 msgid "Update {0} records" msgstr "更新{0}个单据" @@ -28420,7 +28668,7 @@ msgstr "更新{0}个单据" #: frappe/core/doctype/comment/comment.json #: frappe/core/doctype/permission_log/permission_log.json #: frappe/desk/doctype/workspace_settings/workspace_settings.py:41 -#: frappe/public/js/frappe/web_form/web_form.js:451 +#: frappe/public/js/frappe/web_form/web_form.js:447 msgid "Updated" msgstr "已更新" @@ -28432,11 +28680,11 @@ msgstr "更新成功" msgid "Updated To A New Version 🎉" msgstr "已更新至新版本🎉" -#: frappe/public/js/frappe/list/bulk_operations.js:372 +#: frappe/public/js/frappe/list/bulk_operations.js:384 msgid "Updated successfully" msgstr "更新成功" -#: frappe/utils/response.py:337 +#: frappe/utils/response.py:342 msgid "Updating" msgstr "更新" @@ -28461,11 +28709,11 @@ msgstr "更新全局设置" msgid "Updating naming series options" msgstr "更新命名系列选项" -#: frappe/public/js/frappe/form/toolbar.js:147 +#: frappe/public/js/frappe/form/toolbar.js:146 msgid "Updating related fields..." msgstr "正在更新相关字段..." -#: frappe/desk/doctype/bulk_update/bulk_update.py:95 +#: frappe/desk/doctype/bulk_update/bulk_update.py:117 msgid "Updating {0}" msgstr "更新{0}" @@ -28473,12 +28721,12 @@ msgstr "更新{0}" msgid "Updating {0} of {1}, {2}" msgstr "上传中 {0} / {1} {2}" -#: frappe/public/js/billing.bundle.js:131 +#: frappe/public/js/billing.bundle.js:133 msgid "Upgrade plan" msgstr "升级计划" -#: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:145 -#: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:146 +#: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:152 +#: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:153 #: frappe/public/js/frappe/form/grid.js:66 #: frappe/public/js/frappe/form/templates/form_sidebar.html:13 msgid "Upload" @@ -28526,6 +28774,7 @@ msgstr "所选期间的第一天" #. Label of the use_html (Check) field in DocType 'Email Template' #: frappe/email/doctype/email_template/email_template.json +#: frappe/public/js/frappe/views/communication.js:116 msgid "Use HTML" msgstr "使用HTML" @@ -28597,7 +28846,7 @@ msgstr "当默认设置无法正确识别数据时使用" msgid "Use of sub-query or function is restricted" msgstr "子查询或函数的使用受到限制" -#: frappe/printing/page/print/print.js:311 +#: frappe/printing/page/print/print.js:319 msgid "Use the new Print Format Builder" msgstr "启用新打印格式编辑器" @@ -28631,9 +28880,8 @@ msgstr "启用OAuth" #. Label of the user (Link) field in DocType 'User Group Member' #. Label of the user (Link) field in DocType 'User Invitation' #. Label of the user (Link) field in DocType 'User Permission' -#. Label of a Link in the Users Workspace -#. Label of a shortcut in the Users Workspace #. Label of the user (Link) field in DocType 'Dashboard Settings' +#. Label of the user (Link) field in DocType 'Desktop Layout' #. Label of the user (Link) field in DocType 'Note Seen By' #. Label of the user (Link) field in DocType 'Notification Settings' #. Label of the user (Link) field in DocType 'Route History' @@ -28660,11 +28908,11 @@ msgstr "启用OAuth" #: frappe/core/doctype/user_group_member/user_group_member.json #: frappe/core/doctype/user_invitation/user_invitation.json #: frappe/core/doctype/user_permission/user_permission.json -#: frappe/core/page/permission_manager/permission_manager.js:366 +#: frappe/core/page/permission_manager/permission_manager.js:367 #: frappe/core/report/permitted_documents_for_user/permitted_documents_for_user.js:8 #: frappe/core/report/user_doctype_permissions/user_doctype_permissions.js:8 -#: frappe/core/workspace/users/users.json #: frappe/desk/doctype/dashboard_settings/dashboard_settings.json +#: frappe/desk/doctype/desktop_layout/desktop_layout.json #: frappe/desk/doctype/note_seen_by/note_seen_by.json #: frappe/desk/doctype/notification_settings/notification_settings.json #: frappe/desk/doctype/route_history/route_history.json @@ -28800,7 +29048,7 @@ msgstr "用户图片" msgid "User Invitation" msgstr "用户邀请" -#: frappe/public/js/frappe/ui/sidebar/sidebar.html:50 +#: frappe/public/js/frappe/ui/sidebar/sidebar.html:51 msgid "User Menu" msgstr "用户菜单" @@ -28816,19 +29064,19 @@ msgid "User Permission" msgstr "用户权限限制" #. Label of a Link in the Users Workspace -#: frappe/core/page/permission_manager/permission_manager_help.html:30 +#: frappe/core/page/permission_manager/permission_manager_help.html:97 #: frappe/core/workspace/users/users.json -#: frappe/public/js/frappe/views/reports/query_report.js:1974 -#: frappe/public/js/frappe/views/reports/report_view.js:1765 +#: frappe/public/js/frappe/views/reports/query_report.js:2027 +#: frappe/public/js/frappe/views/reports/report_view.js:1766 msgid "User Permissions" msgstr "用户权限限制" -#: frappe/public/js/frappe/list/list_view.js:1925 +#: frappe/public/js/frappe/list/list_view.js:1933 msgctxt "Button in list view menu" msgid "User Permissions" msgstr "用户权限" -#: frappe/core/page/permission_manager/permission_manager_help.html:32 +#: frappe/core/page/permission_manager/permission_manager_help.html:99 msgid "User Permissions are used to limit users to specific records." msgstr "用户权限限制用于过滤出允许用户访问的单据。" @@ -28901,7 +29149,7 @@ msgstr "用户可以使用电子邮件ID或手机号登录" msgid "User can login using Email id or User Name" msgstr "用户可以使用电子邮件ID或用户名登录" -#: frappe/templates/includes/login/login.js:292 +#: frappe/templates/includes/login/login.js:290 msgid "User does not exist." msgstr "用户不存在" @@ -28935,27 +29183,27 @@ msgstr "邮箱地址为{0}的用户不存在" msgid "User with email: {0} does not exist in the system. Please ask 'System Administrator' to create the user for you." msgstr "系统中不存在邮箱为{0}的用户,请联系系统管理员创建" -#: frappe/core/doctype/user/user.py:576 +#: frappe/core/doctype/user/user.py:579 msgid "User {0} cannot be deleted" msgstr "用户{0}不能被删除" -#: frappe/core/doctype/user/user.py:366 +#: frappe/core/doctype/user/user.py:369 msgid "User {0} cannot be disabled" msgstr "用户{0}不能被禁用" -#: frappe/core/doctype/user/user.py:649 +#: frappe/core/doctype/user/user.py:652 msgid "User {0} cannot be renamed" msgstr "不允许变更用户名{0}" -#: frappe/permissions.py:142 +#: frappe/permissions.py:146 msgid "User {0} does not have access to this document" msgstr "用户{0}无权访问此单据" -#: frappe/permissions.py:165 +#: frappe/permissions.py:171 msgid "User {0} does not have doctype access via role permission for document {1}" msgstr "角色权限管理中未授权用户 {0} 访问 {1}" -#: frappe/desk/doctype/workspace/workspace.py:306 +#: frappe/desk/doctype/workspace/workspace.py:285 msgid "User {0} does not have the permission to create a Workspace." msgstr "用户{0}无权创建工作区" @@ -28964,11 +29212,11 @@ msgstr "用户{0}无权创建工作区" msgid "User {0} has requested for data deletion" msgstr "用户{0}已请求数据删除" -#: frappe/core/doctype/user/user.py:1449 +#: frappe/core/doctype/user/user.py:1452 msgid "User {0} impersonated as {1}" msgstr "用户 {0} 以 {1} 身份登录" -#: frappe/utils/oauth.py:298 +#: frappe/utils/oauth.py:300 msgid "User {0} is disabled" msgstr "用户{0}已禁用" @@ -28993,18 +29241,17 @@ msgstr "用户信息URI" msgid "Username" msgstr "用户名" -#: frappe/core/doctype/user/user.py:738 +#: frappe/core/doctype/user/user.py:741 msgid "Username {0} already exists" msgstr "用户名{0}已存在" #. Label of the users (Table MultiSelect) field in DocType 'Assignment Rule' #. Name of a Workspace -#. Label of a Card Break in the Users Workspace #. Label of the users_section (Section Break) field in DocType 'System Health #. Report' #: frappe/automation/doctype/assignment_rule/assignment_rule.json -#: frappe/core/page/permission_manager/permission_manager.js:366 -#: frappe/core/page/permission_manager/permission_manager.js:405 +#: frappe/core/page/permission_manager/permission_manager.js:367 +#: frappe/core/page/permission_manager/permission_manager.js:406 #: frappe/core/workspace/users/users.json #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Users" @@ -29075,7 +29322,7 @@ msgstr "验证Frappe邮件设置" msgid "Validate SSL Certificate" msgstr "验证SSL证书" -#: frappe/public/js/frappe/web_form/web_form.js:384 +#: frappe/public/js/frappe/web_form/web_form.js:380 msgid "Validation Error" msgstr "验证错误" @@ -29104,7 +29351,7 @@ msgstr "有效性" #: frappe/integrations/doctype/query_parameters/query_parameters.json #: frappe/integrations/doctype/webhook_header/webhook_header.json #: frappe/public/js/frappe/list/bulk_operations.js:336 -#: frappe/public/js/frappe/list/bulk_operations.js:398 +#: frappe/public/js/frappe/list/bulk_operations.js:410 #: frappe/public/js/frappe/list/list_view_permission_restrictions.html:4 #: frappe/website/doctype/web_form/web_form.js:213 #: frappe/website/doctype/website_meta_tag/website_meta_tag.json @@ -29131,15 +29378,19 @@ msgstr "值变更的字段" msgid "Value To Be Set" msgstr "字段值" -#: frappe/model/base_document.py:1159 frappe/model/document.py:878 +#: frappe/model/base_document.py:820 +msgid "Value Too Long" +msgstr "" + +#: frappe/model/base_document.py:1176 frappe/model/document.py:877 msgid "Value cannot be changed for {0}" msgstr "值不能被改变为{0}" -#: frappe/model/document.py:824 +#: frappe/model/document.py:823 msgid "Value cannot be negative for" msgstr "值不能为负数:" -#: frappe/model/document.py:828 +#: frappe/model/document.py:827 msgid "Value cannot be negative for {0}: {1}" msgstr "{0}的值不能为负数:{1}" @@ -29151,7 +29402,7 @@ msgstr "勾选字段值可以为0或1" msgid "Value for field {0} is too long in {1}. Length should be lesser than {2} characters" msgstr "{1} 中的字段 {0} 值太长,长度应该小于 {2}" -#: frappe/model/base_document.py:526 +#: frappe/model/base_document.py:531 msgid "Value for {0} cannot be a list" msgstr "{0}不能是列表值" @@ -29176,7 +29427,13 @@ msgstr "值为\"None\"表示公共客户端。在此情况下,客户端密钥 msgid "Value to Validate" msgstr "待验证的值" -#: frappe/model/base_document.py:1229 +#. Description of the 'Update Value' (Data) field in DocType 'Workflow Document +#. State' +#: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json +msgid "Value to set when this workflow state is applied. Use plain text (e.g. Approved) or an expression if “Evaluate as Expression” is enabled." +msgstr "" + +#: frappe/model/base_document.py:1246 msgid "Value too big" msgstr "值过大" @@ -29193,7 +29450,7 @@ msgstr "值{0}必须符合有效时长格式:d h m s" msgid "Value {0} must in {1} format" msgstr "值{0}必须符合{1}格式" -#: frappe/core/doctype/version/version_view.html:9 +#: frappe/core/doctype/version/version_view.html:59 msgid "Values Changed" msgstr "值已更改" @@ -29202,11 +29459,11 @@ msgstr "值已更改" msgid "Verdana" msgstr "Verdana" -#: frappe/templates/includes/login/login.js:333 +#: frappe/templates/includes/login/login.js:332 msgid "Verification" msgstr "验证" -#: frappe/templates/includes/login/login.js:336 frappe/twofactor.py:366 +#: frappe/templates/includes/login/login.js:335 frappe/twofactor.py:366 msgid "Verification Code" msgstr "验证码" @@ -29214,7 +29471,7 @@ msgstr "验证码" msgid "Verification Link" msgstr "验证链接" -#: frappe/templates/includes/login/login.js:383 +#: frappe/templates/includes/login/login.js:382 msgid "Verification code email not sent. Please contact Administrator." msgstr "验证码邮件未发送,请联系管理员" @@ -29228,7 +29485,7 @@ msgid "Verified" msgstr "验证" #: frappe/public/js/frappe/ui/messages.js:359 -#: frappe/templates/includes/login/login.js:337 +#: frappe/templates/includes/login/login.js:336 msgid "Verify" msgstr "确认" @@ -29264,7 +29521,7 @@ msgstr "查看" msgid "View All" msgstr "查看全部" -#: frappe/public/js/frappe/form/toolbar.js:613 +#: frappe/public/js/frappe/form/toolbar.js:616 msgid "View Audit Trail" msgstr "查看审计跟踪" @@ -29276,7 +29533,7 @@ msgstr "查看文档类型权限" msgid "View File" msgstr "查看文件" -#: frappe/public/js/frappe/ui/notifications/notifications.js:251 +#: frappe/public/js/frappe/ui/notifications/notifications.js:260 msgid "View Full Log" msgstr "查看全部日志" @@ -29313,7 +29570,7 @@ msgstr "查看报表" msgid "View Settings" msgstr "视图设置" -#: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.js:7 +#: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.js:11 msgid "View Sidebar" msgstr "" @@ -29322,14 +29579,11 @@ msgstr "" msgid "View Switcher" msgstr "视图切换" -#. Label of a standard navbar item -#. Type: Action -#: frappe/hooks.py #: frappe/website/doctype/website_settings/website_settings.js:16 msgid "View Website" msgstr "查看网站" -#: frappe/core/page/permission_manager/permission_manager.js:395 +#: frappe/core/page/permission_manager/permission_manager.js:396 msgid "View all {0} users" msgstr "" @@ -29345,7 +29599,7 @@ msgstr "在浏览器中查看报表" msgid "View this in your browser" msgstr "在浏览器查看" -#: frappe/public/js/frappe/web_form/web_form.js:478 +#: frappe/public/js/frappe/web_form/web_form.js:474 msgctxt "Button in web form" msgid "View your response" msgstr "查看您的响应" @@ -29381,7 +29635,7 @@ msgstr "虚拟文档类型{}需要名为{}的静态方法,找到{}" msgid "Virtual DocType {} requires overriding an instance method called {} found {}" msgstr "虚拟文档类型{}需要重写名为{}的实例方法,找到{}" -#: frappe/core/doctype/doctype/doctype.py:1672 +#: frappe/core/doctype/doctype/doctype.py:1686 msgid "Virtual tables must be virtual fields" msgstr "虚拟表必须为虚拟字段" @@ -29429,7 +29683,7 @@ msgstr "仓库" #: frappe/core/doctype/docfield/docfield.json #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json -#: frappe/public/js/frappe/router.js:613 +#: frappe/public/js/frappe/router.js:618 #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Warning" msgstr "警告" @@ -29438,7 +29692,7 @@ msgstr "警告" msgid "Warning: DATA LOSS IMMINENT! Proceeding will permanently delete following database columns from doctype {0}:" msgstr "警告:即将数据丢失!继续操作将永久删除{0}的数据库列:" -#: frappe/core/doctype/doctype/doctype.py:1140 +#: frappe/core/doctype/doctype/doctype.py:1143 msgid "Warning: Naming is not set" msgstr "警告:未设置命名规则" @@ -29522,7 +29776,7 @@ msgstr "网站网页" msgid "Web Page Block" msgstr "网页区块" -#: frappe/public/js/frappe/utils/utils.js:1864 +#: frappe/public/js/frappe/utils/utils.js:1995 msgid "Web Page URL" msgstr "网页URL" @@ -29619,7 +29873,7 @@ msgstr "Webhook URL" #. Group in Module Def's connections #. Name of a Workspace #: frappe/core/doctype/module_def/module_def.json -#: frappe/public/js/frappe/ui/sidebar/sidebar_header.js:37 +#: frappe/public/js/frappe/ui/sidebar/sidebar_header.js:32 #: frappe/public/js/frappe/ui/toolbar/about.js:11 #: frappe/website/workspace/website/website.json msgid "Website" @@ -29674,7 +29928,7 @@ msgstr "网站脚本" msgid "Website Search Field" msgstr "网站搜索字段" -#: frappe/core/doctype/doctype/doctype.py:1537 +#: frappe/core/doctype/doctype/doctype.py:1551 msgid "Website Search Field must be a valid fieldname" msgstr "网站搜索字段必须是有效字段名" @@ -29739,6 +29993,11 @@ msgstr "网站主题图片链接" msgid "Website Themes Available" msgstr "" +#. Label of a number card in the Users Workspace +#: frappe/core/workspace/users/users.json +msgid "Website Users" +msgstr "" + #. Label of a chart in the Website Workspace #: frappe/website/workspace/website/website.json msgid "Website Visits" @@ -29826,15 +30085,15 @@ msgstr "欢迎页网址" msgid "Welcome Workspace" msgstr "欢迎工作区" -#: frappe/core/doctype/user/user.py:454 +#: frappe/core/doctype/user/user.py:457 msgid "Welcome email sent" msgstr "欢迎电子邮件已发送" -#: frappe/core/doctype/user/user.py:515 +#: frappe/core/doctype/user/user.py:518 msgid "Welcome to {0}" msgstr "欢迎{0}" -#: frappe/public/js/frappe/ui/notifications/notifications.js:73 +#: frappe/public/js/frappe/ui/notifications/notifications.js:80 msgid "What's New" msgstr "新消息" @@ -29856,10 +30115,6 @@ msgstr "邮件发送单据时在沟通(时间线)记录中保存pdf附件。提 msgid "When uploading files, force the use of the web-based image capture. If this is unchecked, the default behavior is to use the mobile native camera when use from a mobile is detected." msgstr "上传文件时强制使用网页上传图片机制,如未勾选,如侦测是移动设备则默认使用移动设备照相机" -#: frappe/core/page/permission_manager/permission_manager_help.html:18 -msgid "When you Amend a document after Cancel and save it, it will get a new number that is a version of the old number." -msgstr "当你修订一个已取消和保存的单据时,单据会复制为一个副本。" - #. Description of the 'DocType View' (Select) field in DocType 'Workspace #. Shortcut' #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json @@ -29877,7 +30132,7 @@ msgstr "此快捷方式应跳转至关联文档类型的哪个视图?" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/desk/doctype/dashboard_chart_link/dashboard_chart_link.json -#: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:8 +#: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:14 #: frappe/public/js/print_format_builder/ConfigureColumns.vue:11 msgid "Width" msgstr "宽度" @@ -29998,6 +30253,10 @@ msgstr "工作流详情" msgid "Workflow Document State" msgstr "工作流单据状态" +#: frappe/model/workflow.py:113 +msgid "Workflow Evaluation Error" +msgstr "" + #. Label of the workflow_name (Data) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "Workflow Name" @@ -30015,11 +30274,11 @@ msgstr "工作流状态" msgid "Workflow State Field" msgstr "工作流状态字段" -#: frappe/model/workflow.py:64 +#: frappe/model/workflow.py:67 msgid "Workflow State not set" msgstr "工作流状态未设置" -#: frappe/model/workflow.py:260 frappe/model/workflow.py:268 +#: frappe/model/workflow.py:281 frappe/model/workflow.py:289 msgid "Workflow State transition not allowed from {0} to {1}" msgstr "不允许从{0}到{1}的工作流状态转换" @@ -30027,7 +30286,7 @@ msgstr "不允许从{0}到{1}的工作流状态转换" msgid "Workflow States Don't Exist" msgstr "工作流状态不存在" -#: frappe/model/workflow.py:384 +#: frappe/model/workflow.py:405 msgid "Workflow Status" msgstr "工作流状态" @@ -30062,18 +30321,15 @@ msgstr "工作流更新成功" #. Label of the workspace_section (Section Break) field in DocType 'User' #. Label of a Link in the Build Workspace -#. Option for the 'Link Type' (Select) field in DocType 'Desktop Icon' #. Name of a DocType #. Option for the 'Type' (Select) field in DocType 'Workspace' #. Option for the 'Link Type' (Select) field in DocType 'Workspace Sidebar #. Item' #: frappe/core/doctype/user/user.json frappe/core/workspace/build/build.json -#: frappe/desk/doctype/desktop_icon/desktop_icon.json #: frappe/desk/doctype/workspace/workspace.json #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:100 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:601 -#: frappe/public/js/frappe/utils/utils.js:968 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:92 +#: frappe/public/js/frappe/utils/utils.js:956 #: frappe/public/js/frappe/views/workspace/workspace.js:10 msgid "Workspace" msgstr "工作区" @@ -30114,11 +30370,8 @@ msgstr "工作区数字卡" msgid "Workspace Quick List" msgstr "工作区快速访问列表" -#. Label of a standard navbar item -#. Type: Action #. Name of a DocType #: frappe/desk/doctype/workspace_settings/workspace_settings.json -#: frappe/hooks.py msgid "Workspace Settings" msgstr "工作区设置" @@ -30133,8 +30386,10 @@ msgstr "工作区设置完成" msgid "Workspace Shortcut" msgstr "工作区捷径" +#. Option for the 'Link Type' (Select) field in DocType 'Desktop Icon' #. Name of a DocType #: frappe/desk/doctype/desktop_icon/desktop_icon.js:17 +#: frappe/desk/doctype/desktop_icon/desktop_icon.json #: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json msgid "Workspace Sidebar" msgstr "" @@ -30150,7 +30405,7 @@ msgstr "" msgid "Workspace Visibility" msgstr "工作区可见性" -#: frappe/public/js/frappe/views/workspace/workspace.js:553 +#: frappe/public/js/frappe/views/workspace/workspace.js:602 msgid "Workspace {0} created" msgstr "工作区{0}已创建" @@ -30179,11 +30434,12 @@ msgstr "已圆满完成" #: frappe/core/doctype/docperm/docperm.json #: frappe/core/doctype/docshare/docshare.json #: frappe/core/doctype/user_document_type/user_document_type.json +#: frappe/core/page/permission_manager/permission_manager_help.html:36 #: frappe/public/js/frappe/form/templates/set_sharing.html:3 msgid "Write" msgstr "写" -#: frappe/model/base_document.py:1055 +#: frappe/model/base_document.py:1072 msgid "Wrong Fetch From value" msgstr "错误的获取来源值" @@ -30201,7 +30457,7 @@ msgstr "X轴字段" msgid "XLSX" msgstr "XLSX" -#: frappe/public/js/frappe/file_uploader/FileUploader.vue:641 +#: frappe/public/js/frappe/file_uploader/FileUploader.vue:644 msgid "XMLHttpRequest Error" msgstr "" @@ -30216,7 +30472,7 @@ msgstr "Y轴字段" #. Label of the y_field (Select) field in DocType 'Dashboard Chart Field' #: frappe/desk/doctype/dashboard_chart_field/dashboard_chart_field.json -#: frappe/public/js/frappe/views/reports/query_report.js:1255 +#: frappe/public/js/frappe/views/reports/query_report.js:1272 msgid "Y Field" msgstr "Y轴字段" @@ -30264,10 +30520,14 @@ msgstr "黄色" #. Option for the 'Standard' (Select) field in DocType 'Page' #. Option for the 'Is Standard' (Select) field in DocType 'Report' +#. Option for the 'Attending' (Select) field in DocType 'Event' +#. Option for the 'Attending' (Select) field in DocType 'Event Participants' #. Option for the 'Require Trusted Certificate' (Select) field in DocType 'LDAP #. Settings' #. Option for the 'Standard' (Select) field in DocType 'Print Format' #: frappe/core/doctype/page/page.json frappe/core/doctype/report/report.json +#: frappe/desk/doctype/event/event.json +#: frappe/desk/doctype/event_participants/event_participants.json #: frappe/email/doctype/notification/notification.py:97 #: frappe/email/doctype/notification/notification.py:102 #: frappe/email/doctype/notification/notification.py:104 @@ -30276,10 +30536,10 @@ msgstr "黄色" #: frappe/integrations/doctype/webhook/webhook.py:132 #: frappe/printing/doctype/print_format/print_format.json #: frappe/public/js/form_builder/utils.js:336 -#: frappe/public/js/frappe/form/controls/link.js:573 +#: frappe/public/js/frappe/form/controls/link.js:574 #: frappe/public/js/frappe/list/base_list.js:949 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:170 -#: frappe/public/js/frappe/views/reports/query_report.js:1695 +#: frappe/public/js/frappe/views/reports/query_report.js:47 #: frappe/website/doctype/help_article/templates/help_article.html:25 msgid "Yes" msgstr "是" @@ -30315,7 +30575,7 @@ msgstr "您向{0}添加了1行" msgid "You added {0} rows to {1}" msgstr "您向{1}添加了{0}行" -#: frappe/public/js/frappe/router.js:642 +#: frappe/public/js/frappe/router.js:647 msgid "You are about to open an external link. To confirm, click the link again." msgstr "您即将打开外部链接。请再次点击链接以确认。" @@ -30323,7 +30583,7 @@ msgstr "您即将打开外部链接。请再次点击链接以确认。" msgid "You are connected to internet." msgstr "已联网。" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:22 +#: frappe/public/js/frappe/ui/toolbar/navbar.html:12 msgid "You are impersonating as another user." msgstr "您正在模拟其他用户" @@ -30331,11 +30591,11 @@ msgstr "您正在模拟其他用户" msgid "You are not allowed to access this resource" msgstr "您无权访问此资源" -#: frappe/permissions.py:437 +#: frappe/permissions.py:443 msgid "You are not allowed to access this {0} record because it is linked to {1} '{2}' in field {3}" msgstr "无权限访问{0} 类型单据,链接字段 {3} 引用了你无权访问的 {1} '{2}'" -#: frappe/permissions.py:426 +#: frappe/permissions.py:432 msgid "You are not allowed to access this {0} record because it is linked to {1} '{2}' in row {3}, field {4}" msgstr "无权限访问 {0} 类型单据,第{3}行,链接字段 {4} 引用了你无权访问的 {1} '{2}'" @@ -30358,7 +30618,7 @@ msgstr "您无权编辑此报表" #: frappe/core/doctype/data_import/exporter.py:121 #: frappe/core/doctype/data_import/exporter.py:125 #: frappe/desk/reportview.py:447 frappe/desk/reportview.py:450 -#: frappe/permissions.py:632 +#: frappe/permissions.py:638 msgid "You are not allowed to export {} doctype" msgstr "未被授权导出单据类型{}" @@ -30366,10 +30626,14 @@ msgstr "未被授权导出单据类型{}" msgid "You are not allowed to print this report" msgstr "您未被授权打印此报表" -#: frappe/public/js/frappe/views/communication.js:778 +#: frappe/public/js/frappe/views/communication.js:845 msgid "You are not allowed to send emails related to this document" msgstr "你不允许发送与此单据相关的电子邮件" +#: frappe/desk/doctype/event/event.py:251 +msgid "You are not allowed to update the status of this event." +msgstr "" + #: frappe/website/doctype/web_form/web_form.py:633 msgid "You are not allowed to update this Web Form Document" msgstr "你不允许更新此Web表单" @@ -30386,7 +30650,7 @@ msgstr "未登录状态下无权访问此页面" msgid "You are not permitted to access this page." msgstr "你没有权限访问此页面。" -#: frappe/__init__.py:464 +#: frappe/__init__.py:462 msgid "You are not permitted to access this resource. Login to access" msgstr "您无权访问此资源。请登录后访问" @@ -30394,7 +30658,7 @@ msgstr "您无权访问此资源。请登录后访问" msgid "You are now following this document. You will receive daily updates via email. You can change this in User Settings." msgstr "您现在正在关注此单据。您将通过电子邮件收到每日更新。您可以在“用户设置”中进行更改。" -#: frappe/core/doctype/installed_applications/installed_applications.py:125 +#: frappe/core/doctype/installed_applications/installed_applications.py:126 msgid "You are only allowed to update order, do not remove or add apps." msgstr "仅允许调整应用顺序,不可增删应用" @@ -30407,7 +30671,7 @@ msgctxt "Form timeline" msgid "You attached {0}" msgstr "您已附加{0}" -#: frappe/printing/page/print_format_builder/print_format_builder.js:749 +#: frappe/printing/page/print_format_builder/print_format_builder.js:783 msgid "You can add dynamic properties from the document by using Jinja templating." msgstr "您可以通过Jinja模板来添加单据的动态属性。" @@ -30431,10 +30695,6 @@ msgstr "也可将{0}粘贴到浏览器" msgid "You can ask your team to resend the invitation if you'd still like to join." msgstr "若您仍希望加入,可请团队重新发送邀请。" -#: frappe/core/page/permission_manager/permission_manager_help.html:17 -msgid "You can change Submitted documents by cancelling them and then, amending them." -msgstr "您可以通过撤销已提交的文件,然后再修订单据。" - #: frappe/public/js/frappe/logtypes.js:21 msgid "You can change the retention policy from {0}." msgstr "可在 {0} 中设置日志保留天数让系统自动删除过期数据" @@ -30489,7 +30749,7 @@ msgstr "如多个用户通过相同网络登录,请设置一个大一点的数 msgid "You can try changing the filters of your report." msgstr "可尝试变更报表过滤条件" -#: frappe/core/page/permission_manager/permission_manager_help.html:27 +#: frappe/core/page/permission_manager/permission_manager_help.html:94 msgid "You can use Customize Form to set levels on fields." msgstr "可以使用定制表单设置字段的权限级别。" @@ -30519,6 +30779,10 @@ msgstr "您已取消此文档{1}" msgid "You cannot create a dashboard chart from single DocTypes" msgstr "不能为单记录单据类型创建统计图表" +#: frappe/share.py:246 +msgid "You cannot share `{0}` on {1} `{2}` as you do not have `{0}` permission on `{1}`" +msgstr "" + #: frappe/custom/doctype/customize_form/customize_form.py:390 msgid "You cannot unset 'Read Only' for field {0}" msgstr "你不能为字段{0}取消“只读”设置" @@ -30545,7 +30809,6 @@ msgid "You changed {0} to {1}" msgstr "您已将{0}改为{1}" #: frappe/public/js/frappe/form/footer/form_timeline.js:140 -#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:152 msgid "You created this" msgstr "你创建了本单据" @@ -30554,11 +30817,7 @@ msgctxt "Form timeline" msgid "You created this document {0}" msgstr "您于{0}创建本文档" -#: frappe/client.py:420 -msgid "You do not have Read or Select Permissions for {}" -msgstr "您对{}无读取或选择权限" - -#: frappe/public/js/frappe/request.js:177 +#: frappe/public/js/frappe/request.js:175 msgid "You do not have enough permissions to access this resource. Please contact your manager to get access." msgstr "您没有足够的权限来访问该资源。请联系您的经理,以获得访问权。" @@ -30570,15 +30829,19 @@ msgstr "您未被授权完成此操作" msgid "You do not have import permission for {0}" msgstr "" -#: frappe/database/query.py:910 +#: frappe/database/query.py:943 +msgid "You do not have permission to access child table field: {0}" +msgstr "" + +#: frappe/database/query.py:953 msgid "You do not have permission to access field: {0}" msgstr "您无权访问字段:{0}" -#: frappe/desk/query_report.py:969 +#: frappe/desk/query_report.py:968 msgid "You do not have permission to access {0}: {1}." msgstr "您无权访问{0}:{1}。" -#: frappe/public/js/frappe/form/form.js:963 +#: frappe/public/js/frappe/form/form.js:992 msgid "You do not have permissions to cancel all linked documents." msgstr "没有权限取消所有关联的单据" @@ -30614,7 +30877,7 @@ msgstr "您已成功注销" msgid "You have hit the row size limit on database table: {0}" msgstr "已达到数据库表{0}的行大小限制" -#: frappe/public/js/frappe/list/bulk_operations.js:412 +#: frappe/public/js/frappe/list/bulk_operations.js:426 msgid "You have not entered a value. The field will be set to empty." msgstr "未输入字段值,字段值将被设为空值" @@ -30634,7 +30897,7 @@ msgstr "待查看{0}" msgid "You haven't added any Dashboard Charts or Number Cards yet." msgstr "尚未创建统计图表或数字卡" -#: frappe/public/js/frappe/list/list_view.js:504 +#: frappe/public/js/frappe/list/list_view.js:507 msgid "You haven't created a {0} yet" msgstr "暂无数据 {0}" @@ -30643,7 +30906,6 @@ msgid "You hit the rate limit because of too many requests. Please try after som msgstr "请求过多触发速率限制,请稍后重试" #: frappe/public/js/frappe/form/footer/form_timeline.js:151 -#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:141 msgid "You last edited this" msgstr "你最新修订了本单据" @@ -30659,12 +30921,12 @@ msgstr "必须登录才能使用此表单" msgid "You must login to submit this form" msgstr "您必须登录才能提交此表单" -#: frappe/model/document.py:391 +#: frappe/model/document.py:390 msgid "You need the '{0}' permission on {1} {2} to perform this action." msgstr "执行此操作需要{1} {2}的'{0}'权限" #: frappe/desk/doctype/workspace/workspace.py:129 -#: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py:75 +#: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py:71 msgid "You need to be Workspace Manager to delete a public workspace." msgstr "需为工作区管理员才能删除公共工作区" @@ -30672,7 +30934,7 @@ msgstr "需为工作区管理员才能删除公共工作区" msgid "You need to be Workspace Manager to edit this document" msgstr "您需要是工作空间管理员才能编辑此文档" -#: frappe/www/attribution.py:16 +#: frappe/www/attribution.py:15 msgid "You need to be a system user to access this page." msgstr "您需要是系统用户才能访问此页面" @@ -30724,7 +30986,7 @@ msgstr "您需要{0} {1}的写入权限才能合并" msgid "You need write permission on {0} {1} to rename" msgstr "您需要{0} {1}的写入权限才能重命名" -#: frappe/client.py:452 +#: frappe/client.py:501 msgid "You need {0} permission to fetch values from {1} {2}" msgstr "您需要{0}权限才能从{1} {2}获取值" @@ -30771,7 +31033,7 @@ msgstr "您取消了对该单据的关注" msgid "You viewed this" msgstr "您查看了此内容" -#: frappe/public/js/frappe/router.js:653 +#: frappe/public/js/frappe/router.js:658 msgid "You will be redirected to:" msgstr "您将被重定向至:" @@ -30848,7 +31110,7 @@ msgstr "您的电子邮件地址" msgid "Your exported report: {0}" msgstr "您导出的报告:{0}" -#: frappe/public/js/frappe/web_form/web_form.js:452 +#: frappe/public/js/frappe/web_form/web_form.js:448 msgid "Your form has been successfully updated" msgstr "您的表单已成功更新" @@ -30890,7 +31152,7 @@ msgstr "您的报告正在后台生成。报告准备就绪后,您将在{0}收 msgid "Your session has expired, please login again to continue." msgstr "您的会话已过期,请再次登录以继续。" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:17 +#: frappe/public/js/frappe/ui/toolbar/navbar.html:7 msgid "Your site is undergoing maintenance or being updated." msgstr "站点正在维护或更新中" @@ -30912,7 +31174,7 @@ msgstr "零表示资料更新后立即发送" msgid "[Action taken by {0}]" msgstr "[操作由{0}执行]" -#: frappe/database/database.py:361 +#: frappe/database/database.py:367 msgid "`as_iterator` only works with `as_list=True` or `as_dict=True`" msgstr "`as_iterator`仅在使用`as_list=True`或`as_dict=True`时有效" @@ -30931,7 +31193,7 @@ msgstr "新增" msgid "amend" msgstr "修订" -#: frappe/public/js/frappe/utils/utils.js:394 frappe/utils/data.py:1563 +#: frappe/public/js/frappe/utils/utils.js:396 frappe/utils/data.py:1563 msgid "and" msgstr "和" @@ -30954,7 +31216,7 @@ msgstr "角色" msgid "cProfile Output" msgstr "cProfile输出" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:323 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:297 msgid "calendar" msgstr "日历" @@ -30970,7 +31232,9 @@ msgid "canceled" msgstr "取消" #. Option for the 'PDF Generator' (Select) field in DocType 'Print Format' +#. Option for the 'PDF Generator' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_format/print_format.json +#: frappe/printing/doctype/print_settings/print_settings.json msgid "chrome" msgstr "Chrome浏览器" @@ -30994,7 +31258,7 @@ msgid "cyan" msgstr "青色" #: frappe/public/js/frappe/form/controls/duration.js:219 -#: frappe/public/js/frappe/utils/utils.js:1163 +#: frappe/public/js/frappe/utils/utils.js:1192 msgctxt "Days (Field: Duration)" msgid "d" msgstr "天" @@ -31052,7 +31316,7 @@ msgstr "删除" msgid "descending" msgstr "降序" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:225 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:232 msgid "document type..., e.g. customer" msgstr "单据类型...,如客户" @@ -31062,7 +31326,7 @@ msgstr "单据类型...,如客户" msgid "e.g. \"Support\", \"Sales\", \"Jerry Yang\"" msgstr "例如“支持“,”销售“,”杨杰“" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:250 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:257 msgid "e.g. (55 + 434) / 4 or =Math.sin(Math.PI/2)..." msgstr "例如:(55 + 434)/ 4 =或Math.sin(Math.PI / 2)..." @@ -31104,12 +31368,16 @@ msgstr "Emacs编辑器" msgid "email" msgstr "电子邮件" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:344 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:318 msgid "email inbox" msgstr "电子邮件收件箱" -#: frappe/permissions.py:431 frappe/permissions.py:442 -#: frappe/public/js/frappe/form/controls/link.js:585 +#: frappe/permissions.py:437 frappe/permissions.py:448 +msgid "empty" +msgstr "空" + +#: frappe/public/js/frappe/form/controls/link.js:594 +msgctxt "Comparison value is empty" msgid "empty" msgstr "空" @@ -31165,12 +31433,12 @@ msgid "gzip not found in PATH! This is required to take a backup." msgstr "在PATH中找不到gzip!这是进行备份的必要条件" #: frappe/public/js/frappe/form/controls/duration.js:220 -#: frappe/public/js/frappe/utils/utils.js:1167 +#: frappe/public/js/frappe/utils/utils.js:1196 msgctxt "Hours (Field: Duration)" msgid "h" msgstr "小时" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:334 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:308 msgid "hub" msgstr "集市(Hub)网站" @@ -31185,6 +31453,20 @@ msgstr "图标" msgid "import" msgstr "导入" +#: frappe/public/js/frappe/form/controls/link.js:631 +#: frappe/public/js/frappe/form/controls/link.js:636 +#: frappe/public/js/frappe/form/controls/link.js:649 +#: frappe/public/js/frappe/form/controls/link.js:656 +msgid "is disabled" +msgstr "" + +#: frappe/public/js/frappe/form/controls/link.js:630 +#: frappe/public/js/frappe/form/controls/link.js:637 +#: frappe/public/js/frappe/form/controls/link.js:650 +#: frappe/public/js/frappe/form/controls/link.js:655 +msgid "is enabled" +msgstr "" + #: frappe/templates/signup.html:11 frappe/www/login.html:11 msgid "jane@example.com" msgstr "jane@example.com" @@ -31224,16 +31506,11 @@ msgid "long" msgstr "长整型" #: frappe/public/js/frappe/form/controls/duration.js:221 -#: frappe/public/js/frappe/utils/utils.js:1171 +#: frappe/public/js/frappe/utils/utils.js:1200 msgctxt "Minutes (Field: Duration)" msgid "m" msgstr "月" -#. Option for the 'Navbar Style' (Select) field in DocType 'Desktop Settings' -#: frappe/desk/doctype/desktop_settings/desktop_settings.json -msgid "macOS Launchpad" -msgstr "" - #: frappe/model/rename_doc.py:215 msgid "merged {0} into {1}" msgstr "{0}合并为{1}" @@ -31252,15 +31529,15 @@ msgstr "月-日-年" msgid "mm/dd/yyyy" msgstr "月/日/年" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:240 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:247 msgid "module name..." msgstr "模块名称..." -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:182 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:171 msgid "new" msgstr "新建" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:220 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:227 msgid "new type of document" msgstr "单据新类型" @@ -31322,7 +31599,7 @@ msgstr "变更" msgid "on_update_after_submit" msgstr "提交后变更" -#: frappe/public/js/frappe/utils/utils.js:391 frappe/www/login.html:90 +#: frappe/public/js/frappe/utils/utils.js:393 frappe/www/login.html:90 #: frappe/www/login.py:112 msgid "or" msgstr "或" @@ -31395,7 +31672,7 @@ msgid "restored {0} as {1}" msgstr "恢复{0}为{1}" #: frappe/public/js/frappe/form/controls/duration.js:222 -#: frappe/public/js/frappe/utils/utils.js:1175 +#: frappe/public/js/frappe/utils/utils.js:1204 msgctxt "Seconds (Field: Duration)" msgid "s" msgstr "秒" @@ -31479,11 +31756,11 @@ msgstr "字符串值,例如{0}或uid={0},ou=users,dc=example,dc=com" msgid "submit" msgstr "提交" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:235 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:242 msgid "tag name..., e.g. #tag" msgstr "标签名称...,例如#标签" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:230 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:237 msgid "text in document type" msgstr "文件类型的文本" @@ -31581,11 +31858,13 @@ msgid "when clicked on element it will focus popover if present." msgstr "点击元素时如果存在弹出框将获得焦点" #. Option for the 'PDF Generator' (Select) field in DocType 'Print Format' +#. Option for the 'PDF Generator' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_format/print_format.json +#: frappe/printing/doctype/print_settings/print_settings.json msgid "wkhtmltopdf" msgstr "wkhtmltopdf工具" -#: frappe/printing/page/print/print.js:681 +#: frappe/printing/page/print/print.js:689 msgid "wkhtmltopdf 0.12.x (with patched qt)." msgstr "wkhtmltopdf 0.12.x(带补丁的qt)" @@ -31621,11 +31900,11 @@ msgstr "年-月-日" msgid "{0}" msgstr "{0}" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:217 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:204 msgid "{0} ${skip_list ? \"\" : type}" msgstr "{0} ${skip_list ? \"\" : 类型}" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:229 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:209 msgid "{0} ${type}" msgstr "{0} ${type}" @@ -31642,8 +31921,8 @@ msgstr "{0}({1})(至少1行)" msgid "{0} ({1}) - {2}%" msgstr "{0}({1})- {2}%" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:446 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:450 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:448 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:452 msgid "{0} = {1}" msgstr "{0} = {1}" @@ -31656,13 +31935,13 @@ msgid "{0} Chart" msgstr "{0}图表" #: frappe/core/page/dashboard_view/dashboard_view.js:67 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:391 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:392 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:361 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:362 #: frappe/public/js/frappe/views/dashboard/dashboard_view.js:12 msgid "{0} Dashboard" msgstr "{0}数据面板" -#: frappe/public/js/frappe/form/grid_row.js:486 +#: frappe/public/js/frappe/form/grid_row.js:488 #: frappe/public/js/frappe/list/list_settings.js:225 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:178 msgid "{0} Fields" @@ -31696,11 +31975,11 @@ msgstr "{0} 月" msgid "{0} Map" msgstr "{0}地图" -#: frappe/public/js/frappe/form/quick_entry.js:122 +#: frappe/public/js/frappe/form/quick_entry.js:135 msgid "{0} Name" msgstr "{0}单据编号(名称)" -#: frappe/model/base_document.py:1259 +#: frappe/model/base_document.py:1276 msgid "{0} Not allowed to change {1} after submission from {2} to {3}" msgstr "{0} 提交后不允许将 {1} 从 {2} 修改为 {3}" @@ -31708,7 +31987,7 @@ msgstr "{0} 提交后不允许将 {1} 从 {2} 修改为 {3}" msgid "{0} Report" msgstr "{0}报表" -#: frappe/public/js/frappe/views/reports/query_report.js:967 +#: frappe/public/js/frappe/views/reports/query_report.js:984 msgid "{0} Reports" msgstr "{0}报告" @@ -31721,11 +32000,11 @@ msgid "{0} Tree" msgstr "{0} 树" #: frappe/public/js/frappe/form/footer/form_timeline.js:128 -#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:130 +#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:152 msgid "{0} Web page views" msgstr "{0}次网页浏览" -#: frappe/public/js/frappe/form/link_selector.js:225 +#: frappe/public/js/frappe/form/link_selector.js:234 msgid "{0} added" msgstr "{0} 成功添加" @@ -31787,7 +32066,7 @@ msgctxt "Form timeline" msgid "{0} cancelled this document {1}" msgstr "{0}于{1}取消了此文档" -#: frappe/model/document.py:583 +#: frappe/model/document.py:582 msgid "{0} cannot be amended because it is not cancelled. Please cancel the document before creating an amendment." msgstr "{0}未被取消,无法修订。请在创建修订前取消该文档" @@ -31816,16 +32095,19 @@ msgctxt "Form timeline" msgid "{0} changed {1} to {2}" msgstr "{0}将{1}更改为{2}" -#: frappe/core/doctype/doctype/doctype.py:1620 +#: frappe/core/doctype/doctype/doctype.py:1634 msgid "{0} contains an invalid Fetch From expression, Fetch From can't be self-referential." msgstr "{0}包含无效的Fetch From表达式,不能自我引用" +#: frappe/public/js/frappe/form/controls/link.js:669 +msgid "{0} contains {1}" +msgstr "" + #: frappe/public/js/frappe/views/interaction.js:261 msgid "{0} created successfully" msgstr "{0}已成功创建" #: frappe/public/js/frappe/form/footer/form_timeline.js:141 -#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:153 msgid "{0} created this" msgstr "{0} 创建了本单据" @@ -31842,11 +32124,19 @@ msgstr "{0} 天" msgid "{0} days ago" msgstr "{0}天前" +#: frappe/public/js/frappe/form/controls/link.js:671 +msgid "{0} does not contain {1}" +msgstr "" + #: frappe/website/doctype/website_settings/website_settings.py:96 #: frappe/website/doctype/website_settings/website_settings.py:116 msgid "{0} does not exist in row {1}" msgstr "{0}不存在于第{1}行中" +#: frappe/public/js/frappe/form/controls/link.js:644 +msgid "{0} equals {1}" +msgstr "" + #: frappe/database/mariadb/schema.py:141 frappe/database/postgres/schema.py:187 msgid "{0} field cannot be set as unique in {1}, as there are non-unique existing values" msgstr "{0}字段不能在{1}中设置为唯一,因为这里存在非唯一的数值" @@ -31871,7 +32161,7 @@ msgstr "{0}小时" msgid "{0} has already assigned default value for {1}." msgstr "{0}已为{1}分派了默认值。" -#: frappe/database/query.py:1158 +#: frappe/database/query.py:1202 msgid "{0} has invalid backtick notation: {1}" msgstr "" @@ -31892,7 +32182,11 @@ msgstr "如果{1}秒内未自动跳转,请点击{0}" msgid "{0} in row {1} cannot have both URL and child items" msgstr "行{1}中的{0}不能同时有URL和子项" -#: frappe/core/doctype/doctype/doctype.py:949 +#: frappe/public/js/frappe/form/controls/link.js:710 +msgid "{0} is a descendant of {1}" +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:952 msgid "{0} is a mandatory field" msgstr "{0}是必填字段" @@ -31900,7 +32194,15 @@ msgstr "{0}是必填字段" msgid "{0} is a not a valid zip file" msgstr "{0}不是有效的zip文件" -#: frappe/core/doctype/doctype/doctype.py:1633 +#: frappe/public/js/frappe/form/controls/link.js:674 +msgid "{0} is after {1}" +msgstr "" + +#: frappe/public/js/frappe/form/controls/link.js:712 +msgid "{0} is an ancestor of {1}" +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1647 msgid "{0} is an invalid Data field." msgstr "{0}是无效的数据字段" @@ -31908,6 +32210,15 @@ msgstr "{0}是无效的数据字段" msgid "{0} is an invalid email address in 'Recipients'" msgstr "{0}是“收件人”中的无效电子邮件地址" +#: frappe/public/js/frappe/form/controls/link.js:679 +msgid "{0} is before {1}" +msgstr "" + +#: frappe/public/js/frappe/form/controls/link.js:708 +msgid "{0} is between {1}" +msgstr "" + +#: frappe/public/js/frappe/form/controls/link.js:705 #: frappe/public/js/frappe/views/reports/report_view.js:1464 msgid "{0} is between {1} and {2}" msgstr "{0}介于{1}和{2}之间" @@ -31917,22 +32228,36 @@ msgstr "{0}介于{1}和{2}之间" msgid "{0} is currently {1}" msgstr "{0}当前状态为{1}" +#: frappe/public/js/frappe/form/controls/link.js:642 +#: frappe/public/js/frappe/form/controls/link.js:660 +msgid "{0} is disabled" +msgstr "" + +#: frappe/public/js/frappe/form/controls/link.js:641 +#: frappe/public/js/frappe/form/controls/link.js:661 +msgid "{0} is enabled" +msgstr "" + #: frappe/public/js/frappe/views/reports/report_view.js:1433 msgid "{0} is equal to {1}" msgstr "{0}等于{1}" +#: frappe/public/js/frappe/form/controls/link.js:686 #: frappe/public/js/frappe/views/reports/report_view.js:1453 msgid "{0} is greater than or equal to {1}" msgstr "{0}大于或等于{1}" +#: frappe/public/js/frappe/form/controls/link.js:676 #: frappe/public/js/frappe/views/reports/report_view.js:1443 msgid "{0} is greater than {1}" msgstr "{0}大于{1}" +#: frappe/public/js/frappe/form/controls/link.js:691 #: frappe/public/js/frappe/views/reports/report_view.js:1458 msgid "{0} is less than or equal to {1}" msgstr "{0}小于或等于{1}" +#: frappe/public/js/frappe/form/controls/link.js:681 #: frappe/public/js/frappe/views/reports/report_view.js:1448 msgid "{0} is less than {1}" msgstr "{0}小于{1}" @@ -31945,10 +32270,14 @@ msgstr "{0}类似于{1}" msgid "{0} is mandatory" msgstr "{0}是必填项" -#: frappe/database/query.py:826 +#: frappe/database/query.py:860 msgid "{0} is not a child table of {1}" msgstr "{0}不是{1}的子表" +#: frappe/public/js/frappe/form/controls/link.js:714 +msgid "{0} is not a descendant of {1}" +msgstr "" + #: frappe/core/doctype/document_naming_rule/document_naming_rule.py:50 msgid "{0} is not a field of doctype {1}" msgstr "{0}不是文档类型{1}的字段" @@ -31965,12 +32294,12 @@ msgstr "{0}不是有效的日历,正在重定向到默认日历" msgid "{0} is not a valid Cron expression." msgstr "{0}不是有效的Cron表达式" -#: frappe/public/js/frappe/form/controls/dynamic_link.js:23 +#: frappe/public/js/frappe/form/controls/dynamic_link.js:25 msgid "{0} is not a valid DocType for Dynamic Link" msgstr "{0}不是有效的动态链接文档类型" #: frappe/email/doctype/email_group/email_group.py:140 -#: frappe/utils/__init__.py:198 frappe/utils/__init__.py:213 +#: frappe/utils/__init__.py:189 frappe/utils/__init__.py:204 msgid "{0} is not a valid Email Address" msgstr "{0} 不是有效的邮箱地址" @@ -31978,23 +32307,23 @@ msgstr "{0} 不是有效的邮箱地址" msgid "{0} is not a valid ISO 3166 ALPHA-2 code." msgstr "{0}不是有效的ISO 3166 ALPHA-2代码" -#: frappe/utils/__init__.py:176 +#: frappe/utils/__init__.py:167 msgid "{0} is not a valid Name" msgstr "{0}不是有效的名称" -#: frappe/utils/__init__.py:155 +#: frappe/utils/__init__.py:146 msgid "{0} is not a valid Phone Number" msgstr "{0}不是有效的电话号码" -#: frappe/model/workflow.py:245 +#: frappe/model/workflow.py:266 msgid "{0} is not a valid Workflow State. Please update your Workflow and try again." msgstr "{0}不是有效的工作流状态。请更新您的工作流,然后重试。" -#: frappe/permissions.py:824 +#: frappe/permissions.py:830 msgid "{0} is not a valid parent DocType for {1}" msgstr "{0}不是{1}的有效父文档类型" -#: frappe/permissions.py:844 +#: frappe/permissions.py:850 msgid "{0} is not a valid parentfield for {1}" msgstr "{0}不是{1}的有效父字段" @@ -32010,6 +32339,11 @@ msgstr "{0}不是zip文件" msgid "{0} is not an allowed role for {1}" msgstr "{0}不是{1}的允许角色" +#: frappe/public/js/frappe/form/controls/link.js:716 +msgid "{0} is not an ancestor of {1}" +msgstr "" + +#: frappe/public/js/frappe/form/controls/link.js:663 #: frappe/public/js/frappe/views/reports/report_view.js:1438 msgid "{0} is not equal to {1}" msgstr "{0}不等于{1}" @@ -32018,10 +32352,12 @@ msgstr "{0}不等于{1}" msgid "{0} is not like {1}" msgstr "{0}与{1}不相似" +#: frappe/public/js/frappe/form/controls/link.js:667 #: frappe/public/js/frappe/views/reports/report_view.js:1479 msgid "{0} is not one of {1}" msgstr "{0}不属于{1}" +#: frappe/public/js/frappe/form/controls/link.js:697 #: frappe/public/js/frappe/views/reports/report_view.js:1489 msgid "{0} is not set" msgstr "{0}未设置" @@ -32030,36 +32366,50 @@ msgstr "{0}未设置" msgid "{0} is now default print format for {1} doctype" msgstr "{0}现在是{1}类型的默认打印格式" +#: frappe/public/js/frappe/form/controls/link.js:684 +msgid "{0} is on or after {1}" +msgstr "" + +#: frappe/public/js/frappe/form/controls/link.js:689 +msgid "{0} is on or before {1}" +msgstr "" + +#: frappe/public/js/frappe/form/controls/link.js:665 #: frappe/public/js/frappe/views/reports/report_view.js:1472 msgid "{0} is one of {1}" msgstr "{0}属于{1}" #: frappe/email/doctype/email_account/email_account.py:304 -#: frappe/model/naming.py:226 +#: frappe/model/naming.py:224 #: frappe/printing/doctype/print_format/print_format.py:101 #: frappe/printing/doctype/print_format/print_format.py:104 #: frappe/utils/csvutils.py:156 msgid "{0} is required" msgstr "{0}是必填项" +#: frappe/public/js/frappe/form/controls/link.js:694 #: frappe/public/js/frappe/views/reports/report_view.js:1488 msgid "{0} is set" msgstr "{0}已设置" +#: frappe/public/js/frappe/form/controls/link.js:718 #: frappe/public/js/frappe/views/reports/report_view.js:1467 msgid "{0} is within {1}" msgstr "{0}在{1}范围内" -#: frappe/public/js/frappe/list/list_view.js:1844 +#: frappe/public/js/frappe/form/controls/link.js:699 +msgid "{0} is {1}" +msgstr "" + +#: frappe/public/js/frappe/list/list_view.js:1852 msgid "{0} items selected" msgstr "已选{0}条记录" -#: frappe/core/doctype/user/user.py:1458 +#: frappe/core/doctype/user/user.py:1461 msgid "{0} just impersonated as you. They gave this reason: {1}" msgstr "{0} 因为 {1} 原因以你的帐号登录了系统" #: frappe/public/js/frappe/form/footer/form_timeline.js:152 -#: frappe/public/js/frappe/form/sidebar/form_sidebar.js:142 msgid "{0} last edited this" msgstr "{0} 最新修订了本单据" @@ -32087,35 +32437,35 @@ msgstr "{0}分钟前" msgid "{0} months ago" msgstr "{0}个月前" -#: frappe/model/document.py:1861 +#: frappe/model/document.py:1860 msgid "{0} must be after {1}" msgstr "{0}必须在{1}之后" -#: frappe/model/document.py:1613 +#: frappe/model/document.py:1612 msgid "{0} must be beginning with '{1}'" msgstr "{0}必须以'{1}'开头" -#: frappe/model/document.py:1615 +#: frappe/model/document.py:1614 msgid "{0} must be equal to '{1}'" msgstr "{0}必须等于'{1}'" -#: frappe/model/document.py:1611 +#: frappe/model/document.py:1610 msgid "{0} must be none of {1}" msgstr "{0}不能是{1}中的任何一项" -#: frappe/model/document.py:1609 frappe/utils/csvutils.py:161 +#: frappe/model/document.py:1608 frappe/utils/csvutils.py:161 msgid "{0} must be one of {1}" msgstr "{0}必须属于{1}" -#: frappe/model/base_document.py:977 +#: frappe/model/base_document.py:994 msgid "{0} must be set first" msgstr "{0}必须首先设置" -#: frappe/model/base_document.py:830 +#: frappe/model/base_document.py:849 msgid "{0} must be unique" msgstr "{0}必须是唯一的" -#: frappe/model/document.py:1617 +#: frappe/model/document.py:1616 msgid "{0} must be {1} {2}" msgstr "{0}必须为{1}{2}" @@ -32132,11 +32482,11 @@ msgid "{0} not allowed to be renamed" msgstr "{0}不允许改名" #: frappe/core/doctype/report/report.py:432 -#: frappe/public/js/frappe/list/list_view.js:1221 +#: frappe/public/js/frappe/list/list_view.js:1229 msgid "{0} of {1}" msgstr "第{0}项 / 共{1}项" -#: frappe/public/js/frappe/list/list_view.js:1223 +#: frappe/public/js/frappe/list/list_view.js:1231 msgid "{0} of {1} ({2} rows with children)" msgstr "{0} / {1} ({2} 行有子记录)" @@ -32165,7 +32515,7 @@ msgstr "{0}条记录将保留{1}天" msgid "{0} records deleted" msgstr "已删除{0}条记录" -#: frappe/public/js/frappe/data_import/data_exporter.js:229 +#: frappe/public/js/frappe/data_import/data_exporter.js:230 msgid "{0} records will be exported" msgstr "将导出 {0} 笔记录" @@ -32190,7 +32540,7 @@ msgstr "{0}从{2}移除了{1}行" msgid "{0} role does not have permission on any doctype" msgstr "角色 {0} 无单据类型权限" -#: frappe/model/document.py:1852 +#: frappe/model/document.py:1851 msgid "{0} row #{1}:" msgstr "{0}第{1}行:" @@ -32204,7 +32554,7 @@ msgctxt "User added rows to child table" msgid "{0} rows to {1}" msgstr "{0}行至{1}" -#: frappe/desk/query_report.py:701 +#: frappe/desk/query_report.py:700 msgid "{0} saved successfully" msgstr "{0}已成功保存" @@ -32212,7 +32562,7 @@ msgstr "{0}已成功保存" msgid "{0} self assigned this task: {1}" msgstr "{0}分派了待办给自己:{1}" -#: frappe/share.py:229 +#: frappe/share.py:262 msgid "{0} shared a document {1} {2} with you" msgstr "{0}分享了单据{1} {2}给你" @@ -32280,7 +32630,7 @@ msgstr "{0} 周" msgid "{0} weeks ago" msgstr "{0}周前" -#: frappe/core/page/permission_manager/permission_manager.js:378 +#: frappe/core/page/permission_manager/permission_manager.js:379 msgid "{0} with the role {1}" msgstr "" @@ -32292,7 +32642,7 @@ msgstr "{0}年前" msgid "{0} years ago" msgstr "{0}年前" -#: frappe/public/js/frappe/form/link_selector.js:219 +#: frappe/public/js/frappe/form/link_selector.js:228 msgid "{0} {1} added" msgstr "已添加{0} {1}" @@ -32300,11 +32650,11 @@ msgstr "已添加{0} {1}" msgid "{0} {1} added to Dashboard {2}" msgstr "{0}{1}已添加到仪表盘{2}" -#: frappe/model/base_document.py:763 frappe/model/rename_doc.py:110 +#: frappe/model/base_document.py:768 frappe/model/rename_doc.py:110 msgid "{0} {1} already exists" msgstr "{0} {1}已经存在" -#: frappe/model/base_document.py:1088 +#: frappe/model/base_document.py:1105 msgid "{0} {1} cannot be \"{2}\". It should be one of \"{3}\"" msgstr "{0} {1}不能为“{2}”。只能是“{3}”其中一个" @@ -32316,11 +32666,11 @@ msgstr "{0} {1}不能是一个叶节点,因为它有下级" msgid "{0} {1} does not exist, select a new target to merge" msgstr "{0} {1}不存在,选择一个新的目标合并" -#: frappe/public/js/frappe/form/form.js:954 +#: frappe/public/js/frappe/form/form.js:983 msgid "{0} {1} is linked with the following submitted documents: {2}" msgstr "{0} {1} 关联了下列已提交单据: {2}" -#: frappe/model/document.py:278 frappe/permissions.py:586 +#: frappe/model/document.py:277 frappe/permissions.py:592 msgid "{0} {1} not found" msgstr "{0} {1}未找到" @@ -32328,7 +32678,7 @@ msgstr "{0} {1}未找到" msgid "{0} {1}: Submitted Record cannot be deleted. You must {2} Cancel {3} it first." msgstr "{0} {1}: 已提交单据不可被删除. 应 {2} 先取消 {3}." -#: frappe/model/base_document.py:1220 +#: frappe/model/base_document.py:1237 msgid "{0}, Row {1}" msgstr "{0},第{1}行" @@ -32336,79 +32686,51 @@ msgstr "{0},第{1}行" msgid "{0}/{1} complete | Please leave this tab open until completion." msgstr "已完成{0}/{1} | 请保持此标签页开启直至完成" -#: frappe/model/base_document.py:1225 +#: frappe/model/base_document.py:1242 msgid "{0}: '{1}' ({3}) will get truncated, as max characters allowed is {2}" msgstr "{0}:“{1}”({3})将被截断,因最大允许字符数为{2}" -#: frappe/core/doctype/doctype/doctype.py:1835 -msgid "{0}: Cannot set Amend without Cancel" -msgstr "{0} :没有“取消”的情况下不能设置“修订”" - -#: frappe/core/doctype/doctype/doctype.py:1853 -msgid "{0}: Cannot set Assign Amend if not Submittable" -msgstr "{0} :没有“提交”的情况下不能分派“修订”" - -#: frappe/core/doctype/doctype/doctype.py:1851 -msgid "{0}: Cannot set Assign Submit if not Submittable" -msgstr "{0} :没有“提交”的情况下不能分派“提交”" - -#: frappe/core/doctype/doctype/doctype.py:1830 -msgid "{0}: Cannot set Cancel without Submit" -msgstr "{0} :没有“提交”的情况下不能分派“取消”" - -#: frappe/core/doctype/doctype/doctype.py:1837 -msgid "{0}: Cannot set Import without Create" -msgstr "{0} :没有“创建”的情况下不能分派“导入”" - -#: frappe/core/doctype/doctype/doctype.py:1833 -msgid "{0}: Cannot set Submit, Cancel, Amend without Write" -msgstr "{0} :没有写入的情况下不能设置“提交”,“取消”,“修订”" - -#: frappe/core/doctype/doctype/doctype.py:1857 -msgid "{0}: Cannot set import as {1} is not importable" -msgstr "{0} :{1}无法导入所以不能设置“导入”" - #: frappe/automation/doctype/auto_repeat/auto_repeat.py:436 msgid "{0}: Failed to attach new recurring document. To enable attaching document in the auto repeat notification email, enable {1} in Print Settings" msgstr "{0}:附加新周期性文档失败。需在打印设置中启用{1}以在自动重复通知邮件中附加文档" -#: frappe/core/doctype/doctype/doctype.py:1441 +#: frappe/core/doctype/doctype/doctype.py:1455 msgid "{0}: Field '{1}' cannot be set as Unique as it has non-unique values" msgstr "{0}:字段“{1}”无法设置为“唯一”,因为它具有非唯一值" -#: frappe/core/doctype/doctype/doctype.py:1349 +#: frappe/core/doctype/doctype/doctype.py:1363 msgid "{0}: Field {1} in row {2} cannot be hidden and mandatory without default" msgstr "{0}:行{2}中的字段{1}无法隐藏,并且在没有默认情况下是必需的" -#: frappe/core/doctype/doctype/doctype.py:1308 +#: frappe/core/doctype/doctype/doctype.py:1322 msgid "{0}: Field {1} of type {2} cannot be mandatory" msgstr "{0}:类型{2}的字段{1}不能是必需的" -#: frappe/core/doctype/doctype/doctype.py:1296 +#: frappe/core/doctype/doctype/doctype.py:1310 msgid "{0}: Fieldname {1} appears multiple times in rows {2}" msgstr "{0}:字段名{1}在行{2}中多次出现" -#: frappe/core/doctype/doctype/doctype.py:1428 +#: frappe/core/doctype/doctype/doctype.py:1442 msgid "{0}: Fieldtype {1} for {2} cannot be unique" msgstr "{0}:{2}的字段类型{1}不能是唯一的" -#: frappe/core/doctype/doctype/doctype.py:1790 +#: frappe/core/doctype/doctype/doctype.py:1804 msgid "{0}: No basic permissions set" msgstr "{0} :基本权限未设置" -#: frappe/core/doctype/doctype/doctype.py:1804 +#: frappe/core/doctype/doctype/doctype.py:1818 msgid "{0}: Only one rule allowed with the same Role, Level and {1}" msgstr "{0}:具有相同的角色,级别和允许只有一个规则{1}" -#: frappe/core/doctype/doctype/doctype.py:1330 +#: frappe/core/doctype/doctype/doctype.py:1344 msgid "{0}: Options must be a valid DocType for field {1} in row {2}" msgstr "{0}:选项必须是行{2}中字段{1}的有效DocType" -#: frappe/core/doctype/doctype/doctype.py:1319 +#: frappe/core/doctype/doctype/doctype.py:1333 msgid "{0}: Options required for Link or Table type field {1} in row {2}" msgstr "{0}:请为第{2}行中的链接或表类型字段{1}维护选项信息" -#: frappe/core/doctype/doctype/doctype.py:1337 +#: frappe/core/doctype/doctype/doctype.py:1351 msgid "{0}: Options {1} must be the same as doctype name {2} for the field {3}" msgstr "{0}:选项{1}必须与字段{3}的单据类型名称{2}相同" @@ -32416,15 +32738,59 @@ msgstr "{0}:选项{1}必须与字段{3}的单据类型名称{2}相同" msgid "{0}: Other permission rules may also apply" msgstr "{0}:其它权限也可能适用" -#: frappe/core/doctype/doctype/doctype.py:1819 +#: frappe/core/doctype/doctype/doctype.py:1833 msgid "{0}: Permission at level 0 must be set before higher levels are set" msgstr "{0} :更高级别的权限设置前请先设置0级权限" +#: frappe/core/doctype/doctype/doctype.py:1910 +msgid "{0}: The 'Amend' permission cannot be granted for a non-submittable DocType." +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1858 +msgid "{0}: The 'Amend' permission cannot be granted without the 'Create' permission." +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1845 +msgid "{0}: The 'Cancel' permission cannot be granted without the 'Submit' permission." +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1892 +msgid "{0}: The 'Export' permission was removed because it cannot be granted for a 'single' DocType." +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1918 +msgid "{0}: The 'Import' permission cannot be granted for a non-importable DocType." +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1864 +msgid "{0}: The 'Import' permission cannot be granted without the 'Create' permission." +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1884 +msgid "{0}: The 'Import' permission was removed because it cannot be granted for a 'single' DocType." +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1876 +msgid "{0}: The 'Report' permission was removed because it cannot be granted for a 'single' DocType." +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1903 +msgid "{0}: The 'Submit' permission cannot be granted for a non-submittable DocType." +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1852 +msgid "{0}: The 'Submit', 'Cancel', and 'Amend' permissions cannot be granted without the 'Write' permission." +msgstr "" + #: frappe/public/js/frappe/form/controls/data.js:51 msgid "{0}: You can increase the limit for the field if required via {1}" msgstr "{0}:可通过{1}按需调整字段限制" -#: frappe/core/doctype/doctype/doctype.py:1283 +#: frappe/core/doctype/doctype/doctype.py:1297 +msgid "{0}: fieldname cannot be set to reserved field {1} in DocType" +msgstr "" + +#: frappe/core/doctype/doctype/doctype.py:1288 msgid "{0}: fieldname cannot be set to reserved keyword {1}" msgstr "{0}:字段名不能设为保留关键字{1}" @@ -32437,15 +32803,15 @@ msgstr "{0}:{1}" msgid "{0}: {1} is set to state {2}" msgstr "{0}:{1} 状态已变更为 {2}" -#: frappe/public/js/frappe/views/reports/query_report.js:1313 +#: frappe/public/js/frappe/views/reports/query_report.js:1330 msgid "{0}: {1} vs {2}" msgstr "{0}:{1}与{2}" -#: frappe/core/doctype/doctype/doctype.py:1449 +#: frappe/core/doctype/doctype/doctype.py:1463 msgid "{0}:Fieldtype {1} for {2} cannot be indexed" msgstr "{0}:无法为{2}的字段类型{1}生成索引" -#: frappe/public/js/frappe/form/quick_entry.js:195 +#: frappe/public/js/frappe/form/quick_entry.js:222 msgid "{1} saved" msgstr "{1}已保存" @@ -32465,11 +32831,11 @@ msgstr "已选择{count}行" msgid "{count} rows selected" msgstr "已选择{count}行" -#: frappe/core/doctype/doctype/doctype.py:1503 +#: frappe/core/doctype/doctype/doctype.py:1517 msgid "{{{0}}} is not a valid fieldname pattern. It should be {{field_name}}." msgstr "{{{0}}}是不是一个有效的字段名模式。它应该是{{FIELD_NAME}}。" -#: frappe/public/js/frappe/form/form.js:524 +#: frappe/public/js/frappe/form/form.js:525 msgid "{} Complete" msgstr "已完成{}" From 06d55e6bb73260958f9f20f94a6358612cdd3359 Mon Sep 17 00:00:00 2001 From: salauddin06 Date: Sat, 24 Jan 2026 13:14:09 +0530 Subject: [PATCH 709/812] docs: fix grammar in Philosophy section Add missing verb "are" in Applications sentence --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 53980bbef9..6a323de3ab 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Full-stack web application framework that uses Python and MariaDB on the server Started in 2005, Frappe Framework was inspired by the Semantic Web. The "big idea" behind semantic web was of a framework that not only described how information is shown (like headings, body etc), but also what it means, like name, address etc. -By creating a web framework that allowed for easy definition of metadata, it made building complex applications easy. Applications usually designed around how users interact with a system, but not based on semantics of the underlying system. Applications built on semantics end up being much more consistent and extensible. +By creating a web framework that allowed for easy definition of metadata, it made building complex applications easy. Applications are usually designed around how users interact with a system, but not based on semantics of the underlying system. Applications built on semantics end up being much more consistent and extensible. The first application built on Framework was ERPNext, a beast with more than 700 object types. Framework is not for the light hearted - it is not the first thing you might want to learn if you are beginning to learn web programming, but if you are ready to do real work, then Framework is the right tool for the job. From ead918c53fc9e0ef7a0983bfe402565002cb0125 Mon Sep 17 00:00:00 2001 From: AarDG10 Date: Sat, 24 Jan 2026 13:22:05 +0530 Subject: [PATCH 710/812] fix(user_permission): fix dead click effect on applicable for field --- frappe/core/doctype/user_permission/user_permission.js | 4 +++- frappe/core/doctype/user_permission/user_permission.py | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/frappe/core/doctype/user_permission/user_permission.js b/frappe/core/doctype/user_permission/user_permission.js index 39ee4348b9..6e63c881c8 100644 --- a/frappe/core/doctype/user_permission/user_permission.js +++ b/frappe/core/doctype/user_permission/user_permission.js @@ -15,7 +15,9 @@ frappe.ui.form.on("User Permission", { frm.set_query("applicable_for", () => { return { query: "frappe.core.doctype.user_permission.user_permission.get_applicable_for_doctype_list", - doctype: frm.doc.allow, + filters: { + doctype: frm.doc.allow, + }, }; }); }, diff --git a/frappe/core/doctype/user_permission/user_permission.py b/frappe/core/doctype/user_permission/user_permission.py index b0407d1a01..9001b2893d 100644 --- a/frappe/core/doctype/user_permission/user_permission.py +++ b/frappe/core/doctype/user_permission/user_permission.py @@ -161,7 +161,8 @@ def user_permission_exists(user, allow, for_value, applicable_for=None): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs def get_applicable_for_doctype_list(doctype, txt, searchfield, start, page_len, filters): - linked_doctypes_map = get_linked_doctypes(doctype, True) + actual_doctype = filters.get("doctype") + linked_doctypes_map = get_linked_doctypes(actual_doctype, True) linked_doctypes = [] for linked_doctype, linked_doctype_values in linked_doctypes_map.items(): @@ -170,7 +171,7 @@ def get_applicable_for_doctype_list(doctype, txt, searchfield, start, page_len, if child_doctype: linked_doctypes.append(child_doctype) - linked_doctypes += [doctype] + linked_doctypes += [actual_doctype] if txt: linked_doctypes = [d for d in linked_doctypes if txt.lower() in d.lower()] From df7e007d087fcdf1ac3a1768c372684a245646f6 Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Sat, 24 Jan 2026 22:14:00 +0000 Subject: [PATCH 711/812] fix: show sidebar in print format builder --- .../page/print_format_builder/print_format_builder.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/frappe/printing/page/print_format_builder/print_format_builder.js b/frappe/printing/page/print_format_builder/print_format_builder.js index bae82ba040..162908ac89 100644 --- a/frappe/printing/page/print_format_builder/print_format_builder.js +++ b/frappe/printing/page/print_format_builder/print_format_builder.js @@ -58,9 +58,17 @@ frappe.PrintFormatBuilder = class PrintFormatBuilder { this.setup_section_settings(); this.setup_column_selector(); this.setup_edit_custom_html(); + this.show_sidebar(); // $(this.page.sidebar).css({"position": 'fixed'}); // $(this.page.main).parent().css({"margin-left": '16.67%'}); } + show_sidebar() { + $(".layout-side-section").css({ + display: "block", + flex: "0 0 260px", + maxWidth: "260px", + }); + } show_start() { this.page.main.html(frappe.render_template("print_format_builder_start", {})); this.page.clear_actions(); From 6a14b964f022d7175f272d105e7e95f78c6950eb Mon Sep 17 00:00:00 2001 From: MochaMind Date: Sun, 25 Jan 2026 11:33:12 +0530 Subject: [PATCH 712/812] fix: sync translations from crowdin (#36295) * fix: Hungarian translations * fix: Serbian (Cyrillic) translations * fix: Serbian (Latin) translations --- frappe/locale/hu.po | 10 +-- frappe/locale/sr.po | 162 ++++++++++++++++++++--------------------- frappe/locale/sr_CS.po | 152 +++++++++++++++++++------------------- 3 files changed, 162 insertions(+), 162 deletions(-) diff --git a/frappe/locale/hu.po b/frappe/locale/hu.po index 1ccce767b6..ab6a138fa5 100644 --- a/frappe/locale/hu.po +++ b/frappe/locale/hu.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" "POT-Creation-Date: 2026-01-22 13:03+0000\n" -"PO-Revision-Date: 2026-01-23 13:49\n" +"PO-Revision-Date: 2026-01-24 14:52\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Hungarian\n" "MIME-Version: 1.0\n" @@ -1272,7 +1272,7 @@ msgstr "Szegély Hozzáadása Felül" #: frappe/public/js/frappe/views/communication.js:195 msgid "Add CSS" -msgstr "" +msgstr "CSS Hozzáadása" #: frappe/desk/doctype/number_card/number_card.js:37 msgid "Add Card to Dashboard" @@ -1461,7 +1461,7 @@ msgstr "Mező Hozzáadása" #: frappe/public/js/frappe/form/grid.js:66 msgid "Add multiple" -msgstr "" +msgstr "Több hozzáadása" #: frappe/public/js/form_builder/components/Sidebar.vue:46 #: frappe/public/js/form_builder/components/Tabs.vue:153 @@ -1478,7 +1478,7 @@ msgstr "Oldaltörés Hozzáadása" #: frappe/public/js/frappe/form/grid.js:66 msgid "Add row" -msgstr "" +msgstr "Sor hozzáadása" #: frappe/custom/doctype/client_script/client_script.js:18 msgid "Add script for Child Table" @@ -1794,7 +1794,7 @@ msgstr "Igazítás Értéke" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Alignment" -msgstr "" +msgstr "Igazítás" #. Name of a role #. Option for the 'Frequency' (Select) field in DocType 'Scheduled Job Type' diff --git a/frappe/locale/sr.po b/frappe/locale/sr.po index 841e6f31be..1560bdc634 100644 --- a/frappe/locale/sr.po +++ b/frappe/locale/sr.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" "POT-Creation-Date: 2026-01-22 13:03+0000\n" -"PO-Revision-Date: 2026-01-23 13:50\n" +"PO-Revision-Date: 2026-01-24 14:52\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Serbian (Cyrillic)\n" "MIME-Version: 1.0\n" @@ -1272,7 +1272,7 @@ msgstr "Додај ивицу на врху" #: frappe/public/js/frappe/views/communication.js:195 msgid "Add CSS" -msgstr "" +msgstr "Додај CSS" #: frappe/desk/doctype/number_card/number_card.js:37 msgid "Add Card to Dashboard" @@ -1461,7 +1461,7 @@ msgstr "Додај поље" #: frappe/public/js/frappe/form/grid.js:66 msgid "Add multiple" -msgstr "" +msgstr "Додај више" #: frappe/public/js/form_builder/components/Sidebar.vue:46 #: frappe/public/js/form_builder/components/Tabs.vue:153 @@ -1478,7 +1478,7 @@ msgstr "Додај прелом странице" #: frappe/public/js/frappe/form/grid.js:66 msgid "Add row" -msgstr "" +msgstr "Додај ред" #: frappe/custom/doctype/client_script/client_script.js:18 msgid "Add script for Child Table" @@ -1794,7 +1794,7 @@ msgstr "Поравнај вредности" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Alignment" -msgstr "" +msgstr "Поравнање" #. Name of a role #. Option for the 'Frequency' (Select) field in DocType 'Scheduled Job Type' @@ -2555,7 +2555,7 @@ msgstr "Примени филтере" #: frappe/custom/doctype/customize_form/customize_form.js:271 msgid "Apply Module Export Filter" -msgstr "" +msgstr "Примени филтер за извоз модула" #. Label of the apply_strict_user_permissions (Check) field in DocType 'System #. Settings' @@ -2637,7 +2637,7 @@ msgstr "Да ли сте сигурни да желите да очистите #: frappe/public/js/frappe/form/grid.js:319 msgid "Are you sure you want to delete all {0} rows?" -msgstr "" +msgstr "Да ли сте сигурни да желите да обришете свих {0} редова?" #: frappe/public/js/frappe/form/controls/attach.js:38 #: frappe/public/js/frappe/form/sidebar/attachments.js:135 @@ -4292,7 +4292,7 @@ msgstr "Није могуће креирати приватни радни пр #: frappe/desk/doctype/desktop_icon/desktop_icon.py:54 msgid "Cannot delete Desktop Icon '{0}' as it is restricted" -msgstr "" +msgstr "Није могуће обрисати иконицу на радној површини '{0}' јер је ограничена" #: frappe/core/doctype/file/file.py:175 msgid "Cannot delete Home and Attachments folders" @@ -4660,7 +4660,7 @@ msgstr "Провери евиденцију грешака за више инф #. 'Workflow Document State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Check this if the Update Value is a formula or expression (e.g. doc.amount * 2). Leave unchecked for plain text values." -msgstr "" +msgstr "Означите ово уколико је вредност ажурирања формула или израз (нпр. doc.amount * 2). Оставите неозначено за вредности обичног текста." #: frappe/website/doctype/website_settings/website_settings.js:147 msgid "Check this if you don't want users to sign up for an account on your site. Users won't get desk access unless you explicitly provide it." @@ -6045,11 +6045,11 @@ msgstr "Креирано од стране" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:174 msgid "Created By You" -msgstr "" +msgstr "Креирано од стране Вас" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:175 msgid "Created By {0}" -msgstr "" +msgstr "Креирано од стране {0}" #: frappe/workflow/doctype/workflow/workflow.py:65 msgid "Created Custom Field {0} in {1}" @@ -7131,7 +7131,7 @@ msgstr "Обриши све" #: frappe/public/js/frappe/form/grid.js:367 msgid "Delete all {0} rows" -msgstr "" +msgstr "Обриши свих {0} редова" #: frappe/public/js/frappe/views/reports/query_report.js:964 msgid "Delete and Generate New" @@ -7163,7 +7163,7 @@ msgstr "Обриши целу картицу заједно са пољима" #: frappe/public/js/frappe/form/grid.js:237 msgid "Delete row" -msgstr "" +msgstr "Обриши ред" #: frappe/public/js/form_builder/components/Section.vue:132 msgctxt "Button text" @@ -7191,7 +7191,7 @@ msgstr "Трајно обриши {0} ставке?" #: frappe/public/js/frappe/form/grid.js:240 msgid "Delete {0} rows" -msgstr "" +msgstr "Обриши {0} редова" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #. Option for the 'Status' (Select) field in DocType 'Personal Data Deletion @@ -7426,7 +7426,7 @@ msgstr "Иконица радне површине" #. Name of a DocType #: frappe/desk/doctype/desktop_layout/desktop_layout.json msgid "Desktop Layout" -msgstr "" +msgstr "Распоред радне површине" #. Name of a DocType #: frappe/desk/doctype/desktop_settings/desktop_settings.json @@ -8011,7 +8011,7 @@ msgstr "Назив документа" #: frappe/client.py:420 msgid "Document Name must not be empty" -msgstr "" +msgstr "Назив документа не сме бити празан" #. Name of a DocType #: frappe/core/doctype/document_naming_rule/document_naming_rule.json @@ -8484,15 +8484,15 @@ msgstr "Дупликат поља" #: frappe/public/js/frappe/form/grid.js:238 msgid "Duplicate row" -msgstr "" +msgstr "Дупликат реда" #: frappe/public/js/frappe/form/grid.js:66 msgid "Duplicate rows" -msgstr "" +msgstr "Дупликат редова" #: frappe/public/js/frappe/form/grid.js:241 msgid "Duplicate {0} rows" -msgstr "" +msgstr "Дупликат {0} редова" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Label of the duration (Float) field in DocType 'Recorder' @@ -9458,7 +9458,7 @@ msgstr "Унесите назив датотеке" #: frappe/public/js/form_builder/components/FieldProperties.vue:65 msgid "Enter list of Options, each on a new line." -msgstr "" +msgstr "Унесите листу опција, свака у новом реду." #. Description of the 'Static Parameters' (Table) field in DocType 'SMS #. Settings' @@ -9628,7 +9628,7 @@ msgstr "Грешке" #. Document State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Evaluate as Expression" -msgstr "" +msgstr "Евалуирај као израз" #. Option for the 'Type' (Select) field in DocType 'Communication' #. Name of a DocType @@ -9937,7 +9937,7 @@ msgstr "Извоз није дозвољен. Неопходна је улога #: frappe/custom/doctype/customize_form/customize_form.js:272 msgid "Export only customizations assigned to the selected module.
Note: You must set the Module (for export) field on Custom Field and Property Setter records before applying this filter.

Warning: Customizations from other modules will be excluded.

" -msgstr "" +msgstr "Извези само прилагођавања додељена изабраном модулу.
Напомена: Пре примене овог филтера, морате подесити поље Модул (за извоз) на записима прилагођених поља и поставки својства.

Упозорење:Прилагођавања из других модула биће изузета.

" #. Description of the 'Export without main header' (Check) field in DocType #. 'Data Export' @@ -10043,7 +10043,7 @@ msgstr "Неуспешни задаци" #. Label of a number card in the Users Workspace #: frappe/core/workspace/users/users.json msgid "Failed Login Attempts" -msgstr "" +msgstr "Неуспешни покушаји пријављивања" #. Label of the failed_logins (Int) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json @@ -10575,7 +10575,7 @@ msgstr "Филтер" #. Label of the filter_area (HTML) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Filter Area" -msgstr "" +msgstr "Подручје филтера" #. Label of the filter_data (Section Break) field in DocType 'Auto Email #. Report' @@ -10633,7 +10633,7 @@ msgstr "Филтрирани по \"{0}\"" #: frappe/public/js/frappe/form/controls/link.js:729 msgid "Filtered by: {0}." -msgstr "" +msgstr "Филтрирано по: {0}." #. Label of the filters (Code) field in DocType 'Access Log' #. Label of the filters_sb (Section Break) field in DocType 'Prepared Report' @@ -11939,7 +11939,7 @@ msgstr "Уређивач HTML" #: frappe/public/js/frappe/views/communication.js:142 msgid "HTML Message" -msgstr "" +msgstr "HTML порука" #. Label of the page (HTML Editor) field in DocType 'Access Log' #: frappe/core/doctype/access_log/access_log.json @@ -12195,7 +12195,7 @@ msgstr "Сакривена поља" #: frappe/public/js/frappe/views/reports/query_report.js:1716 msgid "Hidden columns include:
{0}" -msgstr "" +msgstr "Скривене колоне укључују:
{0}" #. Option for the 'Page Number' (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json @@ -12533,7 +12533,7 @@ msgstr "Иконица" #. Label of the icon_image (Attach) field in DocType 'Desktop Icon' #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Icon Image" -msgstr "" +msgstr "Слика иконице" #. Label of the icon_style (Select) field in DocType 'Desktop Settings' #: frappe/desk/doctype/desktop_settings/desktop_settings.json @@ -12547,7 +12547,7 @@ msgstr "Врста иконице" #: frappe/desk/page/desktop/desktop.js:1004 msgid "Icon is not correctly configured please check the workspace sidebar to it" -msgstr "" +msgstr "Иконица није правилно подешена, молимо Вас да проверите бочну траку радног простора" #. Description of the 'Icon' (Select) field in DocType 'Workflow State' #: frappe/workflow/doctype/workflow_state/workflow_state.json @@ -13767,7 +13767,7 @@ msgstr "Неважећи статус документа" #: frappe/model/workflow.py:112 msgid "Invalid expression in Workflow Update Value: {0}" -msgstr "" +msgstr "Неважећи израз у вредности ажурирања радног тока: {0}" #: frappe/public/js/frappe/utils/dashboard_utils.js:229 msgid "Invalid expression set in filter {0}" @@ -14743,11 +14743,11 @@ msgstr "Последња активност" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:163 msgid "Last Edited by You" -msgstr "" +msgstr "Последњу измену извршили сте Ви" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:164 msgid "Last Edited by {0}" -msgstr "" +msgstr "Последња измена је извршена од стране {0}" #. Label of the last_execution (Datetime) field in DocType 'Scheduled Job Type' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json @@ -15539,7 +15539,7 @@ msgstr "Пријава" #. Label of a chart in the Users Workspace #: frappe/core/workspace/users/users.json msgid "Login Activity" -msgstr "" +msgstr "Активност пријављивања" #. Label of the login_after (Int) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -16933,7 +16933,7 @@ msgstr "Иди на главни садржај" #. Label of the form_navigation_buttons (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Navigation Buttons" -msgstr "" +msgstr "Навигациона дугмад" #. Label of the navigation_settings_section (Section Break) field in DocType #. 'User' @@ -17248,7 +17248,7 @@ msgstr "Шаблон за следећу радњу путем имејла" #: frappe/core/doctype/success_action/success_action.js:44 msgid "Next Actions" -msgstr "" +msgstr "Следеће акције" #. Label of the next_actions_html (HTML) field in DocType 'Success Action' #: frappe/core/doctype/success_action/success_action.json @@ -18615,7 +18615,7 @@ msgstr "Отвори подешавања" #: frappe/public/js/frappe/form/toolbar.js:472 msgid "Open Sidebar" -msgstr "" +msgstr "Отвори бочну траку" #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Open Source Applications for the Web" @@ -18826,7 +18826,7 @@ msgstr "Оријентација" #: frappe/core/doctype/version/version.py:241 msgid "Original" -msgstr "" +msgstr "Оригинал" #: frappe/core/doctype/version/version_view.html:74 #: frappe/core/doctype/version/version_view.html:139 @@ -21128,12 +21128,12 @@ msgstr "Необрађени имејл" #: frappe/core/doctype/communication/email.py:95 msgid "Raw HTML can be used only with Email Templates having 'Use HTML' checked. Proceeding with plain text email." -msgstr "" +msgstr "Необрађени HTML може се користити само на шаблонима имејла који имају означено поље 'Користите HTML'. Наставља се са имејлом у обичном тексту." #. Description of the 'Send As Raw HTML' (Check) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json msgid "Raw HTML emails are rendered as complete Jinja templates. Otherwise, emails are wrapped in the standard.html email template, which inserts brand_logo, header and footer." -msgstr "" +msgstr "Необрађени HTML имејла се приказују као комплетни Jinja шаблони. У супротном, имејл се убацује у standard.html шаблон имејла, који укључује brand_logo, заглавље и подножје." #. Label of the raw_printing (Check) field in DocType 'Print Format' #. Label of the raw_printing_section (Section Break) field in DocType 'Print @@ -22443,7 +22443,7 @@ msgstr "Ограничи IP адресу" #. Label of the restrict_removal (Check) field in DocType 'Desktop Icon' #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Restrict Removal" -msgstr "" +msgstr "Ограничи уклањање" #. Label of the restrict_to_domain (Link) field in DocType 'DocType' #. Label of the restrict_to_domain (Link) field in DocType 'Module Def' @@ -22783,7 +22783,7 @@ msgstr "Ред #" #: frappe/core/doctype/doctype/doctype.py:1930 #: frappe/core/doctype/doctype/doctype.py:1940 msgid "Row # {0}: Non-administrator users cannot add the role {1} to a custom DocType." -msgstr "" +msgstr "Ред # {0}: Корисници који нису администратори не могу додати улогу {1} у прилагођеном DocType-у." #: frappe/model/base_document.py:1100 msgid "Row #{0}:" @@ -23842,7 +23842,7 @@ msgstr "Пошаљи обавештење на" #. Label of the raw_html (Check) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json msgid "Send As Raw HTML" -msgstr "" +msgstr "Пошаљи као необрађени HTML" #. Label of the send_email_alert (Check) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json @@ -24131,7 +24131,7 @@ msgstr "Функционалност серверских скрипти ниј #: frappe/public/js/frappe/file_uploader/FileUploader.vue:641 msgid "Server error during upload. The file might be corrupted." -msgstr "" +msgstr "Серверска грешка током отпремања. Фајл може бити оштећен." #: frappe/public/js/frappe/request.js:252 msgid "Server failed to process this request because of a concurrent conflicting request. Please try again." @@ -26388,7 +26388,7 @@ msgstr "Подешавање система" #. Label of a number card in the Users Workspace #: frappe/core/workspace/users/users.json msgid "System Users" -msgstr "" +msgstr "Системски корисници" #. Description of the 'Allow Roles' (Table MultiSelect) field in DocType #. 'Module Onboarding' @@ -26410,7 +26410,7 @@ msgstr "URI услова коришћења" #. Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Tab" -msgstr "" +msgstr "Картица" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -26958,7 +26958,7 @@ msgstr "Корисник може прегледати излазне факту #: frappe/model/base_document.py:817 msgid "The value of the field {0} is too long in the {1} document. To resolve this issue, please reduce the value length or change the {0} field Type to Long Text using customize form, and then try again." -msgstr "" +msgstr "Вредност поља {0} је предугачка у документу {1}. Да бисте решили овај проблем, смањите дужину вредности или промените врсту поља {0} у дужи текст користећи прилагођавање обрасца, а затим покушајте поново." #: frappe/public/js/frappe/form/controls/data.js:25 msgid "The value you pasted was {0} characters long. Max allowed characters is {1}." @@ -27838,7 +27838,7 @@ msgstr "Превише задатака у позадини у реду чека #: frappe/templates/includes/login/login.js:291 msgid "Too many requests. Please try again later." -msgstr "" +msgstr "Превише захтева. Молимо Вас да покушате поново касније." #: frappe/core/doctype/user/user.py:1093 msgid "Too many users signed up recently, so the registration is disabled. Please try back in an hour" @@ -29386,7 +29386,7 @@ msgstr "Вредност коју треба поставити" #: frappe/model/base_document.py:820 msgid "Value Too Long" -msgstr "" +msgstr "Вредност је предугачка" #: frappe/model/base_document.py:1176 frappe/model/document.py:877 msgid "Value cannot be changed for {0}" @@ -29437,7 +29437,7 @@ msgstr "Вредност за валидацију" #. State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Value to set when this workflow state is applied. Use plain text (e.g. Approved) or an expression if “Evaluate as Expression” is enabled." -msgstr "" +msgstr "Вредност која се поставља када се примени ово стање радног тока. Користите обичан текст (нпр. Одобрено) или израз уколико је омогућено “Евалуирај као израз“." #: frappe/model/base_document.py:1246 msgid "Value too big" @@ -30002,7 +30002,7 @@ msgstr "Доступне теме веб-сајта" #. Label of a number card in the Users Workspace #: frappe/core/workspace/users/users.json msgid "Website Users" -msgstr "" +msgstr "Корисници веб-сајта" #. Label of a chart in the Website Workspace #: frappe/website/workspace/website/website.json @@ -30261,7 +30261,7 @@ msgstr "Стање документа у радном току" #: frappe/model/workflow.py:113 msgid "Workflow Evaluation Error" -msgstr "" +msgstr "Грешка у евалуацији радног тока" #. Label of the workflow_name (Data) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json @@ -30787,7 +30787,7 @@ msgstr "Не можете креирати графикон контролне #: frappe/share.py:246 msgid "You cannot share `{0}` on {1} `{2}` as you do not have `{0}` permission on `{1}`" -msgstr "" +msgstr "Не можете делити `{0}` на {1} `{2}` јер немате `{0}` дозволу на `{1}`" #: frappe/custom/doctype/customize_form/customize_form.py:390 msgid "You cannot unset 'Read Only' for field {0}" @@ -30837,7 +30837,7 @@ msgstr "Немате дозволу за увоз за {0}" #: frappe/database/query.py:943 msgid "You do not have permission to access child table field: {0}" -msgstr "" +msgstr "Немате дозволу за приступ пољу у зависној табели: {0}" #: frappe/database/query.py:953 msgid "You do not have permission to access field: {0}" @@ -31464,14 +31464,14 @@ msgstr "увоз" #: frappe/public/js/frappe/form/controls/link.js:649 #: frappe/public/js/frappe/form/controls/link.js:656 msgid "is disabled" -msgstr "" +msgstr "је онемогућено" #: frappe/public/js/frappe/form/controls/link.js:630 #: frappe/public/js/frappe/form/controls/link.js:637 #: frappe/public/js/frappe/form/controls/link.js:650 #: frappe/public/js/frappe/form/controls/link.js:655 msgid "is enabled" -msgstr "" +msgstr "је омогућено" #: frappe/templates/signup.html:11 frappe/www/login.html:11 msgid "jane@example.com" @@ -32107,7 +32107,7 @@ msgstr "{0} садржи неважећи израз функције преуз #: frappe/public/js/frappe/form/controls/link.js:669 msgid "{0} contains {1}" -msgstr "" +msgstr "{0} садржи {1}" #: frappe/public/js/frappe/views/interaction.js:261 msgid "{0} created successfully" @@ -32132,7 +32132,7 @@ msgstr "пре {0} дана" #: frappe/public/js/frappe/form/controls/link.js:671 msgid "{0} does not contain {1}" -msgstr "" +msgstr "{0} не садржи {1}" #: frappe/website/doctype/website_settings/website_settings.py:96 #: frappe/website/doctype/website_settings/website_settings.py:116 @@ -32141,7 +32141,7 @@ msgstr "{0} не постоји у реду {1}" #: frappe/public/js/frappe/form/controls/link.js:644 msgid "{0} equals {1}" -msgstr "" +msgstr "{0} је једнако {1}" #: frappe/database/mariadb/schema.py:141 frappe/database/postgres/schema.py:187 msgid "{0} field cannot be set as unique in {1}, as there are non-unique existing values" @@ -32190,7 +32190,7 @@ msgstr "{0} у реду {1} не може имати URL и зависне ст #: frappe/public/js/frappe/form/controls/link.js:710 msgid "{0} is a descendant of {1}" -msgstr "" +msgstr "{0} је потомак {1}" #: frappe/core/doctype/doctype/doctype.py:952 msgid "{0} is a mandatory field" @@ -32202,11 +32202,11 @@ msgstr "{0} није важећи зип фајл" #: frappe/public/js/frappe/form/controls/link.js:674 msgid "{0} is after {1}" -msgstr "" +msgstr "{0} је након {1}" #: frappe/public/js/frappe/form/controls/link.js:712 msgid "{0} is an ancestor of {1}" -msgstr "" +msgstr "{0} је надређен {1}" #: frappe/core/doctype/doctype/doctype.py:1647 msgid "{0} is an invalid Data field." @@ -32218,11 +32218,11 @@ msgstr "{0} није важећа имејл адреса у 'Примаоци'" #: frappe/public/js/frappe/form/controls/link.js:679 msgid "{0} is before {1}" -msgstr "" +msgstr "{0} је пре {1}" #: frappe/public/js/frappe/form/controls/link.js:708 msgid "{0} is between {1}" -msgstr "" +msgstr "{0} је између {1}" #: frappe/public/js/frappe/form/controls/link.js:705 #: frappe/public/js/frappe/views/reports/report_view.js:1464 @@ -32237,12 +32237,12 @@ msgstr "{0} је тренутно {1}" #: frappe/public/js/frappe/form/controls/link.js:642 #: frappe/public/js/frappe/form/controls/link.js:660 msgid "{0} is disabled" -msgstr "" +msgstr "{0} је онемогућен" #: frappe/public/js/frappe/form/controls/link.js:641 #: frappe/public/js/frappe/form/controls/link.js:661 msgid "{0} is enabled" -msgstr "" +msgstr "{0} је омогућен" #: frappe/public/js/frappe/views/reports/report_view.js:1433 msgid "{0} is equal to {1}" @@ -32282,7 +32282,7 @@ msgstr "{0} није зависна табела од {1}" #: frappe/public/js/frappe/form/controls/link.js:714 msgid "{0} is not a descendant of {1}" -msgstr "" +msgstr "{0} није потомак {1}" #: frappe/core/doctype/document_naming_rule/document_naming_rule.py:50 msgid "{0} is not a field of doctype {1}" @@ -32347,7 +32347,7 @@ msgstr "{0} није дозвољена улога за {1}" #: frappe/public/js/frappe/form/controls/link.js:716 msgid "{0} is not an ancestor of {1}" -msgstr "" +msgstr "{0} није надређен {1}" #: frappe/public/js/frappe/form/controls/link.js:663 #: frappe/public/js/frappe/views/reports/report_view.js:1438 @@ -32374,11 +32374,11 @@ msgstr "{0} је сада подразумевани формат за штам #: frappe/public/js/frappe/form/controls/link.js:684 msgid "{0} is on or after {1}" -msgstr "" +msgstr "{0} је на или након {1}" #: frappe/public/js/frappe/form/controls/link.js:689 msgid "{0} is on or before {1}" -msgstr "" +msgstr "{0} је на или пре {1}" #: frappe/public/js/frappe/form/controls/link.js:665 #: frappe/public/js/frappe/views/reports/report_view.js:1472 @@ -32405,7 +32405,7 @@ msgstr "{0} је унутар {1}" #: frappe/public/js/frappe/form/controls/link.js:699 msgid "{0} is {1}" -msgstr "" +msgstr "{0} је {1}" #: frappe/public/js/frappe/list/list_view.js:1852 msgid "{0} items selected" @@ -32750,43 +32750,43 @@ msgstr "{0}: Дозвола на нивоу 0 мора бити поставље #: frappe/core/doctype/doctype/doctype.py:1910 msgid "{0}: The 'Amend' permission cannot be granted for a non-submittable DocType." -msgstr "" +msgstr "{0}: Дозвола за 'Измени' не може бити додељена за DocType који се не може поднети." #: frappe/core/doctype/doctype/doctype.py:1858 msgid "{0}: The 'Amend' permission cannot be granted without the 'Create' permission." -msgstr "" +msgstr "{0}: Дозвола за 'Измени' не може бити додељена без дозволе 'Креирај'." #: frappe/core/doctype/doctype/doctype.py:1845 msgid "{0}: The 'Cancel' permission cannot be granted without the 'Submit' permission." -msgstr "" +msgstr "{0}: Дозвола за 'Откажи' не може бити додељена без дозволе 'Поднеси'." #: frappe/core/doctype/doctype/doctype.py:1892 msgid "{0}: The 'Export' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: Дозвола за 'Извоз' је уклоњена јер не може бити додељена за јединствени DocType." #: frappe/core/doctype/doctype/doctype.py:1918 msgid "{0}: The 'Import' permission cannot be granted for a non-importable DocType." -msgstr "" +msgstr "{0}: Дозвола за 'Увоз' не може бити додељена за DocType који се не може увозити." #: frappe/core/doctype/doctype/doctype.py:1864 msgid "{0}: The 'Import' permission cannot be granted without the 'Create' permission." -msgstr "" +msgstr "{0}: Дозвола за 'Увоз' не може бити додељена без дозволе 'Креирај'." #: frappe/core/doctype/doctype/doctype.py:1884 msgid "{0}: The 'Import' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: Дозвола за 'Увоз' је уклоњена јер не може бити додељена за јединствени DocType." #: frappe/core/doctype/doctype/doctype.py:1876 msgid "{0}: The 'Report' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: Дозвола за 'Извештај' је уклоњена јер не може бити додељена за јединствени DocType." #: frappe/core/doctype/doctype/doctype.py:1903 msgid "{0}: The 'Submit' permission cannot be granted for a non-submittable DocType." -msgstr "" +msgstr "{0}: Дозвола за 'Поднеси' не може бити додељена за DocType који се не може поднети." #: frappe/core/doctype/doctype/doctype.py:1852 msgid "{0}: The 'Submit', 'Cancel', and 'Amend' permissions cannot be granted without the 'Write' permission." -msgstr "" +msgstr "{0}: Дозволе 'Поднеси', 'Откажи' и 'Измени' не могу бити додељене без дозволе 'Измена'." #: frappe/public/js/frappe/form/controls/data.js:51 msgid "{0}: You can increase the limit for the field if required via {1}" @@ -32794,7 +32794,7 @@ msgstr "{0}: Можете повећати ограничење за ово по #: frappe/core/doctype/doctype/doctype.py:1297 msgid "{0}: fieldname cannot be set to reserved field {1} in DocType" -msgstr "" +msgstr "{0}: Назив поља не може бити постављен на резервисано поље {1} у DocType-у" #: frappe/core/doctype/doctype/doctype.py:1288 msgid "{0}: fieldname cannot be set to reserved keyword {1}" diff --git a/frappe/locale/sr_CS.po b/frappe/locale/sr_CS.po index 9a5ffea76d..d62ab6ef0b 100644 --- a/frappe/locale/sr_CS.po +++ b/frappe/locale/sr_CS.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" "POT-Creation-Date: 2026-01-22 13:03+0000\n" -"PO-Revision-Date: 2026-01-23 13:50\n" +"PO-Revision-Date: 2026-01-24 14:52\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Serbian (Latin)\n" "MIME-Version: 1.0\n" @@ -1462,7 +1462,7 @@ msgstr "Dodaj polje" #: frappe/public/js/frappe/form/grid.js:66 msgid "Add multiple" -msgstr "" +msgstr "Dodaj više" #: frappe/public/js/form_builder/components/Sidebar.vue:46 #: frappe/public/js/form_builder/components/Tabs.vue:153 @@ -1795,7 +1795,7 @@ msgstr "Poravnaj vrednosti" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Alignment" -msgstr "" +msgstr "Poravnanje" #. Name of a role #. Option for the 'Frequency' (Select) field in DocType 'Scheduled Job Type' @@ -2556,7 +2556,7 @@ msgstr "Primeni filtere" #: frappe/custom/doctype/customize_form/customize_form.js:271 msgid "Apply Module Export Filter" -msgstr "" +msgstr "Primeni filter za izvoz modula" #. Label of the apply_strict_user_permissions (Check) field in DocType 'System #. Settings' @@ -2638,7 +2638,7 @@ msgstr "Da li ste sigurni da želite da očistite dodeljene zadatke?" #: frappe/public/js/frappe/form/grid.js:319 msgid "Are you sure you want to delete all {0} rows?" -msgstr "" +msgstr "Da li ste sigurni da želite da obrišete svih {0} redova?" #: frappe/public/js/frappe/form/controls/attach.js:38 #: frappe/public/js/frappe/form/sidebar/attachments.js:135 @@ -4293,7 +4293,7 @@ msgstr "Nije moguće kreirati privatni radni prostor za ostale korisnike" #: frappe/desk/doctype/desktop_icon/desktop_icon.py:54 msgid "Cannot delete Desktop Icon '{0}' as it is restricted" -msgstr "" +msgstr "Nije moguće obrisati ikonicu na radnoj površini '{0}' jer je ograničena" #: frappe/core/doctype/file/file.py:175 msgid "Cannot delete Home and Attachments folders" @@ -4661,7 +4661,7 @@ msgstr "Proveri evidenciju grešaka za više informacija: {0}" #. 'Workflow Document State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Check this if the Update Value is a formula or expression (e.g. doc.amount * 2). Leave unchecked for plain text values." -msgstr "" +msgstr "Označite ovo ukoliko je vrednost ažuriranja formula ili izraz (npr. doc.amount * 2). Ostavite neoznačeno za vrednosti običnog teksta." #: frappe/website/doctype/website_settings/website_settings.js:147 msgid "Check this if you don't want users to sign up for an account on your site. Users won't get desk access unless you explicitly provide it." @@ -6046,11 +6046,11 @@ msgstr "Kreirano od strane" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:174 msgid "Created By You" -msgstr "" +msgstr "Kreirano od strane Vas" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:175 msgid "Created By {0}" -msgstr "" +msgstr "Kreirano od strane {0}" #: frappe/workflow/doctype/workflow/workflow.py:65 msgid "Created Custom Field {0} in {1}" @@ -7132,7 +7132,7 @@ msgstr "Obriši sve" #: frappe/public/js/frappe/form/grid.js:367 msgid "Delete all {0} rows" -msgstr "" +msgstr "Obriši svih {0} redova" #: frappe/public/js/frappe/views/reports/query_report.js:964 msgid "Delete and Generate New" @@ -7164,7 +7164,7 @@ msgstr "Obriši celu karticu zajedno sa poljima" #: frappe/public/js/frappe/form/grid.js:237 msgid "Delete row" -msgstr "" +msgstr "Obriši red" #: frappe/public/js/form_builder/components/Section.vue:132 msgctxt "Button text" @@ -7192,7 +7192,7 @@ msgstr "Trajno obriši {0} stavke?" #: frappe/public/js/frappe/form/grid.js:240 msgid "Delete {0} rows" -msgstr "" +msgstr "Obriši {0} redova" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #. Option for the 'Status' (Select) field in DocType 'Personal Data Deletion @@ -7427,7 +7427,7 @@ msgstr "Ikonica radne površine" #. Name of a DocType #: frappe/desk/doctype/desktop_layout/desktop_layout.json msgid "Desktop Layout" -msgstr "" +msgstr "Raspored radne površine" #. Name of a DocType #: frappe/desk/doctype/desktop_settings/desktop_settings.json @@ -8012,7 +8012,7 @@ msgstr "Naziv dokumenta" #: frappe/client.py:420 msgid "Document Name must not be empty" -msgstr "" +msgstr "Naziv dokumenta ne sme biti prazan" #. Name of a DocType #: frappe/core/doctype/document_naming_rule/document_naming_rule.json @@ -8485,15 +8485,15 @@ msgstr "Duplikat polja" #: frappe/public/js/frappe/form/grid.js:238 msgid "Duplicate row" -msgstr "" +msgstr "Duplikat reda" #: frappe/public/js/frappe/form/grid.js:66 msgid "Duplicate rows" -msgstr "" +msgstr "Duplikat redova" #: frappe/public/js/frappe/form/grid.js:241 msgid "Duplicate {0} rows" -msgstr "" +msgstr "Duplikat {0} redova" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Label of the duration (Float) field in DocType 'Recorder' @@ -9459,7 +9459,7 @@ msgstr "Unesite naziv datoteke" #: frappe/public/js/form_builder/components/FieldProperties.vue:65 msgid "Enter list of Options, each on a new line." -msgstr "" +msgstr "Unesite listu opcija, svaka u novom redu." #. Description of the 'Static Parameters' (Table) field in DocType 'SMS #. Settings' @@ -9629,7 +9629,7 @@ msgstr "Greške" #. Document State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Evaluate as Expression" -msgstr "" +msgstr "Evaluiraj kao izraz" #. Option for the 'Type' (Select) field in DocType 'Communication' #. Name of a DocType @@ -9938,7 +9938,7 @@ msgstr "Izvoz nije dozvoljen. Neophodna je uloga {0} za izvoz." #: frappe/custom/doctype/customize_form/customize_form.js:272 msgid "Export only customizations assigned to the selected module.
Note: You must set the Module (for export) field on Custom Field and Property Setter records before applying this filter.

Warning: Customizations from other modules will be excluded.

" -msgstr "" +msgstr "Izvezi samo prilagođavanja dodeljena izabranom modulu.
Napomena: Pre primene ovog filtera, morate podesiti polje Modul (za izvoz) na zapisima prilagođenih polja i postavki svojstva.

Upozorenje:Prilagođavanja iz drugih modula biće izuzeta.

" #. Description of the 'Export without main header' (Check) field in DocType #. 'Data Export' @@ -10044,7 +10044,7 @@ msgstr "Neuspešni zadaci" #. Label of a number card in the Users Workspace #: frappe/core/workspace/users/users.json msgid "Failed Login Attempts" -msgstr "" +msgstr "Neuspešni pokušaji prijavljivanja" #. Label of the failed_logins (Int) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json @@ -10576,7 +10576,7 @@ msgstr "Filter" #. Label of the filter_area (HTML) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Filter Area" -msgstr "" +msgstr "Područje filtera" #. Label of the filter_data (Section Break) field in DocType 'Auto Email #. Report' @@ -10634,7 +10634,7 @@ msgstr "Filtrirani po \"{0}\"" #: frappe/public/js/frappe/form/controls/link.js:729 msgid "Filtered by: {0}." -msgstr "" +msgstr "Filtrirano po: {0}." #. Label of the filters (Code) field in DocType 'Access Log' #. Label of the filters_sb (Section Break) field in DocType 'Prepared Report' @@ -11940,7 +11940,7 @@ msgstr "Uređivač HTML" #: frappe/public/js/frappe/views/communication.js:142 msgid "HTML Message" -msgstr "" +msgstr "HTML poruka" #. Label of the page (HTML Editor) field in DocType 'Access Log' #: frappe/core/doctype/access_log/access_log.json @@ -12196,7 +12196,7 @@ msgstr "Sakrivena polja" #: frappe/public/js/frappe/views/reports/query_report.js:1716 msgid "Hidden columns include:
{0}" -msgstr "" +msgstr "Skrivene kolone uključuju:
{0}" #. Option for the 'Page Number' (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json @@ -12534,7 +12534,7 @@ msgstr "Ikonica" #. Label of the icon_image (Attach) field in DocType 'Desktop Icon' #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Icon Image" -msgstr "" +msgstr "Slika ikonice" #. Label of the icon_style (Select) field in DocType 'Desktop Settings' #: frappe/desk/doctype/desktop_settings/desktop_settings.json @@ -12548,7 +12548,7 @@ msgstr "Vrsta ikonice" #: frappe/desk/page/desktop/desktop.js:1004 msgid "Icon is not correctly configured please check the workspace sidebar to it" -msgstr "" +msgstr "Ikonica nije pravilno podešena, molimo Vas da proverite bočnu traku radnog prostora" #. Description of the 'Icon' (Select) field in DocType 'Workflow State' #: frappe/workflow/doctype/workflow_state/workflow_state.json @@ -13768,7 +13768,7 @@ msgstr "Nevažeći status dokumenta" #: frappe/model/workflow.py:112 msgid "Invalid expression in Workflow Update Value: {0}" -msgstr "" +msgstr "Nevažeći izraz u vrednosti ažuriranja radnog toka: {0}" #: frappe/public/js/frappe/utils/dashboard_utils.js:229 msgid "Invalid expression set in filter {0}" @@ -14744,11 +14744,11 @@ msgstr "Poslednja aktivnost" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:163 msgid "Last Edited by You" -msgstr "" +msgstr "Poslednju izmenu izvršili ste Vi" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:164 msgid "Last Edited by {0}" -msgstr "" +msgstr "Poslednja izmena je izvršena od strane {0}" #. Label of the last_execution (Datetime) field in DocType 'Scheduled Job Type' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json @@ -15540,7 +15540,7 @@ msgstr "Prijava" #. Label of a chart in the Users Workspace #: frappe/core/workspace/users/users.json msgid "Login Activity" -msgstr "" +msgstr "Aktivnost prijavljivanja" #. Label of the login_after (Int) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -16934,7 +16934,7 @@ msgstr "Idi na glavni sadržaj" #. Label of the form_navigation_buttons (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Navigation Buttons" -msgstr "" +msgstr "Navigaciona dugmad" #. Label of the navigation_settings_section (Section Break) field in DocType #. 'User' @@ -17249,7 +17249,7 @@ msgstr "Šablon za sledeću radnju putem imejla" #: frappe/core/doctype/success_action/success_action.js:44 msgid "Next Actions" -msgstr "" +msgstr "Sledeće akcije" #. Label of the next_actions_html (HTML) field in DocType 'Success Action' #: frappe/core/doctype/success_action/success_action.json @@ -18616,7 +18616,7 @@ msgstr "Otvori podešavanja" #: frappe/public/js/frappe/form/toolbar.js:472 msgid "Open Sidebar" -msgstr "" +msgstr "Otvori bočnu traku" #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Open Source Applications for the Web" @@ -21129,12 +21129,12 @@ msgstr "Neobrađeni imejl" #: frappe/core/doctype/communication/email.py:95 msgid "Raw HTML can be used only with Email Templates having 'Use HTML' checked. Proceeding with plain text email." -msgstr "" +msgstr "Neobrađeni HTML može se koristiti samo sa šablonima imejla koji imaju označeno polje 'Koristite HTML'. Nastavlja se sa imejlom u običnom tekstu." #. Description of the 'Send As Raw HTML' (Check) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json msgid "Raw HTML emails are rendered as complete Jinja templates. Otherwise, emails are wrapped in the standard.html email template, which inserts brand_logo, header and footer." -msgstr "" +msgstr "Neobrađeni HTML imejla se prikazuju kao kompletni Jinja šabloni. U suprotnom, imejl se ubacuje u standard.html šablon imejla, koji uključuje brand_logo, zaglavlje i podnožje." #. Label of the raw_printing (Check) field in DocType 'Print Format' #. Label of the raw_printing_section (Section Break) field in DocType 'Print @@ -22444,7 +22444,7 @@ msgstr "Ograniči IP adresu" #. Label of the restrict_removal (Check) field in DocType 'Desktop Icon' #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Restrict Removal" -msgstr "" +msgstr "Ograniči uklanjanje" #. Label of the restrict_to_domain (Link) field in DocType 'DocType' #. Label of the restrict_to_domain (Link) field in DocType 'Module Def' @@ -22784,7 +22784,7 @@ msgstr "Red #" #: frappe/core/doctype/doctype/doctype.py:1930 #: frappe/core/doctype/doctype/doctype.py:1940 msgid "Row # {0}: Non-administrator users cannot add the role {1} to a custom DocType." -msgstr "" +msgstr "Red # {0}: Korisnici koji nisu administratori ne mogu dodati ulogu {1} u prilagođenom DocType-u." #: frappe/model/base_document.py:1100 msgid "Row #{0}:" @@ -23843,7 +23843,7 @@ msgstr "Pošalji obaveštenje na" #. Label of the raw_html (Check) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json msgid "Send As Raw HTML" -msgstr "" +msgstr "Pošalji kao neobrađeni HTML" #. Label of the send_email_alert (Check) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json @@ -24132,7 +24132,7 @@ msgstr "Funkcionalnost serverskih skripti nije dostupna na ovom sajtu." #: frappe/public/js/frappe/file_uploader/FileUploader.vue:641 msgid "Server error during upload. The file might be corrupted." -msgstr "" +msgstr "Serverska greška tokom otpremanja. Fajl može biti oštećen." #: frappe/public/js/frappe/request.js:252 msgid "Server failed to process this request because of a concurrent conflicting request. Please try again." @@ -26389,7 +26389,7 @@ msgstr "Podešavanje sistema" #. Label of a number card in the Users Workspace #: frappe/core/workspace/users/users.json msgid "System Users" -msgstr "" +msgstr "Sistemski korisnici" #. Description of the 'Allow Roles' (Table MultiSelect) field in DocType #. 'Module Onboarding' @@ -26411,7 +26411,7 @@ msgstr "URI uslova korišćenja" #. Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Tab" -msgstr "" +msgstr "Kartica" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -26959,7 +26959,7 @@ msgstr "Korisnik može pregledati izlazne fakture, ali ne može menjati vrednost #: frappe/model/base_document.py:817 msgid "The value of the field {0} is too long in the {1} document. To resolve this issue, please reduce the value length or change the {0} field Type to Long Text using customize form, and then try again." -msgstr "" +msgstr "Vrednost polja {0} je predugačka u dokumentu {1}. Da biste rešili ovaj problem, smanjite dužinu vrednosti ili promenite vrstu polja {0} u duži tekst koristeći prilagođavanje obrasca, a zatim pokušajte ponovo." #: frappe/public/js/frappe/form/controls/data.js:25 msgid "The value you pasted was {0} characters long. Max allowed characters is {1}." @@ -27839,7 +27839,7 @@ msgstr "Previše zadataka u pozadini u redu čekanja ({0}). Molimo Vas da pokuš #: frappe/templates/includes/login/login.js:291 msgid "Too many requests. Please try again later." -msgstr "" +msgstr "Previše zahteva. Molimo Vas da pokušate ponovo kasnije." #: frappe/core/doctype/user/user.py:1093 msgid "Too many users signed up recently, so the registration is disabled. Please try back in an hour" @@ -29386,7 +29386,7 @@ msgstr "Vrednost koju treba postaviti" #: frappe/model/base_document.py:820 msgid "Value Too Long" -msgstr "" +msgstr "Vrednost je predugačka" #: frappe/model/base_document.py:1176 frappe/model/document.py:877 msgid "Value cannot be changed for {0}" @@ -29437,7 +29437,7 @@ msgstr "Vrednost za validaciju" #. State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Value to set when this workflow state is applied. Use plain text (e.g. Approved) or an expression if “Evaluate as Expression” is enabled." -msgstr "" +msgstr "Vrednost koja se postavlja kada se primeni ovo stanje radnog toka. Koristite običan tekst (npr. Odobreno) ili izraz ukoliko je omogućeno “Evaluiraj kao izraz“." #: frappe/model/base_document.py:1246 msgid "Value too big" @@ -30002,7 +30002,7 @@ msgstr "Dostupne teme veb-sajta" #. Label of a number card in the Users Workspace #: frappe/core/workspace/users/users.json msgid "Website Users" -msgstr "" +msgstr "Korisnici veb-sajta" #. Label of a chart in the Website Workspace #: frappe/website/workspace/website/website.json @@ -30261,7 +30261,7 @@ msgstr "Stanje dokumenta u radnom toku" #: frappe/model/workflow.py:113 msgid "Workflow Evaluation Error" -msgstr "" +msgstr "Greška u evaluaciji radnog toka" #. Label of the workflow_name (Data) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json @@ -30787,7 +30787,7 @@ msgstr "Ne možete kreirati grafikon kontrolne table iz jednog DocType-a" #: frappe/share.py:246 msgid "You cannot share `{0}` on {1} `{2}` as you do not have `{0}` permission on `{1}`" -msgstr "" +msgstr "Ne možete deliti `{0}` na {1} `{2}` jer nemate `{0}` dozvolu na `{1}`" #: frappe/custom/doctype/customize_form/customize_form.py:390 msgid "You cannot unset 'Read Only' for field {0}" @@ -30837,7 +30837,7 @@ msgstr "Nemate dozvolu za uvoz za {0}" #: frappe/database/query.py:943 msgid "You do not have permission to access child table field: {0}" -msgstr "" +msgstr "Nemate dozvolu za pristup polju u zavisnoj tabeli: {0}" #: frappe/database/query.py:953 msgid "You do not have permission to access field: {0}" @@ -31464,14 +31464,14 @@ msgstr "uvoz" #: frappe/public/js/frappe/form/controls/link.js:649 #: frappe/public/js/frappe/form/controls/link.js:656 msgid "is disabled" -msgstr "" +msgstr "je onemogućeno" #: frappe/public/js/frappe/form/controls/link.js:630 #: frappe/public/js/frappe/form/controls/link.js:637 #: frappe/public/js/frappe/form/controls/link.js:650 #: frappe/public/js/frappe/form/controls/link.js:655 msgid "is enabled" -msgstr "" +msgstr "je omogućeno" #: frappe/templates/signup.html:11 frappe/www/login.html:11 msgid "jane@example.com" @@ -32141,7 +32141,7 @@ msgstr "{0} ne postoji u redu {1}" #: frappe/public/js/frappe/form/controls/link.js:644 msgid "{0} equals {1}" -msgstr "" +msgstr "{0} je jednako {1}" #: frappe/database/mariadb/schema.py:141 frappe/database/postgres/schema.py:187 msgid "{0} field cannot be set as unique in {1}, as there are non-unique existing values" @@ -32190,7 +32190,7 @@ msgstr "{0} u redu {1} ne može imati URL i zavisne stavke" #: frappe/public/js/frappe/form/controls/link.js:710 msgid "{0} is a descendant of {1}" -msgstr "" +msgstr "{0} je potomak {1}" #: frappe/core/doctype/doctype/doctype.py:952 msgid "{0} is a mandatory field" @@ -32202,11 +32202,11 @@ msgstr "{0} nije važeći zip fajl" #: frappe/public/js/frappe/form/controls/link.js:674 msgid "{0} is after {1}" -msgstr "" +msgstr "{0} je nakon {1}" #: frappe/public/js/frappe/form/controls/link.js:712 msgid "{0} is an ancestor of {1}" -msgstr "" +msgstr "{0} je nadređen {1}" #: frappe/core/doctype/doctype/doctype.py:1647 msgid "{0} is an invalid Data field." @@ -32218,11 +32218,11 @@ msgstr "{0} nije važeća imejl adresa u 'Primaoci'" #: frappe/public/js/frappe/form/controls/link.js:679 msgid "{0} is before {1}" -msgstr "" +msgstr "{0} je pre {1}" #: frappe/public/js/frappe/form/controls/link.js:708 msgid "{0} is between {1}" -msgstr "" +msgstr "{0} je između {1}" #: frappe/public/js/frappe/form/controls/link.js:705 #: frappe/public/js/frappe/views/reports/report_view.js:1464 @@ -32237,12 +32237,12 @@ msgstr "{0} je trenutno {1}" #: frappe/public/js/frappe/form/controls/link.js:642 #: frappe/public/js/frappe/form/controls/link.js:660 msgid "{0} is disabled" -msgstr "" +msgstr "{0} je onemogućen" #: frappe/public/js/frappe/form/controls/link.js:641 #: frappe/public/js/frappe/form/controls/link.js:661 msgid "{0} is enabled" -msgstr "" +msgstr "{0} je omogućen" #: frappe/public/js/frappe/views/reports/report_view.js:1433 msgid "{0} is equal to {1}" @@ -32282,7 +32282,7 @@ msgstr "{0} nije zavisna tabela od {1}" #: frappe/public/js/frappe/form/controls/link.js:714 msgid "{0} is not a descendant of {1}" -msgstr "" +msgstr "{0} nije potomak {1}" #: frappe/core/doctype/document_naming_rule/document_naming_rule.py:50 msgid "{0} is not a field of doctype {1}" @@ -32347,7 +32347,7 @@ msgstr "{0} nije dozvoljena uloga za {1}" #: frappe/public/js/frappe/form/controls/link.js:716 msgid "{0} is not an ancestor of {1}" -msgstr "" +msgstr "{0} nije nadređen {1}" #: frappe/public/js/frappe/form/controls/link.js:663 #: frappe/public/js/frappe/views/reports/report_view.js:1438 @@ -32374,11 +32374,11 @@ msgstr "{0} je sada podrazumevani format za štampanje za {1} doctype" #: frappe/public/js/frappe/form/controls/link.js:684 msgid "{0} is on or after {1}" -msgstr "" +msgstr "{0} je na ili nakon {1}" #: frappe/public/js/frappe/form/controls/link.js:689 msgid "{0} is on or before {1}" -msgstr "" +msgstr "{0} je na ili pre {1}" #: frappe/public/js/frappe/form/controls/link.js:665 #: frappe/public/js/frappe/views/reports/report_view.js:1472 @@ -32405,7 +32405,7 @@ msgstr "{0} je unutar {1}" #: frappe/public/js/frappe/form/controls/link.js:699 msgid "{0} is {1}" -msgstr "" +msgstr "{0} je {1}" #: frappe/public/js/frappe/list/list_view.js:1852 msgid "{0} items selected" @@ -32750,43 +32750,43 @@ msgstr "{0}: Dozvola na nivou 0 mora biti postavljena pre viših nivoa" #: frappe/core/doctype/doctype/doctype.py:1910 msgid "{0}: The 'Amend' permission cannot be granted for a non-submittable DocType." -msgstr "" +msgstr "{0}: Dozvola za 'Izmeni' ne može biti dodeljena za DocType koji se ne može podneti." #: frappe/core/doctype/doctype/doctype.py:1858 msgid "{0}: The 'Amend' permission cannot be granted without the 'Create' permission." -msgstr "" +msgstr "{0}: Dozvola za 'Izmeni' ne može biti dodeljena bez dozvole 'Kreiraj'." #: frappe/core/doctype/doctype/doctype.py:1845 msgid "{0}: The 'Cancel' permission cannot be granted without the 'Submit' permission." -msgstr "" +msgstr "{0}: Dozvola za 'Otkaži' ne može biti dodeljena bez dozvole 'Podnesi'." #: frappe/core/doctype/doctype/doctype.py:1892 msgid "{0}: The 'Export' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: Dozvola za 'Izvoz' je uklonjena jer ne može biti dodeljena za jedinstveni DocType." #: frappe/core/doctype/doctype/doctype.py:1918 msgid "{0}: The 'Import' permission cannot be granted for a non-importable DocType." -msgstr "" +msgstr "{0}: Dozvola za 'Uvoz' ne može biti dodeljena za DocType koji se ne može uvoziti." #: frappe/core/doctype/doctype/doctype.py:1864 msgid "{0}: The 'Import' permission cannot be granted without the 'Create' permission." -msgstr "" +msgstr "{0}: Dozvola za 'Uvoz' ne može biti dodeljena bez dozvole 'Kreiraj'." #: frappe/core/doctype/doctype/doctype.py:1884 msgid "{0}: The 'Import' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: Dozvola za 'Uvoz' je uklonjena jer ne može biti dodeljena za jedinstveni DocType." #: frappe/core/doctype/doctype/doctype.py:1876 msgid "{0}: The 'Report' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: Dozvola za 'Izveštaj' je uklonjena jer ne može biti dodeljena za jedinstveni DocType." #: frappe/core/doctype/doctype/doctype.py:1903 msgid "{0}: The 'Submit' permission cannot be granted for a non-submittable DocType." -msgstr "" +msgstr "{0}: Dozvola za 'Podnesi' ne može biti dodeljena za DocType koji se ne može podneti." #: frappe/core/doctype/doctype/doctype.py:1852 msgid "{0}: The 'Submit', 'Cancel', and 'Amend' permissions cannot be granted without the 'Write' permission." -msgstr "" +msgstr "{0}: Dozvole 'Podnesi', 'Otkaži' i 'Izmeni' ne mogu biti dodeljene bez dozvole 'Izmena'." #: frappe/public/js/frappe/form/controls/data.js:51 msgid "{0}: You can increase the limit for the field if required via {1}" @@ -32794,7 +32794,7 @@ msgstr "{0}: Možete povećati ograničenje za ovo polje ukoliko je potrebno put #: frappe/core/doctype/doctype/doctype.py:1297 msgid "{0}: fieldname cannot be set to reserved field {1} in DocType" -msgstr "" +msgstr "{0}: Naziv polja ne može biti postavljen na rezervisano polje {1} u DocType-u" #: frappe/core/doctype/doctype/doctype.py:1288 msgid "{0}: fieldname cannot be set to reserved keyword {1}" From 50121fd81a76a37194b938b012d5fbf9d076efe0 Mon Sep 17 00:00:00 2001 From: Ejaaz Khan <67804911+iamejaaz@users.noreply.github.com> Date: Sun, 25 Jan 2026 11:53:54 +0530 Subject: [PATCH 713/812] Revert "fix: show sidebar in print format builder" --- .../page/print_format_builder/print_format_builder.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/frappe/printing/page/print_format_builder/print_format_builder.js b/frappe/printing/page/print_format_builder/print_format_builder.js index 162908ac89..bae82ba040 100644 --- a/frappe/printing/page/print_format_builder/print_format_builder.js +++ b/frappe/printing/page/print_format_builder/print_format_builder.js @@ -58,17 +58,9 @@ frappe.PrintFormatBuilder = class PrintFormatBuilder { this.setup_section_settings(); this.setup_column_selector(); this.setup_edit_custom_html(); - this.show_sidebar(); // $(this.page.sidebar).css({"position": 'fixed'}); // $(this.page.main).parent().css({"margin-left": '16.67%'}); } - show_sidebar() { - $(".layout-side-section").css({ - display: "block", - flex: "0 0 260px", - maxWidth: "260px", - }); - } show_start() { this.page.main.html(frappe.render_template("print_format_builder_start", {})); this.page.clear_actions(); From 6613c4da1d2221c02b77a200b5ea49d174bb5dee Mon Sep 17 00:00:00 2001 From: Aarol D'Souza <98270103+AarDG10@users.noreply.github.com> Date: Sun, 25 Jan 2026 12:07:46 +0530 Subject: [PATCH 714/812] ci: autolabel postgres based on touched files (#36282) --- .github/helper/roulette.py | 13 +++++++++++++ .github/workflows/server-tests.yml | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/helper/roulette.py b/.github/helper/roulette.py index 08ff075914..5b966f82f4 100644 --- a/.github/helper/roulette.py +++ b/.github/helper/roulette.py @@ -144,6 +144,14 @@ def is_frontend_code(file): return file.lower().endswith((".css", ".scss", ".less", ".sass", ".styl", ".js", ".ts", ".vue", ".html", ".svg")) +def matches_postgres_filenames(files_list): + """Check if any changed files suggest database involvement.""" + db_keywords = ["database", "query", "schema", "postgres"] + return any( + any(word in f.lower() for word in db_keywords) + for f in files_list + ) + def is_docs(file): """Check if the file is documentation or image.""" regex = re.compile(r"\.(md|png|jpg|jpeg|csv|svg)$|^.github|LICENSE") @@ -174,6 +182,10 @@ if __name__ == "__main__": only_frontend_code_changed = len(list(filter(is_frontend_code, files_list))) == len(files_list) updated_py_file_count = len(list(filter(is_server_side_code, files_list))) only_py_changed = updated_py_file_count == len(files_list) + run_postgres = ( + has_label(pr_number, "postgres", repo) or + matches_postgres_filenames(files_list) + ) # Check for Skip CI label and other conditions if has_skip_ci_label(pr_number, repo): @@ -202,3 +214,4 @@ if __name__ == "__main__": # If we reach here, run the build os.system('echo "build=strawberry" >> $GITHUB_OUTPUT') + os.system(f'echo "run_postgres={"true" if run_postgres else "false"}" >> $GITHUB_OUTPUT') diff --git a/.github/workflows/server-tests.yml b/.github/workflows/server-tests.yml index 71d3a359dd..af05ee5ad3 100644 --- a/.github/workflows/server-tests.yml +++ b/.github/workflows/server-tests.yml @@ -28,6 +28,7 @@ jobs: needs: typecheck outputs: build: ${{ steps.check-build.outputs.build }} + run_postgres: ${{ steps.check-build.outputs.run_postgres }} steps: - name: Clone uses: actions/checkout@v6 @@ -44,7 +45,7 @@ jobs: name: Tests uses: ./.github/workflows/_base-server-tests.yml with: - enable-postgres: ${{ contains(github.event.pull_request.labels.*.name, 'postgres') }} # This enables PostgreSQL to run tests + enable-postgres: ${{ needs.checkrun.outputs.run_postgres == 'true' }} # This enables PostgreSQL to run tests enable-sqlite: false # This will test against both MariaDB and SQLite if enabled parallel-runs: 2 enable-coverage: ${{ github.event_name != 'pull_request' }} From 9b9257c4c63d1f9f23d30f28cb6a6897fa5110e4 Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Sun, 25 Jan 2026 12:09:54 +0530 Subject: [PATCH 715/812] fix: hide sidebar only in list view --- frappe/public/js/frappe/form/toolbar.js | 1 - frappe/public/js/frappe/list/base_list.js | 7 +++---- frappe/public/scss/desk/page.scss | 6 ------ 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/frappe/public/js/frappe/form/toolbar.js b/frappe/public/js/frappe/form/toolbar.js index 8d1b448be8..5311020133 100644 --- a/frappe/public/js/frappe/form/toolbar.js +++ b/frappe/public/js/frappe/form/toolbar.js @@ -888,7 +888,6 @@ frappe.ui.form.Toolbar = class Toolbar { } setup_sidebar_toggle(sidebar_wrapper) { - console.log(sidebar_wrapper); if (frappe.utils.is_xs() || frappe.utils.is_sm()) { this.setup_overlay_sidebar(sidebar_wrapper); } else { diff --git a/frappe/public/js/frappe/list/base_list.js b/frappe/public/js/frappe/list/base_list.js index 00818adc80..3cc515932f 100644 --- a/frappe/public/js/frappe/list/base_list.js +++ b/frappe/public/js/frappe/list/base_list.js @@ -275,16 +275,15 @@ frappe.views.BaseList = class BaseList { frappe.breadcrumbs.add(this.meta.module, this.doctype); } - show_or_hide_sidebar() { - let show_sidebar = JSON.parse(localStorage.show_sidebar || "true"); - $(document.body).toggleClass("no-list-sidebar", !show_sidebar); + hide_sidebar() { + $(document.body).toggleClass("no-list-sidebar", true); } setup_main_section() { return frappe.run_serially( [ this.setup_list_wrapper, - this.show_or_hide_sidebar, + this.hide_sidebar, this.setup_filter_area, this.setup_sort_selector, this.setup_result_container_area, diff --git a/frappe/public/scss/desk/page.scss b/frappe/public/scss/desk/page.scss index 35b451fd6f..3f0591442a 100644 --- a/frappe/public/scss/desk/page.scss +++ b/frappe/public/scss/desk/page.scss @@ -1,9 +1,3 @@ -body:not([data-route^="Form"]) { - .layout-side-section { - display: none; - } -} - .page-title { display: flex; align-items: center; From 84cc271a995e17f007ef4d7ccccd775b992dae73 Mon Sep 17 00:00:00 2001 From: sokumon Date: Sun, 25 Jan 2026 15:50:55 +0530 Subject: [PATCH 716/812] fix: give permission to all of them --- frappe/desk/doctype/desktop_icon/desktop_icon.json | 14 +++++++++++++- .../doctype/desktop_layout/desktop_layout.json | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.json b/frappe/desk/doctype/desktop_icon/desktop_icon.json index 9b04345ccf..fe7bfb7585 100644 --- a/frappe/desk/doctype/desktop_icon/desktop_icon.json +++ b/frappe/desk/doctype/desktop_icon/desktop_icon.json @@ -144,7 +144,7 @@ } ], "links": [], - "modified": "2026-01-23 14:33:55.594120", + "modified": "2026-01-25 15:29:33.884930", "modified_by": "Administrator", "module": "Desk", "name": "Desktop Icon", @@ -162,6 +162,18 @@ "role": "System Manager", "share": 1, "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Desk User", + "share": 1, + "write": 1 } ], "quick_entry": 1, diff --git a/frappe/desk/doctype/desktop_layout/desktop_layout.json b/frappe/desk/doctype/desktop_layout/desktop_layout.json index 0cdbf5921a..91e516df86 100644 --- a/frappe/desk/doctype/desktop_layout/desktop_layout.json +++ b/frappe/desk/doctype/desktop_layout/desktop_layout.json @@ -27,7 +27,7 @@ "grid_page_length": 50, "index_web_pages_for_search": 1, "links": [], - "modified": "2026-01-18 02:45:37.287424", + "modified": "2026-01-25 15:30:12.805037", "modified_by": "Administrator", "module": "Desk", "name": "Desktop Layout", @@ -45,6 +45,18 @@ "role": "System Manager", "share": 1, "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Desk User", + "share": 1, + "write": 1 } ], "row_format": "Dynamic", From 51ad3ad3091e629281b1df1185323163945047b1 Mon Sep 17 00:00:00 2001 From: sokumon Date: Sun, 25 Jan 2026 15:57:14 +0530 Subject: [PATCH 717/812] fix: make reset to default work --- frappe/desk/page/desktop/desktop.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frappe/desk/page/desktop/desktop.js b/frappe/desk/page/desktop/desktop.js index 8b0ef1c1dc..aff4220659 100644 --- a/frappe/desk/page/desktop/desktop.js +++ b/frappe/desk/page/desktop/desktop.js @@ -129,8 +129,9 @@ function save_desktop(icons) { } function reset_to_default() { - frappe.model.user_settings.save("Desktop Icon", "icons_to_create", null); - frappe.model.user_settings.save("Desktop Icon", "desktop_layout", null); + frappe.db.delete_doc("Desktop Layout", frappe.session.user).then(() => { + frappe.ui.toolbar.clear_cache(); + }); } function toggle_icons(icons) { From 7edf1cfb7b41a846e9228cfd2c898799572ae831 Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Sun, 25 Jan 2026 17:16:11 +0530 Subject: [PATCH 718/812] fix: change label of toggle sidebar --- frappe/public/js/frappe/form/toolbar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/toolbar.js b/frappe/public/js/frappe/form/toolbar.js index 5311020133..78944ba56d 100644 --- a/frappe/public/js/frappe/form/toolbar.js +++ b/frappe/public/js/frappe/form/toolbar.js @@ -469,7 +469,7 @@ frappe.ui.form.Toolbar = class Toolbar { return; } this.page.add_menu_item( - __("Open Sidebar"), + __("Toggle Sidebar"), () => { this.setup_sidebar_toggle(this.frm.sidebar.sidebar.parent()); }, From cfe8841d23facdd21d0cab9ba1308b1611b3d4fc Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Sun, 25 Jan 2026 18:08:33 +0530 Subject: [PATCH 719/812] fix: show maintainance and impersonate on primary nav --- .../js/frappe/form/sidebar/form_sidebar.js | 1 - frappe/public/js/frappe/ui/page.html | 11 +++++++++++ frappe/public/js/frappe/ui/page.js | 2 +- .../public/js/frappe/ui/toolbar/navbar.html | 19 ------------------- 4 files changed, 12 insertions(+), 21 deletions(-) diff --git a/frappe/public/js/frappe/form/sidebar/form_sidebar.js b/frappe/public/js/frappe/form/sidebar/form_sidebar.js index 63e5646b66..bec0e30a9d 100644 --- a/frappe/public/js/frappe/form/sidebar/form_sidebar.js +++ b/frappe/public/js/frappe/form/sidebar/form_sidebar.js @@ -37,7 +37,6 @@ frappe.ui.form.Sidebar = class { this.setup_keyboard_shortcuts(); this.show_auto_repeat_status(); frappe.ui.form.setup_user_image_event(this.frm); - this.indicator = $(this.sidebar).find(".sidebar-meta-details .indicator-pill"); this.setup_copy_event(); this.make_like(); this.setup_print(); diff --git a/frappe/public/js/frappe/ui/page.html b/frappe/public/js/frappe/ui/page.html index 50680684d0..039f564f03 100644 --- a/frappe/public/js/frappe/ui/page.html +++ b/frappe/public/js/frappe/ui/page.html @@ -72,6 +72,17 @@ + {% if (frappe.boot.read_only) { %} + + {%= __("Read Only Mode") %} + + {% } %} + {% if (frappe.boot.user.impersonated_by) { %} + + {%= __("Impersonating {0}", [frappe.boot.user.name]) %} + + {% } %} diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index 58d7e594b9..9b8ba5b319 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -145,7 +145,7 @@ frappe.ui.Page = class Page { this.container = this.wrapper.find(".page-body"); this.sidebar = this.wrapper.find(".layout-side-section"); this.footer = this.wrapper.find(".layout-footer"); - this.indicator = this.wrapper.find(".indicator-pill"); + this.indicator = this.wrapper.find(".title-area .indicator-pill"); this.page_actions = this.wrapper.find(".page-actions"); this.filters = this.wrapper.find(".filters"); diff --git a/frappe/public/js/frappe/ui/toolbar/navbar.html b/frappe/public/js/frappe/ui/toolbar/navbar.html index bd09ee0774..9e973f514a 100644 --- a/frappe/public/js/frappe/ui/toolbar/navbar.html +++ b/frappe/public/js/frappe/ui/toolbar/navbar.html @@ -1,23 +1,4 @@
- {% if (frappe.boot.read_only || frappe.boot.user.impersonated_by) { %} - - {% endif %} - {% if !localStorage.getItem("dismissed_announcement_widget") && strip_html(navbar_settings.announcement_widget) != '' %}
From 952c5e211aa4dd028bb8086df907a46850f5bc55 Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Sun, 25 Jan 2026 18:39:32 +0530 Subject: [PATCH 720/812] fix: hide worksapce and doctype if no space --- frappe/public/js/frappe/form/form.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 6537e74d21..3311570a21 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -659,12 +659,18 @@ frappe.ui.form.Form = class FrappeForm { let el = this.page.page_actions[0]; const rect = el.getBoundingClientRect(); let is_outside = rect.right > document.documentElement.clientWidth; + if (is_outside) { // check if the default actions are outside of the screen const overflow = Math.max(0, rect.right - document.documentElement.clientWidth); - this.page.$title_area - .parent() - .css("max-width", overflow ? `calc(50% - ${overflow}px)` : "50%"); + + if (!overflow) return; + let max_breadcrumb_width = Math.max( + 290, + this.page.$title_area.find("ul").width() - overflow + ); + + this.page.$title_area.parent().css("max-width", `${max_breadcrumb_width}px`); let breadcrumb = this.page.$title_area.find("ul li.ellipsis"); if (cint(breadcrumb[0]?.clientWidth) <= 30) { From d05c08a57dd0ddb884c106b4c464ac556808eb67 Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Sun, 25 Jan 2026 13:37:37 +0000 Subject: [PATCH 721/812] fix: show icon of edit icon when is_title_editable or can_rename --- frappe/public/js/frappe/form/toolbar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/toolbar.js b/frappe/public/js/frappe/form/toolbar.js index 78944ba56d..6a80d18dfa 100644 --- a/frappe/public/js/frappe/form/toolbar.js +++ b/frappe/public/js/frappe/form/toolbar.js @@ -204,7 +204,7 @@ frappe.ui.form.Toolbar = class Toolbar { setup_editable_title(element) { let me = this; - if (me.is_title_editable()) { + if (me.is_title_editable() || me.can_rename()) { let edit_icon = this.page.add_action_icon( "square-pen", () => { From ade5044f96b5cacd8bda942da7b3864fc7ac10c1 Mon Sep 17 00:00:00 2001 From: Pugazhendhi Velu Date: Sun, 25 Jan 2026 13:53:58 +0000 Subject: [PATCH 722/812] fix(form-sidebar): render title only when title field has a value --- frappe/public/js/frappe/form/templates/form_sidebar.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frappe/public/js/frappe/form/templates/form_sidebar.html b/frappe/public/js/frappe/form/templates/form_sidebar.html index 30ef352347..a4bcd135c4 100644 --- a/frappe/public/js/frappe/form/templates/form_sidebar.html +++ b/frappe/public/js/frappe/form/templates/form_sidebar.html @@ -33,11 +33,12 @@
diff --git a/frappe/public/js/frappe/list/list_settings.js b/frappe/public/js/frappe/list/list_settings.js index af379fc666..f4cd7610a1 100644 --- a/frappe/public/js/frappe/list/list_settings.js +++ b/frappe/public/js/frappe/list/list_settings.js @@ -123,7 +123,7 @@ export default class ListSettings {
From 080019bb06f02123f70efbbb6ae05068afd6a9d6 Mon Sep 17 00:00:00 2001 From: nareshkannasln Date: Wed, 28 Jan 2026 16:48:56 +0530 Subject: [PATCH 778/812] fix(calendar): add event time format --- frappe/public/js/frappe/views/calendar/calendar.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frappe/public/js/frappe/views/calendar/calendar.js b/frappe/public/js/frappe/views/calendar/calendar.js index cef8b8a9c9..67296b1a61 100644 --- a/frappe/public/js/frappe/views/calendar/calendar.js +++ b/frappe/public/js/frappe/views/calendar/calendar.js @@ -255,6 +255,11 @@ frappe.views.Calendar = class Calendar { plugins: frappe.FullCalendar.Plugins, initialView: defaults.initialView || "dayGridMonth", locale: frappe.boot.lang, + eventTimeFormat: { + hour: "numeric", + minute: "2-digit", + hour12: true, + }, firstDay: 1, headerToolbar: { left: "prev,title,next", From ff417ee0227dc2843a3046a3ed5553e198e085d2 Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Wed, 28 Jan 2026 16:55:40 +0530 Subject: [PATCH 779/812] feat(ListView): add border on list view --- frappe/public/js/frappe/list/base_list.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/public/js/frappe/list/base_list.js b/frappe/public/js/frappe/list/base_list.js index 3cc515932f..8f54b8c5f6 100644 --- a/frappe/public/js/frappe/list/base_list.js +++ b/frappe/public/js/frappe/list/base_list.js @@ -333,7 +333,7 @@ frappe.views.BaseList = class BaseList { */ setup_result_container_area() { if (this.view == "List") { - this.$frappe_list.append($(`
`)); + this.$frappe_list.append($(`
`)); } } @@ -367,7 +367,7 @@ frappe.views.BaseList = class BaseList { setup_paging_area() { const paging_values = [20, 100, 500, 2500]; this.$paging_area = $( - `
+ `
${paging_values From b71fe3b4600fa8a4fcbb809b01ce981876d8b7e7 Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Wed, 28 Jan 2026 13:12:43 +0000 Subject: [PATCH 780/812] refactor: add title param to get_print_settings --- frappe/public/js/frappe/form/print_utils.js | 5 +++-- frappe/public/js/frappe/views/reports/query_report.js | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frappe/public/js/frappe/form/print_utils.js b/frappe/public/js/frappe/form/print_utils.js index 2b15bc8a42..7b77d3f6cd 100644 --- a/frappe/public/js/frappe/form/print_utils.js +++ b/frappe/public/js/frappe/form/print_utils.js @@ -3,7 +3,8 @@ frappe.ui.get_print_settings = function ( callback, letter_head, pick_columns, - has_filters = false + has_filters = false, + title = null ) { var print_settings = locals[":Print Settings"]["Print Settings"]; @@ -115,7 +116,7 @@ frappe.ui.get_print_settings = function ( settings.print_format = null; } }, - __("Print Settings") + title ? __(title) : __("Print Settings") ); }; diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index a11fc8d2f9..c1968985d7 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -1915,7 +1915,8 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { (print_settings) => this.pdf_report(print_settings), this.report_doc.letter_head, this.get_visible_columns(), - true + true, + "PDF Settings" ); this.add_portrait_warning(dialog); }, From 7322fca429027a0f082c1750ee34562be17f612f Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Wed, 28 Jan 2026 18:55:31 +0530 Subject: [PATCH 781/812] fix(query_builder): patch `Function.get_sql` explicitly Signed-off-by: Akhil Narang --- frappe/query_builder/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/query_builder/__init__.py b/frappe/query_builder/__init__.py index 2744915416..75461c438d 100644 --- a/frappe/query_builder/__init__.py +++ b/frappe/query_builder/__init__.py @@ -13,6 +13,7 @@ from frappe.query_builder.utils import ( ) pypika.terms.ValueWrapper = ParameterizedValueWrapper +pypika.terms.Function.get_sql = ParameterizedFunction.get_sql pypika.terms.Function = ParameterizedFunction # * Overrides the field() method and replaces it with the a `PseudoColumn` 'field' for consistency From d4293fd3e7907b65871d9a47f325986cdc161204 Mon Sep 17 00:00:00 2001 From: Oswin Alex Date: Wed, 28 Jan 2026 20:38:12 +0530 Subject: [PATCH 782/812] Revert "fix(security): require WeasyPrint >= 68.0 to address CVE-2025-68616" This reverts commit deb4ae4e65eae7fec753f695385107a0518c6518. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 66d7b3e14c..5eb94c3b44 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ dependencies = [ "PyQRCode~=1.2.1", "PyYAML~=6.0.3", "RestrictedPython~=8.1", - "WeasyPrint>=68.0", + "WeasyPrint==66.0", "pydyf==0.12.1", "Werkzeug==3.1.5", "Whoosh~=2.7.4", From 6a8ae3cdccdbadc050f110dce79ba0ecac0dc95d Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Wed, 28 Jan 2026 22:05:53 +0000 Subject: [PATCH 783/812] fix: add border-radius to report datatable --- frappe/public/scss/desk/report.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frappe/public/scss/desk/report.scss b/frappe/public/scss/desk/report.scss index 7fea75c849..a5ef662860 100644 --- a/frappe/public/scss/desk/report.scss +++ b/frappe/public/scss/desk/report.scss @@ -88,6 +88,10 @@ overflow: auto; padding-left: 15px; padding-right: 15px; + + .datatable { + border-radius: var(--border-radius); + } } @include media-breakpoint-up(sm) { .report-view { From ce7e1de32d85b1606ab45add986ebeb4d994185b Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Wed, 28 Jan 2026 22:17:21 +0000 Subject: [PATCH 784/812] fix: add border-radius to datatable on report view --- frappe/public/js/frappe/views/reports/report_view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/views/reports/report_view.js b/frappe/public/js/frappe/views/reports/report_view.js index 78ab8f59a9..cf9b62b4e5 100644 --- a/frappe/public/js/frappe/views/reports/report_view.js +++ b/frappe/public/js/frappe/views/reports/report_view.js @@ -80,7 +80,7 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView { setup_result_area() { super.setup_result_area(); this.setup_charts_area(); - this.$datatable_wrapper = $('
'); + this.$datatable_wrapper = $('
'); this.$result.append(this.$datatable_wrapper); this.settings.onload && this.settings.onload(this); } From b4baf5eb27891c36dfbd476bcce434ada86b48ca Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Wed, 28 Jan 2026 22:32:16 +0000 Subject: [PATCH 785/812] refactor: apply radius on global datatable --- frappe/public/js/frappe/views/reports/report_view.js | 2 +- frappe/public/scss/desk/frappe_datatable.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/public/js/frappe/views/reports/report_view.js b/frappe/public/js/frappe/views/reports/report_view.js index cf9b62b4e5..aa9748b8e4 100644 --- a/frappe/public/js/frappe/views/reports/report_view.js +++ b/frappe/public/js/frappe/views/reports/report_view.js @@ -80,7 +80,7 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView { setup_result_area() { super.setup_result_area(); this.setup_charts_area(); - this.$datatable_wrapper = $('
'); + this.$datatable_wrapper = $('
'); this.$result.append(this.$datatable_wrapper); this.settings.onload && this.settings.onload(this); } diff --git a/frappe/public/scss/desk/frappe_datatable.scss b/frappe/public/scss/desk/frappe_datatable.scss index ee785d7cb1..81660b83dd 100644 --- a/frappe/public/scss/desk/frappe_datatable.scss +++ b/frappe/public/scss/desk/frappe_datatable.scss @@ -12,13 +12,13 @@ --dt-border-radius: var(--border-radius); --dt-cell-bg: var(--fg-color); --dt-border-color: var(--table-border-color); - --dt-border-radius: var(--border-radius); --dt-header-cell-bg: var(--subtle-fg); --dt-selection-highlight-color: var(--highlight-color); background-color: var(--bg-color); margin-left: -1px; margin-top: 0px; + border-radius: var(--dt-border-radius); @include get_textstyle("base", "regular"); .dt-cell { From f018e961cb989f633c13cfeb1d7585045113cf09 Mon Sep 17 00:00:00 2001 From: KerollesFathy Date: Wed, 28 Jan 2026 22:53:14 +0000 Subject: [PATCH 786/812] revert: change in datatable_wrapper --- frappe/public/js/frappe/views/reports/report_view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/views/reports/report_view.js b/frappe/public/js/frappe/views/reports/report_view.js index aa9748b8e4..78ab8f59a9 100644 --- a/frappe/public/js/frappe/views/reports/report_view.js +++ b/frappe/public/js/frappe/views/reports/report_view.js @@ -80,7 +80,7 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView { setup_result_area() { super.setup_result_area(); this.setup_charts_area(); - this.$datatable_wrapper = $('
'); + this.$datatable_wrapper = $('
'); this.$result.append(this.$datatable_wrapper); this.settings.onload && this.settings.onload(this); } From 8f22340482a867c5e08f6ae65d359d93ff4179a8 Mon Sep 17 00:00:00 2001 From: Aarol D'Souza <98270103+AarDG10@users.noreply.github.com> Date: Thu, 29 Jan 2026 10:01:11 +0530 Subject: [PATCH 787/812] ci(docs): fixes broken links in issue template (#36440) --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index e4cae95711..dc7f5602d4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -9,7 +9,7 @@ Welcome to the Frappe Framework issue tracker! Before creating an issue, please 1. This tracker should only be used to report bugs and request features / enhancements to Frappe - For questions and general support, use https://stackoverflow.com/questions/tagged/frappe - - For documentation issues, refer to https://frappeframework.com/docs/user/en or the developer cheetsheet https://github.com/frappe/frappe/wiki/Developer-Cheatsheet + - For documentation issues, refer to https://docs.frappe.io/framework/user/en/introduction or the developer cheatsheet https://github.com/frappe/frappe/wiki/Developer-Cheatsheet 2. Use the search function before creating a new issue. Duplicates will be closed and directed to the original discussion. 3. When making a bug report, make sure you provide all required information. The easier it is for diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 6a37517f7a..3b8cd3b71e 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -9,7 +9,7 @@ Welcome to the Frappe Framework issue tracker! Before creating an issue, please 1. This tracker should only be used to report bugs and request features / enhancements to Frappe - For questions and general support, refer to https://stackoverflow.com/questions/tagged/frappe - - For documentation issues, use https://frappeframework.com/docs/user/en or the developer cheetsheet https://frappeframework.com/docs/user/en/bench/resources/bench-commands-cheatsheet + - For documentation issues, use https://docs.frappe.io/framework/user/en/introduction or the developer cheatsheet https://frappeframework.com/docs/user/en/bench/resources/bench-commands-cheatsheet 2. Use the search function before creating a new issue. Duplicates will be closed and directed to the original discussion. 3. When making a feature request, make sure to be as verbose as possible. The better you convey your message, the greater the drive to make it happen. From 25152151eb442458612d199ec62854d4587427e7 Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Thu, 29 Jan 2026 11:29:53 +0530 Subject: [PATCH 788/812] fix(qrcode): escape user name Signed-off-by: Akhil Narang --- frappe/www/qrcode.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/www/qrcode.html b/frappe/www/qrcode.html index a47b2991a7..a0eafcf04a 100644 --- a/frappe/www/qrcode.html +++ b/frappe/www/qrcode.html @@ -6,7 +6,7 @@

{{ _("QR Code for Login Verification") }}

-

{{ _("Hi {0}").format(qr_code_user.first_name) }},

+

{{ _("Hi {0}").format(qr_code_user.first_name | e) }},

{{ _("Steps to verify your login") }}:

    From cdd91310cde4c1f46acddb24d700a3c1fc7bca76 Mon Sep 17 00:00:00 2001 From: AarDG10 Date: Thu, 29 Jan 2026 11:58:10 +0530 Subject: [PATCH 789/812] fix: remove irrelevant params --- frappe/oauth.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/frappe/oauth.py b/frappe/oauth.py index a074709a6c..5e170db5d2 100644 --- a/frappe/oauth.py +++ b/frappe/oauth.py @@ -253,9 +253,7 @@ class OAuthWebRequestValidator(RequestValidator): # return its scopes, these will be passed on to the refreshed # access token if the client did not specify a scope during the # request. - obearer_token = frappe.get_doc( - "OAuth Bearer Token", {"refresh_token": refresh_token}, ignore_permissions=True - ) + obearer_token = frappe.get_doc("OAuth Bearer Token", {"refresh_token": refresh_token}) return obearer_token.scopes def revoke_token(self, token, token_type_hint, request, *args, **kwargs): @@ -296,7 +294,6 @@ class OAuthWebRequestValidator(RequestValidator): otoken = frappe.get_doc( "OAuth Bearer Token", {"refresh_token": refresh_token, "status": "Active"}, - ignore_permissions=True, ) if not otoken: From 116e406e8f1e826e93702bd0ef415e4846fdeeed Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Thu, 29 Jan 2026 12:10:08 +0530 Subject: [PATCH 790/812] feat(sanitize_html): allow the caller to block additional tags Signed-off-by: Akhil Narang --- frappe/utils/html_utils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frappe/utils/html_utils.py b/frappe/utils/html_utils.py index 091c6047db..7af5ab9907 100644 --- a/frappe/utils/html_utils.py +++ b/frappe/utils/html_utils.py @@ -142,7 +142,7 @@ def clean_script_and_style(html): return frappe.as_unicode(soup) -def sanitize_html(html, linkify=False, always_sanitize=False): +def sanitize_html(html, linkify=False, always_sanitize=False, disallowed_tags=None): """ Sanitize HTML tags, attributes and style to prevent XSS attacks Based on nh3 clean, bleach whitelist and html5lib's Sanitizer defaults @@ -167,6 +167,10 @@ def sanitize_html(html, linkify=False, always_sanitize=False): .union(["html", "head", "meta", "link", "body", "o:p"]) ) + # Allow caller to explicitly disallow some tags + if disallowed_tags: + tags.difference_update(disallowed_tags) + attributes = {"*": acceptable_attributes, "svg": svg_attributes} # returns html with escaped tags, escaped orphan >, <, etc. From 7f5b5d4164198371078b7c3286e83e22088bc95b Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Thu, 29 Jan 2026 12:10:27 +0530 Subject: [PATCH 791/812] fix(comment): block some additional tags Although we escape HTML before sending the comment, that's done in the frontend. People can directly send a request to the add_comment API with unescaped HTML. This extra validation ensures comments can't lead to some form of phishing. Signed-off-by: Akhil Narang --- frappe/core/doctype/comment/comment.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frappe/core/doctype/comment/comment.py b/frappe/core/doctype/comment/comment.py index 5398449b1b..7cefa3b56e 100644 --- a/frappe/core/doctype/comment/comment.py +++ b/frappe/core/doctype/comment/comment.py @@ -62,7 +62,9 @@ class Comment(Document): def validate(self): if not self.comment_email: self.comment_email = frappe.session.user - self.content = frappe.utils.sanitize_html(self.content, always_sanitize=True) + self.content = frappe.utils.sanitize_html( + self.content, always_sanitize=True, disallowed_tags=["form", "input", "button"] + ) def on_update(self): update_comment_in_doc(self) From 1b78c5d9ae364b1de25e7fbde471e30c6bdbd1a9 Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Thu, 29 Jan 2026 12:43:05 +0530 Subject: [PATCH 792/812] fix: global search not working --- .../js/frappe/ui/toolbar/search_utils.js | 2 +- frappe/public/js/frappe/ui/toolbar/toolbar.js | 84 +++++++++++++++++++ 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/ui/toolbar/search_utils.js b/frappe/public/js/frappe/ui/toolbar/search_utils.js index 2de07432a2..663168cc91 100644 --- a/frappe/public/js/frappe/ui/toolbar/search_utils.js +++ b/frappe/public/js/frappe/ui/toolbar/search_utils.js @@ -570,7 +570,7 @@ frappe.search.utils = { { title: __("Desktop Icon"), fetch_type: "Nav", - results: sort_uniques(this.get_workspaces(keywords)), + results: sort_uniques(this.get_desktop_icons(keywords)), }, { title: __("Dashboard"), diff --git a/frappe/public/js/frappe/ui/toolbar/toolbar.js b/frappe/public/js/frappe/ui/toolbar/toolbar.js index c8e652f952..0b5f546f2c 100644 --- a/frappe/public/js/frappe/ui/toolbar/toolbar.js +++ b/frappe/public/js/frappe/ui/toolbar/toolbar.js @@ -24,6 +24,8 @@ frappe.ui.toolbar.Toolbar = class { $(this).closest(".dropdown-menu").prev().dropdown("toggle"); }); + this.setup_help(); + this.setup_read_only_mode(); this.setup_announcement_widget(); this.make(); @@ -35,6 +37,88 @@ frappe.ui.toolbar.Toolbar = class { this.navbar = $(".navbar-brand"); this.bind_click(); } + + setup_help() { + if (!frappe.boot.desk_settings.notifications) { + // hide the help section + $(".navbar .vertical-bar").removeClass("d-sm-block"); + $(".dropdown-help").removeClass("d-lg-block"); + return; + } + frappe.provide("frappe.help"); + frappe.help.show_results = show_results; + + this.search = new frappe.search.SearchDialog(); + frappe.provide("frappe.searchdialog"); + frappe.searchdialog.search = this.search; + + $(".dropdown-help .dropdown-toggle").on("click", function () { + $(".dropdown-help input").focus(); + }); + + $(".dropdown-help .dropdown-menu").on("click", "input, button", function (e) { + e.stopPropagation(); + }); + + $("#input-help").on("keydown", function (e) { + if (e.which == 13) { + $(this).val(""); + } + }); + + $(document).on("page-change", function () { + var $help_links = $(".dropdown-help #help-links"); + $help_links.html(""); + + var route = frappe.get_route_str(); + var breadcrumbs = route.split("/"); + + var links = []; + for (let i = 0; i < breadcrumbs.length; i++) { + var r = route.split("/", i + 1); + var key = r.join("/"); + var help_links = frappe.help.help_links[key] || []; + links = $.merge(links, help_links); + } + + if (links.length === 0) { + $help_links.next().hide(); + } else { + $help_links.next().show(); + } + + for (let i = 0; i < links.length; i++) { + var link = links[i]; + var url = link.url; + $("", { + href: url, + class: "dropdown-item", + text: __(link.label), + target: "_blank", + }).appendTo($help_links); + } + + $(".dropdown-help .dropdown-menu").on("click", "a", show_results); + }); + + var $result_modal = frappe.get_modal("", ""); + $result_modal.addClass("help-modal"); + + $(document).on("click", ".help-modal a", show_results); + + function show_results(e) { + //edit links + var href = e.target.href; + if (href.indexOf("blob") > 0) { + window.open(href, "_blank"); + } + var path = $(e.target).attr("data-path"); + if (path) { + e.preventDefault(); + } + } + } + change_toolbar() { $(".navbar .container").css("max-width", "43%"); $(".navbar-brand").css("display", "block"); From 15602ce059c668e4fe973bec588fca94a2e081c7 Mon Sep 17 00:00:00 2001 From: DennisOchulor <113277083+DennisOchulor@users.noreply.github.com> Date: Thu, 29 Jan 2026 16:37:11 +0800 Subject: [PATCH 793/812] fix: importing packages with scripts that have "." in the script name (#35784) * fix: importing packages with scripts that have "." in the script name * style: code formatting --- frappe/modules/import_file.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/modules/import_file.py b/frappe/modules/import_file.py index eb8f53d0b6..e0f9abe2ad 100644 --- a/frappe/modules/import_file.py +++ b/frappe/modules/import_file.py @@ -248,7 +248,7 @@ def load_code_properties(doc, path): if hasattr(doc, "get_code_fields"): dirname, filename = os.path.split(path) for key, extn in doc.get_code_fields().items(): - codefile = os.path.join(dirname, filename.split(".", 1)[0] + "." + extn) + codefile = os.path.join(dirname, filename[: filename.rfind(".")] + "." + extn) if os.path.exists(codefile): with open(codefile) as txtfile: doc.set(key, txtfile.read()) From af8e132e47100f158af24d7da9fed03e380049d5 Mon Sep 17 00:00:00 2001 From: Ahmed Shareef Date: Thu, 29 Jan 2026 12:40:59 +0400 Subject: [PATCH 794/812] fix: custom parent field in tree (#35860) * fix: custom parent field in tree * fix: custom parent field in treeview Co-authored-by: Akhil Narang --------- Co-authored-by: Akhil Narang --- frappe/desk/treeview.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/desk/treeview.py b/frappe/desk/treeview.py index 50fe5b4174..6d181183ae 100644 --- a/frappe/desk/treeview.py +++ b/frappe/desk/treeview.py @@ -42,8 +42,8 @@ def get_children(doctype, parent="", include_disabled=False, **filters): def _get_children(doctype, parent="", ignore_permissions=False, include_disabled=False): - parent_field = "parent_" + frappe.scrub(doctype) meta = frappe.get_meta(doctype) + parent_field = meta.get("nsm_parent_field") or "parent_" + frappe.scrub(doctype) qb = ( frappe.qb.from_(doctype) From 1c4e6265ffd57ca64c23e38472e46a7a1672404b Mon Sep 17 00:00:00 2001 From: sokumon Date: Thu, 29 Jan 2026 14:30:08 +0530 Subject: [PATCH 795/812] fix: add manage billing button back --- frappe/public/js/billing.bundle.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/frappe/public/js/billing.bundle.js b/frappe/public/js/billing.bundle.js index c3019d86c2..89c9a9d3a7 100644 --- a/frappe/public/js/billing.bundle.js +++ b/frappe/public/js/billing.bundle.js @@ -40,11 +40,19 @@ function setErrorMessage(message) { } function addManageBillingDropdown() { - $(".dropdown-navbar-user .dropdown-menu .dropdown-divider").before( - `` - ); + $(document).on("desktop_screen", function (event, data) { + data.desktop.add_menu_item({ + label: __("Manage Billing"), + icon: "receipt-text", + condition: function () { + return frappe.boot.sysdefaults.demo_company; + }, + onClick: function () { + return openFrappeCloudDashboard(); + }, + }); + }); } - function openFrappeCloudDashboard() { window.open(`${frappeCloudBaseEndpoint}/dashboard/sites/${frappe.boot.sitename}`, "_blank"); } From ca685cb11fc01822c180326113c746727e304121 Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Thu, 29 Jan 2026 15:50:18 +0530 Subject: [PATCH 796/812] fix(navbar): remove extra navbar on impersonate --- frappe/public/js/frappe/ui/page.html | 24 ++++++++++++------------ frappe/public/js/frappe/ui/page.js | 2 -- frappe/public/scss/desk/page.scss | 3 --- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/frappe/public/js/frappe/ui/page.html b/frappe/public/js/frappe/ui/page.html index 039f564f03..4f42763731 100644 --- a/frappe/public/js/frappe/ui/page.html +++ b/frappe/public/js/frappe/ui/page.html @@ -1,4 +1,4 @@ -
    +
    @@ -39,6 +39,17 @@ {% endif %}
    + {% if (frappe.boot.read_only) { %} + + {%= __("Read Only Mode") %} + + {% } %} + {% if (frappe.boot.user.impersonated_by) { %} + + {%= __("Impersonating {0}", [frappe.boot.user.name]) %} + + {% } %}
    @@ -72,17 +83,6 @@
    - {% if (frappe.boot.read_only) { %} - - {%= __("Read Only Mode") %} - - {% } %} - {% if (frappe.boot.user.impersonated_by) { %} - - {%= __("Impersonating {0}", [frappe.boot.user.name]) %} - - {% } %}
    diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index 9b8ba5b319..2902825fa9 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -67,8 +67,6 @@ frappe.ui.Page = class Page { (frappe.boot.read_only || frappe.boot.user.impersonated_by) ) { $(".page-head").css("top", "-15px"); - } else if (frappe.boot.read_only || frappe.boot.user.impersonated_by) { - $(".page-head").css("top", "var(--navbar-height)"); } last_scroll = current_scroll; }, 500) diff --git a/frappe/public/scss/desk/page.scss b/frappe/public/scss/desk/page.scss index 3f0591442a..0a904d2da8 100644 --- a/frappe/public/scss/desk/page.scss +++ b/frappe/public/scss/desk/page.scss @@ -111,9 +111,6 @@ body[data-route^="Form"] { border-bottom: 1px solid var(--border-color); transition: 0.5s top; top: 0; - &.show-navbar { - top: var(--navbar-height); - } .page-head-content { height: var(--page-head-height); From 6cfb09cef5961ef60a48c563659a73ea729d3697 Mon Sep 17 00:00:00 2001 From: Nikhil Kothari Date: Thu, 29 Jan 2026 16:07:51 +0530 Subject: [PATCH 797/812] fix: add support for DD/MMM/YYYY when guessing date format --- frappe/utils/data.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/utils/data.py b/frappe/utils/data.py index ff141ba048..4648d361aa 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -2461,6 +2461,7 @@ def dict_with_keys(dict, keys): def guess_date_format(date_string: str) -> str: DATE_FORMATS = [ r"%d/%b/%y", + r"%d/%b/%Y", r"%d-%m-%Y", r"%m-%d-%Y", r"%Y-%m-%d", From e05bf5b1c0350e05b3cde621caf2fffd225c66c1 Mon Sep 17 00:00:00 2001 From: Nikhil Kothari Date: Thu, 29 Jan 2026 16:45:12 +0530 Subject: [PATCH 798/812] fix(ui): text color for selected rows toast (#36472) * fix(ui): text color for selected rows toast * chore: run pre-commit --- frappe/public/scss/desk/frappe_datatable.scss | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frappe/public/scss/desk/frappe_datatable.scss b/frappe/public/scss/desk/frappe_datatable.scss index 81660b83dd..392b862821 100644 --- a/frappe/public/scss/desk/frappe_datatable.scss +++ b/frappe/public/scss/desk/frappe_datatable.scss @@ -5,7 +5,7 @@ --dt-light-yellow: var(--yellow-50); --dt-orange: var(--orange-500); --dt-text-color: var(--text-muted); - --dt-text-light: var(--text-light); + --dt-text-light: var(--neutral-white); --dt-spacer-1: 0.25rem; --dt-spacer-2: var(--padding-xs); --dt-spacer-3: 1rem; @@ -51,6 +51,7 @@ .dt-row[data-is-filter] { display: flex !important; } + .dt-row-header { background-color: var(--subtle-fg); } @@ -185,6 +186,7 @@ table td.dt-cell { 0% { background-color: transparent; } + // 50% { // background-color: $extra-light-yellow; // } From 0530aa63b262ed67c6267dca9f4b15f0fec88df8 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Thu, 29 Jan 2026 17:03:33 +0530 Subject: [PATCH 799/812] fix: Clear assets cache in clear-cache (#36479) --- frappe/cache_manager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/cache_manager.py b/frappe/cache_manager.py index fed740dae2..f7ef6c8a82 100644 --- a/frappe/cache_manager.py +++ b/frappe/cache_manager.py @@ -105,7 +105,8 @@ def clear_global_cache(): clear_doctype_cache() clear_website_cache() - frappe.cache.delete_value(global_cache_keys + bench_cache_keys) + frappe.cache.delete_value(global_cache_keys) + frappe.cache.delete_value(bench_cache_keys, shared=True) frappe.setup_module_map() From 5d412f9a877b5679e21980096e7423ecba89652c Mon Sep 17 00:00:00 2001 From: Nikhil Kothari Date: Thu, 29 Jan 2026 17:28:07 +0530 Subject: [PATCH 800/812] fix(ui): show correct estimated number of records on list view (#36478) --- frappe/public/js/frappe/list/list_view.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index 4521d778be..919231fa5b 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -1218,7 +1218,9 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { count_without_children !== current_count ? count_without_children : undefined; let count_str; - if (this.total_count === this.count_upper_bound) { + if (current_count > this.total_count) { + count_str = `${format_number(current_count, null, 0)}+`; + } else if (this.total_count === this.count_upper_bound) { count_str = `${format_number(this.total_count - 1, null, 0)}+`; } else if (this.total_count == null) { count_str = "??"; From f7b7181d6f55eec8e85e97e6df41916430c45638 Mon Sep 17 00:00:00 2001 From: Nikhil Kothari Date: Thu, 29 Jan 2026 18:12:01 +0530 Subject: [PATCH 801/812] fix(ui): line up pagination with list view --- frappe/public/scss/desk/list.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/scss/desk/list.scss b/frappe/public/scss/desk/list.scss index fc833d8f5b..a658e26406 100644 --- a/frappe/public/scss/desk/list.scss +++ b/frappe/public/scss/desk/list.scss @@ -307,7 +307,7 @@ $level-margin-right: 8px; .layout-main-list { .list-paging-area, .footnote-area { - padding: var(--padding-sm) var(--padding-md); + padding: var(--padding-sm) 0; } } From b8574b032b08a75c198fe8b1ba7fcbea90b7d632 Mon Sep 17 00:00:00 2001 From: K <64089478+kaulith@users.noreply.github.com> Date: Thu, 29 Jan 2026 18:42:42 +0530 Subject: [PATCH 802/812] fix: fetch parent node when filter is applied (#36482) * fix: fetch parent node when filter is applied * fix: add line for aesthetics --- frappe/public/js/frappe/views/treeview.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/frappe/public/js/frappe/views/treeview.js b/frappe/public/js/frappe/views/treeview.js index 2dc3d8bdb5..6518b18f1c 100644 --- a/frappe/public/js/frappe/views/treeview.js +++ b/frappe/public/js/frappe/views/treeview.js @@ -1,5 +1,6 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // MIT License. See license.txt + frappe.provide("frappe.treeview_settings"); frappe.provide("frappe.views.trees"); window.cur_tree = null; @@ -191,13 +192,20 @@ frappe.views.TreeView = class TreeView { } get_root() { var me = this; + frappe.call({ method: me.get_tree_nodes, args: me.args, callback: function (r) { if (r.message) { - me.root_label = me.doctype; - me.root_value = ""; + if (r.message.length == 1) { + me.root_label = r.message[0]["value"]; + me.root_value = me.root_label; + } else { + me.root_label = me.doctype; + me.root_value = ""; + } + me.make_tree(); } }, From 2050a127bcb44265b31a08b7a8db21cf3291d499 Mon Sep 17 00:00:00 2001 From: AarDG10 Date: Fri, 30 Jan 2026 09:19:47 +0530 Subject: [PATCH 803/812] fix(data): fix currency in words for Algerian compliance Co-authored-by: half-ware --- frappe/geo/country_info.json | 2 +- frappe/utils/data.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/frappe/geo/country_info.json b/frappe/geo/country_info.json index 7a1a4fa3b2..3ea2815d74 100644 --- a/frappe/geo/country_info.json +++ b/frappe/geo/country_info.json @@ -27,7 +27,7 @@ "Algeria": { "code": "dz", "currency": "DZD", - "currency_fraction": "Santeem", + "currency_fraction": "Centime", "currency_fraction_units": 100, "currency_name": "Algerian Dinar", "currency_symbol": "\u062f.\u062c", diff --git a/frappe/utils/data.py b/frappe/utils/data.py index ff141ba048..981137c3e9 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -1558,10 +1558,16 @@ def money_in_words( elif main == "0": out = f"{fraction_in_words()} {fraction_currency}" else: - out = _(main_currency, context="Currency") + " " + in_words(main, in_million).title() + if main_currency == "DZD": + # Use Dinars for Algerian Compliance + out = in_words(main, in_million).title() + " " + _("Dinars", context="Currency") + else: + out = _(main_currency, context="Currency") + " " + in_words(main, in_million).title() if cint(fraction): out = out + " " + _("and") + " " + fraction_in_words() + " " + fraction_currency + if main_currency == "DZD": + return _("{0}.", context="Money in words").format(out) return _("{0} only.", context="Money in words").format(out) From 0c59f49ce3808268ac6c8b0f1db30aa657d1a4a9 Mon Sep 17 00:00:00 2001 From: Angel98518 Date: Fri, 30 Jan 2026 12:09:58 +0800 Subject: [PATCH 804/812] fix: remove redundant isinstance check in encode_dict (#35932) * fix: remove redundant isinstance check in encode_dict The encode_dict function was checking isinstance(d[key], str) twice, which is redundant. Removed the duplicate check to clean up the code. This is a simple code quality improvement that removes unnecessary redundancy in the type checking logic. * fix: correct decode_dict to check for bytes instead of always-false condition The decode_dict function had a logic error: 'isinstance(d[key], str) and not isinstance(d[key], str)' is always False. It should check for bytes instead, since decode() is called on bytes objects. This fixes the decode_dict function to properly decode bytes to strings. * fix: remove redundant isinstance check in encode_dict --------- Co-authored-by: Daniel Miner --- frappe/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index 279c2d6d1f..34ed82f389 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -575,7 +575,7 @@ def get_site_url(site): def encode_dict(d, encoding="utf-8"): for key in d: - if isinstance(d[key], str) and isinstance(d[key], str): + if isinstance(d[key], str): d[key] = d[key].encode(encoding) return d From a2577e160ad87496b04387b8d5e45792a46c6c0e Mon Sep 17 00:00:00 2001 From: MochaMind Date: Fri, 30 Jan 2026 12:01:20 +0530 Subject: [PATCH 805/812] fix: sync translations from crowdin (#36437) * fix: Portuguese, Brazilian translations * fix: Persian translations * fix: Spanish translations * fix: Italian translations * fix: Persian translations * fix: update test for new translation Signed-off-by: Akhil Narang --------- Signed-off-by: Akhil Narang Co-authored-by: Akhil Narang --- frappe/locale/es.po | 76 ++++++++++---------- frappe/locale/fa.po | 128 ++++++++++++++++----------------- frappe/locale/it.po | 104 +++++++++++++-------------- frappe/locale/pt_BR.po | 38 +++++----- frappe/tests/test_translate.py | 2 +- 5 files changed, 174 insertions(+), 174 deletions(-) diff --git a/frappe/locale/es.po b/frappe/locale/es.po index e3b68eed4b..c0f40a11e8 100644 --- a/frappe/locale/es.po +++ b/frappe/locale/es.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" "POT-Creation-Date: 2026-01-25 09:36+0000\n" -"PO-Revision-Date: 2026-01-26 15:50\n" +"PO-Revision-Date: 2026-01-29 16:11\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Spanish\n" "MIME-Version: 1.0\n" @@ -823,52 +823,52 @@ msgstr "Una palabra de por sí es fácil de adivinar." #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "A0" -msgstr "" +msgstr "A0" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "A1" -msgstr "" +msgstr "A1" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "A2" -msgstr "" +msgstr "A2" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "A3" -msgstr "" +msgstr "A3" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "A4" -msgstr "" +msgstr "A4" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "A5" -msgstr "" +msgstr "A5" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "A6" -msgstr "" +msgstr "A6" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "A7" -msgstr "" +msgstr "A7" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "A8" -msgstr "" +msgstr "A8" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "A9" -msgstr "" +msgstr "A9" #. Option for the 'Email Sync Option' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json @@ -3352,57 +3352,57 @@ msgstr "B" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B0" -msgstr "" +msgstr "B0" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B1" -msgstr "" +msgstr "B1" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B10" -msgstr "" +msgstr "B10" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B2" -msgstr "" +msgstr "B2" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B3" -msgstr "" +msgstr "B3" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B4" -msgstr "" +msgstr "B4" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B5" -msgstr "" +msgstr "B5" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B6" -msgstr "" +msgstr "B6" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B7" -msgstr "" +msgstr "B7" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B8" -msgstr "" +msgstr "B8" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "B9" -msgstr "" +msgstr "B9" #. Label of the bcc (Code) field in DocType 'Communication' #. Label of the bcc (Code) field in DocType 'Notification Recipient' @@ -3983,7 +3983,7 @@ msgstr "" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "C5E" -msgstr "" +msgstr "C5E" #: frappe/templates/print_formats/standard_macros.html:216 msgid "CANCELLED" @@ -5191,7 +5191,7 @@ msgstr "No se permite la combinación del tipo de concesión ( {0} #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Comm10E" -msgstr "" +msgstr "Comm10E" #. Name of a DocType #. Option for the 'Comment Type' (Select) field in DocType 'Comment' @@ -8468,7 +8468,7 @@ msgstr "Campo duplicado" #: frappe/public/js/frappe/form/grid.js:238 msgid "Duplicate row" -msgstr "" +msgstr "Duplicar fila" #: frappe/public/js/frappe/form/grid.js:66 msgid "Duplicate rows" @@ -9612,7 +9612,7 @@ msgstr "Errores" #. Document State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Evaluate as Expression" -msgstr "" +msgstr "Evaluar como expresión" #. Option for the 'Type' (Select) field in DocType 'Communication' #. Name of a DocType @@ -9724,7 +9724,7 @@ msgstr "" #. Option for the 'File Type' (Select) field in DocType 'Data Export' #: frappe/core/doctype/data_export/data_export.json msgid "Excel" -msgstr "" +msgstr "Excel" #: frappe/public/js/frappe/form/controls/password.js:90 msgid "Excellent" @@ -9989,7 +9989,7 @@ msgstr "" #. Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Facebook" -msgstr "" +msgstr "Facebook" #. Option for the 'SocketIO Ping Check' (Select) field in DocType 'System #. Health Report' @@ -10165,7 +10165,7 @@ msgstr "" #. Label of the fax (Data) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Fax" -msgstr "" +msgstr "Fax" #: frappe/public/js/frappe/form/templates/form_sidebar.html:72 msgid "Feedback" @@ -10816,7 +10816,7 @@ msgstr "Carpeta {0} no está vacía" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Folio" -msgstr "" +msgstr "Folio" #: frappe/public/js/frappe/form/templates/form_sidebar.html:149 #: frappe/public/js/frappe/form/toolbar.js:944 @@ -11384,7 +11384,7 @@ msgstr "" #. Option for the 'Service' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "GMail" -msgstr "" +msgstr "GMail" #. Option for the 'License Type' (Select) field in DocType 'Package' #: frappe/core/doctype/package/package.json @@ -11526,7 +11526,7 @@ msgstr "" #. Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "GitHub" -msgstr "" +msgstr "GitHub" #: frappe/website/doctype/web_page/web_page.js:92 msgid "Github flavoured markdown syntax" @@ -11623,7 +11623,7 @@ msgstr "Objetivo" #. Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Google" -msgstr "" +msgstr "Google" #. Label of the google_analytics_id (Data) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json @@ -12139,7 +12139,7 @@ msgstr "" #. Option for the 'Font' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Helvetica Neue" -msgstr "" +msgstr "Helvetica Neue" #: frappe/public/js/frappe/utils/utils.js:2070 msgid "Here's your tracking URL" @@ -13321,7 +13321,7 @@ msgstr "" #. Option for the 'Database Engine' (Select) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "InnoDB" -msgstr "" +msgstr "InnoDB" #. Description of the 'New Role' (Data) field in DocType 'Role Replication' #: frappe/core/doctype/role_replication/role_replication.json @@ -18901,7 +18901,7 @@ msgstr "Generación de PDF en progreso" #: frappe/printing/doctype/print_format/print_format.json #: frappe/printing/doctype/print_settings/print_settings.json msgid "PDF Generator" -msgstr "" +msgstr "Generador de PDF" #. Label of the pdf_page_height (Float) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json @@ -29417,7 +29417,7 @@ msgstr "" #. Option for the 'Font' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Verdana" -msgstr "" +msgstr "Verdana" #: frappe/templates/includes/login/login.js:332 msgid "Verification" @@ -31178,7 +31178,7 @@ msgstr "" #: frappe/printing/doctype/print_format/print_format.json #: frappe/printing/doctype/print_settings/print_settings.json msgid "chrome" -msgstr "" +msgstr "chrome" #: frappe/templates/includes/list/filters.html:19 msgid "clear" diff --git a/frappe/locale/fa.po b/frappe/locale/fa.po index 90a54e0333..b13130a32f 100644 --- a/frappe/locale/fa.po +++ b/frappe/locale/fa.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" "POT-Creation-Date: 2026-01-25 09:36+0000\n" -"PO-Revision-Date: 2026-01-26 15:51\n" +"PO-Revision-Date: 2026-01-29 16:11\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Persian\n" "MIME-Version: 1.0\n" @@ -1101,7 +1101,7 @@ msgstr "افزودن حاشیه در بالا" #: frappe/public/js/frappe/views/communication.js:195 msgid "Add CSS" -msgstr "" +msgstr "افزودن CSS" #: frappe/desk/doctype/number_card/number_card.js:37 msgid "Add Card to Dashboard" @@ -1965,7 +1965,7 @@ msgstr "" #. Type' #: frappe/core/doctype/user_type/user_type.json msgid "Allowed Modules" -msgstr "" +msgstr "ماژول‌های مجاز" #. Label of the allowed_public_client_origins (Small Text) field in DocType #. 'OAuth Settings' @@ -2092,7 +2092,7 @@ msgstr "همچنین افزودن فیلد وابستگی به وضعیت {0}" #. Label of the login_id (Data) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Alternative Email ID" -msgstr "" +msgstr "شناسه ایمیل جایگزین" #. Option for the 'Show External Link Warning' (Select) field in DocType #. 'System Settings' @@ -2129,7 +2129,7 @@ msgstr "" #: frappe/core/doctype/docperm/docperm.json #: frappe/core/doctype/user_document_type/user_document_type.json msgid "Amend" -msgstr "" +msgstr "اصلاح" #. Option for the 'Action' (Select) field in DocType 'Amended Document Naming #. Settings' @@ -2149,13 +2149,13 @@ msgstr "اصلاح تنظیمات نام‌گذاری سند" #. 'Document Naming Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Amended Documents" -msgstr "" +msgstr "اسناد اصلاح شده" #. Label of the amended_from (Link) field in DocType 'Personal Data Download #. Request' #: frappe/website/doctype/personal_data_download_request/personal_data_download_request.json msgid "Amended From" -msgstr "" +msgstr "اصلاح شده از" #: frappe/public/js/frappe/form/save.js:12 msgctxt "Freeze message while amending a document" @@ -2270,7 +2270,7 @@ msgstr "برنامه" #. Label of the app_id (Data) field in DocType 'Google Settings' #: frappe/integrations/doctype/google_settings/google_settings.json msgid "App ID" -msgstr "" +msgstr "شناسه برنامه" #. Label of the app_logo (Attach Image) field in DocType 'Website Settings' #: frappe/desk/page/desktop/desktop.html:8 @@ -2534,7 +2534,7 @@ msgstr "آیا مطمئن هستید که می‌خواهید این سند را #: frappe/public/js/frappe/form/workflow.js:114 msgid "Are you sure you want to {0}?" -msgstr "" +msgstr "آیا مطمئن هستید که می‌خواهید {0}؟" #: frappe/core/doctype/document_naming_rule/document_naming_rule.js:16 #: frappe/core/doctype/user_permission/user_permission_list.js:165 @@ -3106,7 +3106,7 @@ msgstr "" #. 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Automated Message" -msgstr "" +msgstr "پیام خودکار" #. Option for the 'Desk Theme' (Select) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -3407,7 +3407,7 @@ msgstr "" #: frappe/integrations/doctype/geolocation_settings/geolocation_settings.json #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Base URL" -msgstr "" +msgstr "URL پایه" #. Label of the based_on (Link) field in DocType 'Language' #: frappe/core/doctype/language/language.json @@ -3434,7 +3434,7 @@ msgstr "" #. Label of the section_break_3 (Section Break) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Basic Info" -msgstr "" +msgstr "اطلاعات پایه" #. Label of the before (Int) field in DocType 'Event Notifications' #: frappe/desk/doctype/event_notifications/event_notifications.json @@ -4589,7 +4589,7 @@ msgstr "شهر" #. Label of the city (Data) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "City/Town" -msgstr "" +msgstr "شهر/شهرک" #: frappe/core/doctype/recorder/recorder_list.js:12 #: frappe/public/js/frappe/form/controls/attach.js:16 @@ -4716,7 +4716,7 @@ msgstr "کلیک شده" #: frappe/integrations/doctype/oauth_authorization_code/oauth_authorization_code.json #: frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json msgid "Client" -msgstr "" +msgstr "کلاینت" #. Label of the client_code_section (Section Break) field in DocType 'Report' #: frappe/core/doctype/report/report.json @@ -4897,7 +4897,7 @@ msgstr "جمع کردن همه" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Collapsible" -msgstr "" +msgstr "تاشو" #. Label of the collapsible_depends_on (Code) field in DocType 'Custom Field' #. Label of the collapsible_depends_on (Code) field in DocType 'Customize Form @@ -4905,12 +4905,12 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Collapsible Depends On" -msgstr "" +msgstr "تاشو بستگی دارد به" #. Label of the collapsible_depends_on (Code) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Collapsible Depends On (JS)" -msgstr "" +msgstr "تاشو بستگی دارد به (JS)" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Label of the color (Data) field in DocType 'DocType' @@ -5618,7 +5618,7 @@ msgstr "DocTypeهای اصلی قابل سفارشی‌سازی نیستند." #: frappe/desk/doctype/global_search_settings/global_search_settings.py:36 msgid "Core Modules {0} cannot be searched in Global Search." -msgstr "ماژول های اصلی {0} را نمی‌توان در جستجوی سراسری جستجو کرد." +msgstr "ماژول‌های اصلی {0} را نمی‌توان در جستجوی سراسری جستجو کرد." #: frappe/printing/page/print/print.js:687 msgid "Correct version :" @@ -5781,7 +5781,7 @@ msgstr "" #. Label of the create_log (Check) field in DocType 'Scheduled Job Type' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json msgid "Create Log" -msgstr "" +msgstr "ایجاد لاگ" #: frappe/printing/page/print_format_builder_beta/print_format_builder_beta.js:41 #: frappe/public/js/frappe/views/treeview.js:378 @@ -5922,7 +5922,7 @@ msgstr "" #: frappe/public/js/frappe/file_uploader/ImageCropper.vue:34 msgid "Crop" -msgstr "" +msgstr "برش تصویر" #: frappe/public/js/frappe/form/grid_row_form.js:44 msgid "Ctrl + Down" @@ -5988,7 +5988,7 @@ msgstr "" #. Label of the current_value (Int) field in DocType 'Document Naming Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Current Value" -msgstr "" +msgstr "مقدار فعلی" #: frappe/public/js/frappe/form/workflow.js:45 msgid "Current status" @@ -6131,7 +6131,7 @@ msgstr "بلوک HTML سفارشی" #. Label of the custom_html_help (HTML) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Custom HTML Help" -msgstr "" +msgstr "راهنمای HTML سفارشی" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:114 msgid "Custom LDAP Directoy Selected, please ensure 'LDAP Group Member attribute' and 'Group Object Class' are entered" @@ -6142,7 +6142,7 @@ msgstr "Directoy LDAP سفارشی انتخاب شده است، لطفاً مط #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/website/doctype/web_form_list_column/web_form_list_column.json msgid "Custom Label" -msgstr "" +msgstr "برچسب سفارشی" #. Label of the custom_menu (Table) field in DocType 'Portal Settings' #: frappe/website/doctype/portal_settings/portal_settings.json @@ -6162,7 +6162,7 @@ msgstr "" #. Option for the 'Report Type' (Select) field in DocType 'Report' #: frappe/core/doctype/report/report.json msgid "Custom Report" -msgstr "" +msgstr "گزارش سفارشی" #: frappe/desk/desktop.py:511 msgid "Custom Reports" @@ -9208,7 +9208,7 @@ msgstr "تاریخ پایان نمی‌تواند قبل از تاریخ شرو #: frappe/automation/doctype/auto_repeat/auto_repeat.py:146 msgid "End Date cannot be today." -msgstr "" +msgstr "تاریخ پایان نمی‌تواند امروز باشد." #. Label of the ended_at (Datetime) field in DocType 'RQ Job' #. Label of the ended_at (Datetime) field in DocType 'Submission Queue' @@ -11694,7 +11694,7 @@ msgstr "" #. Description of a Card Break in the Build Workspace #: frappe/core/workspace/build/build.json msgid "Group your custom doctypes under modules" -msgstr "Doctype های سفارشی خود را در زیر ماژول ها گروه بندی کنید" +msgstr "Doctype های سفارشی خود را در زیر ماژول‌ها گروه بندی کنید" #: frappe/public/js/frappe/ui/group_by/group_by.js:428 msgid "Grouped by {0}" @@ -12430,7 +12430,7 @@ msgstr "" #. Format' #: frappe/printing/doctype/print_format/print_format.json msgid "If checked, negative numeric values of Currency, Quantity or Count would be shown as positive" -msgstr "" +msgstr "در صورت علامت زدن، مقادیر عددی منفی برای واحد پول، مقدار یا تعداد به صورت مثبت نمایش داده می‌شوند" #. Description of the 'Skip Authorization' (Check) field in DocType 'OAuth #. Client' @@ -13148,7 +13148,7 @@ msgstr "رنگ نشانگر" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Info" -msgstr "" +msgstr "اطلاعات" #: frappe/core/doctype/data_export/exporter.py:144 msgid "Info:" @@ -14223,7 +14223,7 @@ msgstr "نمای کانبان" #. Label of the keep_closed (Check) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Keep Closed" -msgstr "" +msgstr "بسته نگه داشتن" #. Description of a DocType #: frappe/core/doctype/activity_log/activity_log.json @@ -14568,11 +14568,11 @@ msgstr "" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:163 msgid "Last Edited by You" -msgstr "" +msgstr "آخرین ویرایش توسط شما" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:164 msgid "Last Edited by {0}" -msgstr "" +msgstr "آخرین ویرایش توسط {0}" #. Label of the last_execution (Datetime) field in DocType 'Scheduled Job Type' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json @@ -14639,7 +14639,7 @@ msgstr "سه ماهه گذشته" #. Label of the last_received_at (Datetime) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Last Received At" -msgstr "" +msgstr "آخرین دریافت در" #. Label of the last_reset_password_key_generated_on (Datetime) field in #. DocType 'User' @@ -14955,7 +14955,7 @@ msgstr "" #. Option for the 'Type' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Line" -msgstr "" +msgstr "خط" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Fieldtype' (Select) field in DocType 'Report Column' @@ -16376,7 +16376,7 @@ msgstr "ماژول {} یافت نشد" #: frappe/core/doctype/package/package.json #: frappe/core/workspace/build/build.json msgid "Modules" -msgstr "ماژول ها" +msgstr "ماژول‌ها" #. Label of the modules_html (HTML) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -16756,7 +16756,7 @@ msgstr "به محتوای اصلی بروید" #. Label of the form_navigation_buttons (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Navigation Buttons" -msgstr "" +msgstr "دکمه‌های ناوبری" #. Label of the navigation_settings_section (Section Break) field in DocType #. 'User' @@ -17069,7 +17069,7 @@ msgstr "" #: frappe/core/doctype/success_action/success_action.js:44 msgid "Next Actions" -msgstr "" +msgstr "اقدامات بعدی" #. Label of the next_actions_html (HTML) field in DocType 'Success Action' #: frappe/core/doctype/success_action/success_action.json @@ -18436,7 +18436,7 @@ msgstr "باز کردن تنظیمات" #: frappe/public/js/frappe/form/toolbar.js:472 msgid "Open Sidebar" -msgstr "" +msgstr "باز کردن نوار کناری" #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Open Source Applications for the Web" @@ -18475,7 +18475,7 @@ msgstr "باز کردن آیتم لیست" #: frappe/core/doctype/error_log/error_log.js:15 msgid "Open reference document" -msgstr "" +msgstr "باز کردن سند مرجع" #: frappe/www/qrcode.html:13 msgid "Open your authentication app on your mobile phone." @@ -18647,7 +18647,7 @@ msgstr "جهت" #: frappe/core/doctype/version/version.py:241 msgid "Original" -msgstr "" +msgstr "اصلی" #: frappe/core/doctype/version/version_view.html:74 #: frappe/core/doctype/version/version_view.html:139 @@ -19558,7 +19558,7 @@ msgstr "لطفا یک نظر معتبر اضافه کنید." #: frappe/core/doctype/user/user.py:1126 msgid "Please ask your administrator to verify your sign-up" -msgstr "" +msgstr "لطفاً از ادمین خود بخواهید ثبت نام شما را تأیید کند" #: frappe/public/js/frappe/form/controls/select.js:101 msgid "Please attach a file first." @@ -22955,7 +22955,7 @@ msgstr "در حال ذخیره سفارشی‌سازی..." #: frappe/public/js/frappe/ui/sidebar/sidebar_editor.js:58 msgid "Saving Sidebar" -msgstr "" +msgstr "ذخیره نوار کناری" #: frappe/desk/doctype/module_onboarding/module_onboarding.js:8 msgid "Saving this will export this document as well as the steps linked here as json." @@ -29772,7 +29772,7 @@ msgstr "" #. Label of a number card in the Users Workspace #: frappe/core/workspace/users/users.json msgid "Website Users" -msgstr "" +msgstr "کاربران وب‌سایت" #. Label of a chart in the Website Workspace #: frappe/website/workspace/website/website.json @@ -30031,7 +30031,7 @@ msgstr "وضعیت سند گردش کار" #: frappe/model/workflow.py:113 msgid "Workflow Evaluation Error" -msgstr "" +msgstr "خطای ارزیابی گردش کار" #. Label of the workflow_name (Data) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json @@ -30589,7 +30589,7 @@ msgstr "شما اجازه درون‌بُرد {0} را ندارید" #: frappe/database/query.py:943 msgid "You do not have permission to access child table field: {0}" -msgstr "" +msgstr "شما اجازه دسترسی به فیلد: {0} جدول فرزند را ندارید" #: frappe/database/query.py:953 msgid "You do not have permission to access field: {0}" @@ -31141,7 +31141,7 @@ msgstr "خالی" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:41 msgid "esc" -msgstr "" +msgstr "esc" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' @@ -31216,14 +31216,14 @@ msgstr "درون‌بُرد" #: frappe/public/js/frappe/form/controls/link.js:649 #: frappe/public/js/frappe/form/controls/link.js:656 msgid "is disabled" -msgstr "" +msgstr "غیرفعال است" #: frappe/public/js/frappe/form/controls/link.js:630 #: frappe/public/js/frappe/form/controls/link.js:637 #: frappe/public/js/frappe/form/controls/link.js:650 #: frappe/public/js/frappe/form/controls/link.js:655 msgid "is enabled" -msgstr "" +msgstr "فعال است" #: frappe/templates/signup.html:11 frappe/www/login.html:11 msgid "jane@example.com" @@ -31540,7 +31540,7 @@ msgstr "برای پیمایش" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:41 msgid "to select" -msgstr "" +msgstr "برای انتخاب" #: frappe/templates/emails/download_data.html:9 msgid "to your browser" @@ -31859,7 +31859,7 @@ msgstr "" #: frappe/public/js/frappe/form/controls/link.js:669 msgid "{0} contains {1}" -msgstr "" +msgstr "{0} شامل {1} است" #: frappe/public/js/frappe/views/interaction.js:261 msgid "{0} created successfully" @@ -31884,7 +31884,7 @@ msgstr "{0} روز پیش" #: frappe/public/js/frappe/form/controls/link.js:671 msgid "{0} does not contain {1}" -msgstr "" +msgstr "{0} شامل {1} نیست" #: frappe/website/doctype/website_settings/website_settings.py:96 #: frappe/website/doctype/website_settings/website_settings.py:116 @@ -31954,7 +31954,7 @@ msgstr "{0} یک فایل فشرده معتبر نیست" #: frappe/public/js/frappe/form/controls/link.js:674 msgid "{0} is after {1}" -msgstr "" +msgstr "{0} بعد از {1} است" #: frappe/public/js/frappe/form/controls/link.js:712 msgid "{0} is an ancestor of {1}" @@ -31970,11 +31970,11 @@ msgstr "{0} یک آدرس ایمیل نامعتبر در \"گیرندگان\" ا #: frappe/public/js/frappe/form/controls/link.js:679 msgid "{0} is before {1}" -msgstr "" +msgstr "{0} قبل از {1} است" #: frappe/public/js/frappe/form/controls/link.js:708 msgid "{0} is between {1}" -msgstr "" +msgstr "{0} بین {1} است" #: frappe/public/js/frappe/form/controls/link.js:705 #: frappe/public/js/frappe/views/reports/report_view.js:1464 @@ -31989,12 +31989,12 @@ msgstr "{0} در حال حاضر {1} است" #: frappe/public/js/frappe/form/controls/link.js:642 #: frappe/public/js/frappe/form/controls/link.js:660 msgid "{0} is disabled" -msgstr "" +msgstr "{0} غیرفعال است" #: frappe/public/js/frappe/form/controls/link.js:641 #: frappe/public/js/frappe/form/controls/link.js:661 msgid "{0} is enabled" -msgstr "" +msgstr "{0} فعال است" #: frappe/public/js/frappe/views/reports/report_view.js:1433 msgid "{0} is equal to {1}" @@ -32095,7 +32095,7 @@ msgstr "{0} یک فایل فشرده نیست" #: frappe/core/doctype/user_invitation/user_invitation.py:182 msgid "{0} is not an allowed role for {1}" -msgstr "" +msgstr "{0} نقشی مجاز برای {1} نیست" #: frappe/public/js/frappe/form/controls/link.js:716 msgid "{0} is not an ancestor of {1}" @@ -32502,35 +32502,35 @@ msgstr "{0}: مجوز در سطح 0 باید قبل از تنظیم سطوح ب #: frappe/core/doctype/doctype/doctype.py:1910 msgid "{0}: The 'Amend' permission cannot be granted for a non-submittable DocType." -msgstr "" +msgstr "{0}: مجوز «اصلاح» برای یک DocType غیرقابل ارسال قابل اعطا نیست." #: frappe/core/doctype/doctype/doctype.py:1858 msgid "{0}: The 'Amend' permission cannot be granted without the 'Create' permission." -msgstr "" +msgstr "{0}: مجوز «اصلاح» بدون مجوز «ایجاد» قابل اعطا نیست." #: frappe/core/doctype/doctype/doctype.py:1845 msgid "{0}: The 'Cancel' permission cannot be granted without the 'Submit' permission." -msgstr "" +msgstr "{0}: مجوز «لغو» بدون مجوز «ارسال» قابل اعطا نیست." #: frappe/core/doctype/doctype/doctype.py:1892 msgid "{0}: The 'Export' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: مجوز «برون‌بُرد» حذف شد زیرا نمی‌توان آن را برای یک DocType «واحد» اعطا کرد." #: frappe/core/doctype/doctype/doctype.py:1918 msgid "{0}: The 'Import' permission cannot be granted for a non-importable DocType." -msgstr "" +msgstr "{0}: مجوز «درون‌بُرد» برای DocType غیرقابل درون‌بُرد قابل اعطا نیست." #: frappe/core/doctype/doctype/doctype.py:1864 msgid "{0}: The 'Import' permission cannot be granted without the 'Create' permission." -msgstr "" +msgstr "{0}: مجوز «درون‌بُرد» بدون مجوز «ایجاد» قابل اعطا نیست." #: frappe/core/doctype/doctype/doctype.py:1884 msgid "{0}: The 'Import' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: مجوز «درون‌بُرد» حذف شد زیرا نمی‌توان آن را برای یک DocType «واحد» اعطا کرد." #: frappe/core/doctype/doctype/doctype.py:1876 msgid "{0}: The 'Report' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: مجوز «گزارش» حذف شد زیرا نمی‌توان آن را برای یک DocType «واحد» اعطا کرد." #: frappe/core/doctype/doctype/doctype.py:1903 msgid "{0}: The 'Submit' permission cannot be granted for a non-submittable DocType." diff --git a/frappe/locale/it.po b/frappe/locale/it.po index 497a76694d..560fb7376f 100644 --- a/frappe/locale/it.po +++ b/frappe/locale/it.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" "POT-Creation-Date: 2026-01-25 09:36+0000\n" -"PO-Revision-Date: 2026-01-26 15:50\n" +"PO-Revision-Date: 2026-01-29 16:11\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Italian\n" "MIME-Version: 1.0\n" @@ -1045,7 +1045,7 @@ msgstr "" #: frappe/public/js/frappe/form/dashboard.js:22 #: frappe/public/js/frappe/form/footer/form_timeline.js:60 msgid "Activity" -msgstr "" +msgstr "Attività" #. Name of a DocType #. Label of a Link in the Build Workspace @@ -2572,7 +2572,7 @@ msgstr "" #: frappe/public/js/frappe/form/templates/form_sidebar.html:89 msgid "Assign" -msgstr "" +msgstr "Assegna" #. Label of the assign_condition (Code) field in DocType 'Assignment Rule' #: frappe/automation/doctype/assignment_rule/assignment_rule.json @@ -2848,7 +2848,7 @@ msgstr "" #: frappe/public/js/frappe/form/templates/form_sidebar.html:104 #: frappe/website/doctype/web_form/templates/web_form.html:113 msgid "Attachments" -msgstr "" +msgstr "Allegati" #: frappe/public/js/frappe/form/print_utils.js:138 msgid "Attempting Connection to QZ Tray..." @@ -3113,7 +3113,7 @@ msgstr "Messaggio Automatico" #: frappe/core/doctype/user/user.json #: frappe/public/js/frappe/ui/theme_switcher.js:69 msgid "Automatic" -msgstr "" +msgstr "Automatico" #: frappe/email/doctype/email_account/email_account.py:772 msgid "Automatic Linking can be activated only for one Email Account." @@ -3341,7 +3341,7 @@ msgstr "" #: frappe/core/doctype/system_settings/system_settings.json #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Backups" -msgstr "" +msgstr "Backup" #. Label of the backups_size (Float) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json @@ -3435,7 +3435,7 @@ msgstr "" #. Label of the section_break_3 (Section Break) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Basic Info" -msgstr "" +msgstr "Informazioni di base" #. Label of the before (Int) field in DocType 'Event Notifications' #: frappe/desk/doctype/event_notifications/event_notifications.json @@ -3731,7 +3731,7 @@ msgstr "" #. Name of a DocType #: frappe/desk/doctype/bulk_update/bulk_update.json msgid "Bulk Update" -msgstr "" +msgstr "Aggiornamento massivo" #: frappe/model/workflow.py:331 msgid "Bulk approval only support up to 500 documents." @@ -4382,7 +4382,7 @@ msgstr "" #. Label of the changed_by (Link) field in DocType 'Permission Log' #: frappe/core/doctype/permission_log/permission_log.json msgid "Changed by" -msgstr "" +msgstr "Modificato da" #. Name of a DocType #: frappe/desk/doctype/changelog_feed/changelog_feed.json @@ -4875,7 +4875,7 @@ msgstr "" #: frappe/public/js/frappe/ui/sidebar/sidebar.html:44 #: frappe/public/js/frappe/widgets/base_widget.js:159 msgid "Collapse" -msgstr "" +msgstr "Riduci" #: frappe/public/js/frappe/form/controls/code.js:190 msgctxt "Shrink code field." @@ -5077,7 +5077,7 @@ msgstr "" #: frappe/public/js/frappe/model/model.js:135 #: frappe/website/doctype/web_form/templates/web_form.html:129 msgid "Comments" -msgstr "" +msgstr "Commenti" #. Description of the 'Timeline Field' (Data) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -5183,7 +5183,7 @@ msgstr "" #: frappe/core/doctype/scheduled_job_log/scheduled_job_log.json #: frappe/www/complete_signup.html:21 msgid "Complete" -msgstr "" +msgstr "Completato" #: frappe/public/js/frappe/form/sidebar/assign_to.js:206 msgid "Complete By" @@ -5889,7 +5889,7 @@ msgstr "" #: frappe/public/js/frappe/model/model.js:125 #: frappe/public/js/frappe/views/dashboard/dashboard_view.js:479 msgid "Created On" -msgstr "" +msgstr "Creato il" #: frappe/public/js/frappe/desk.js:517 #: frappe/public/js/frappe/views/treeview.js:393 @@ -6371,7 +6371,7 @@ msgstr "Colore Scuro" #: frappe/public/js/frappe/ui/theme_switcher.js:65 msgid "Dark Theme" -msgstr "" +msgstr "Tema scuro" #. Label of the dashboard (Check) field in DocType 'User' #. Label of a Link in the Build Workspace @@ -6474,7 +6474,7 @@ msgstr "" #. Name of a DocType #: frappe/core/doctype/data_export/data_export.json msgid "Data Export" -msgstr "" +msgstr "Esportazione Dati" #. Name of a DocType #. Label of the data_import (Link) field in DocType 'Data Import Log' @@ -6846,7 +6846,7 @@ msgstr "" #: frappe/core/doctype/session_default_settings/session_default_settings.py:38 msgid "Default {0}" -msgstr "{0} Predefinito" +msgstr "{0} di default" #. Description of the 'Heading' (Data) field in DocType 'Contact Us Settings' #: frappe/website/doctype/contact_us_settings/contact_us_settings.json @@ -7035,17 +7035,17 @@ msgstr "" #. Label of the deleted_doctype (Data) field in DocType 'Deleted Document' #: frappe/core/doctype/deleted_document/deleted_document.json msgid "Deleted DocType" -msgstr "" +msgstr "DocType eliminato" #. Name of a DocType #: frappe/core/doctype/deleted_document/deleted_document.json msgid "Deleted Document" -msgstr "" +msgstr "Documenti eliminati" #. Label of the deleted_name (Data) field in DocType 'Deleted Document' #: frappe/core/doctype/deleted_document/deleted_document.json msgid "Deleted Name" -msgstr "" +msgstr "Nome cancellato" #: frappe/desk/reportview.py:644 msgid "Deleted all documents successfully" @@ -7243,7 +7243,7 @@ msgstr "" #: frappe/www/me.html:86 msgid "Desktop" -msgstr "" +msgstr "Desktop" #. Name of a DocType #: frappe/desk/doctype/desktop_icon/desktop_icon.json @@ -7762,7 +7762,7 @@ msgstr "" #: frappe/desk/doctype/notification_subscribed_document/notification_subscribed_document.json #: frappe/public/js/frappe/views/render_preview.js:42 msgid "Document" -msgstr "" +msgstr "Documento" #. Label of the actions (Table) field in DocType 'DocType' #. Label of the document_actions_section (Section Break) field in DocType @@ -10394,7 +10394,7 @@ msgstr "File" #: frappe/public/js/frappe/ui/filters/filter_list.js:134 #: frappe/website/doctype/web_form/web_form.js:213 msgid "Filter" -msgstr "" +msgstr "Filtro" #. Label of the filter_area (HTML) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json @@ -10806,7 +10806,7 @@ msgstr "" #. Label of the for_doctype (Link) field in DocType 'Permission Log' #: frappe/core/doctype/permission_log/permission_log.json msgid "For DocType" -msgstr "" +msgstr "Per DocType" #. Description of the 'Row Name' (Data) field in DocType 'Property Setter' #: frappe/custom/doctype/property_setter/property_setter.json @@ -10816,7 +10816,7 @@ msgstr "" #. Label of the for_document (Dynamic Link) field in DocType 'Permission Log' #: frappe/core/doctype/permission_log/permission_log.json msgid "For Document" -msgstr "" +msgstr "Per Documento" #: frappe/core/doctype/user_permission/user_permission_list.js:155 msgid "For Document Type" @@ -11049,7 +11049,7 @@ msgstr "Frappe Framework" #: frappe/public/js/frappe/ui/theme_switcher.js:59 msgid "Frappe Light" -msgstr "" +msgstr "Chiaro" #. Option for the 'Service' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json @@ -11930,7 +11930,7 @@ msgstr "Ciao," #: frappe/public/js/frappe/form/workflow.js:23 #: frappe/public/js/frappe/utils/help.js:27 msgid "Help" -msgstr "" +msgstr "Aiuto" #. Name of a DocType #. Label of a Link in the Website Workspace @@ -12282,13 +12282,13 @@ msgstr "" #: frappe/public/js/frappe/model/meta.js:208 #: frappe/public/js/frappe/model/model.js:122 msgid "ID" -msgstr "" +msgstr "ID" #: frappe/desk/reportview.py:529 #: frappe/public/js/frappe/views/reports/report_view.js:983 msgctxt "Label of name column in report" msgid "ID" -msgstr "" +msgstr "ID" #: frappe/public/js/print_format_builder/PrintFormatControls.vue:169 msgid "ID (name)" @@ -14919,7 +14919,7 @@ msgstr "Colore Chiaro" #: frappe/public/js/frappe/ui/theme_switcher.js:60 msgid "Light Theme" -msgstr "" +msgstr "Tema chiaro" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #: frappe/core/doctype/comment/comment.json @@ -17819,7 +17819,7 @@ msgstr "" #: frappe/email/doctype/notification/notification.json #: frappe/public/js/frappe/ui/sidebar/sidebar.js:294 msgid "Notification" -msgstr "" +msgstr "Notifiche" #. Name of a DocType #: frappe/desk/doctype/notification_log/notification_log.json @@ -17865,7 +17865,7 @@ msgstr "" #: frappe/public/js/frappe/ui/notifications/notifications.js:68 #: frappe/public/js/frappe/ui/notifications/notifications.js:227 msgid "Notifications" -msgstr "" +msgstr "Notifiche" #: frappe/public/js/frappe/ui/notifications/notifications.js:339 msgid "Notifications Disabled" @@ -18711,7 +18711,7 @@ msgstr "" #: frappe/desk/doctype/system_console/system_console.json #: frappe/integrations/doctype/integration_request/integration_request.json msgid "Output" -msgstr "" +msgstr "Risultato" #: frappe/public/js/frappe/form/templates/form_dashboard.html:5 msgid "Overview" @@ -19342,7 +19342,7 @@ msgstr "" #. Name of a DocType #: frappe/core/doctype/permission_log/permission_log.json msgid "Permission Log" -msgstr "" +msgstr "Log Permessi" #. Option for the 'Script Type' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json @@ -19361,7 +19361,7 @@ msgstr "" #: frappe/core/doctype/permission_inspector/permission_inspector.json #: frappe/core/doctype/permission_type/permission_type.json msgid "Permission Type" -msgstr "" +msgstr "Tipo permesso" #: frappe/core/doctype/permission_type/permission_type.py:40 msgid "Permission Type '{0}' is reserved. Please choose another name." @@ -21437,7 +21437,7 @@ msgstr "" #: frappe/core/doctype/permission_log/permission_log.json #: frappe/desk/doctype/todo/todo.json msgid "Reference Type" -msgstr "" +msgstr "Tipo riferimento" #. Label of the reference_name (Dynamic Link) field in DocType 'View Log' #: frappe/core/doctype/view_log/view_log.json @@ -22249,7 +22249,7 @@ msgstr "" #. Label of the restored (Check) field in DocType 'Deleted Document' #: frappe/core/doctype/deleted_document/deleted_document.json msgid "Restored" -msgstr "" +msgstr "Ripristinato" #: frappe/core/doctype/deleted_document/deleted_document.py:74 msgid "Restoring Deleted Document" @@ -22458,7 +22458,7 @@ msgstr "Tipologia Profilo" #. Label of the role_profiles (Table MultiSelect) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Role Profiles" -msgstr "" +msgstr "Tipologia profilo" #. Name of a DocType #: frappe/core/doctype/role_replication/role_replication.json @@ -23984,7 +23984,7 @@ msgstr "Impostazioni Sessione Predefinita" #: frappe/core/doctype/session_default_settings/session_default_settings.json #: frappe/public/js/frappe/ui/toolbar/toolbar.js:251 msgid "Session Defaults" -msgstr "Predefiniti Sessione" +msgstr "Sessione predefinita" #: frappe/public/js/frappe/ui/toolbar/toolbar.js:236 msgid "Session Defaults Saved" @@ -25872,11 +25872,11 @@ msgstr "Cambia Fotocamera" #: frappe/public/js/frappe/desk.js:96 #: frappe/public/js/frappe/ui/theme_switcher.js:11 msgid "Switch Theme" -msgstr "" +msgstr "Cambia tema" #: frappe/templates/includes/navbar/navbar_login.html:17 msgid "Switch To Desk" -msgstr "" +msgstr "Vai al Desk" #: frappe/public/js/frappe/ui/capture.js:282 msgid "Switching Camera" @@ -26555,7 +26555,7 @@ msgstr "" #: frappe/public/js/frappe/list/list_view.js:691 msgid "The count shown is an estimated count. Click here to see the accurate count." -msgstr "" +msgstr "Il conteggio mostrato è una stima. Clicca qui per vedere il conteggio esatto." #. Description of the 'Code' (Data) field in DocType 'Country' #: frappe/geo/doctype/country/country.json @@ -27283,7 +27283,7 @@ msgstr "" #: frappe/public/js/frappe/ui/theme_switcher.js:64 msgid "Timeless Night" -msgstr "" +msgstr "Scuro" #. Label of the timeline (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -29040,7 +29040,7 @@ msgstr "" #: frappe/public/js/frappe/ui/theme_switcher.js:70 msgid "Uses system's theme to switch between light and dark mode" -msgstr "" +msgstr "Utilizza il tema del sistema per passare dalla modalità chiara a quella scura" #: frappe/public/js/frappe/desk.js:154 msgid "Using this console may allow attackers to impersonate you and steal your information. Do not enter or paste code that you do not understand." @@ -29458,7 +29458,7 @@ msgstr "" #: frappe/public/js/frappe/router.js:618 #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Warning" -msgstr "" +msgstr "Attenzione" #: frappe/custom/doctype/customize_form/customize_form.js:217 msgid "Warning: DATA LOSS IMMINENT! Proceeding will permanently delete following database columns from doctype {0}:" @@ -29649,7 +29649,7 @@ msgstr "" #: frappe/public/js/frappe/ui/toolbar/about.js:11 #: frappe/website/workspace/website/website.json msgid "Website" -msgstr "" +msgstr "Sito web" #. Name of a report #: frappe/website/report/website_analytics/website_analytics.json @@ -30166,7 +30166,7 @@ msgstr "" #. Option for the 'View' (Select) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Workspaces" -msgstr "" +msgstr "Spazi di lavoro" #: frappe/public/js/frappe/form/footer/form_timeline.js:757 msgid "Would you like to publish this comment? This means it will become visible to website/portal users." @@ -30331,7 +30331,7 @@ msgstr "" #: frappe/public/js/frappe/router.js:647 msgid "You are about to open an external link. To confirm, click the link again." -msgstr "" +msgstr "Stai per aprire un link esterno. Per confermare, clicca nuovamente sul link." #: frappe/public/js/frappe/dom.js:435 msgid "You are connected to internet." @@ -30789,7 +30789,7 @@ msgstr "" #: frappe/public/js/frappe/router.js:658 msgid "You will be redirected to:" -msgstr "" +msgstr "Verrai reindirizzato a:" #: frappe/core/doctype/user_invitation/user_invitation.py:113 msgid "You've been invited to join {0}" @@ -31872,7 +31872,7 @@ msgstr "" #: frappe/public/js/frappe/utils/pretty_date.js:33 msgid "{0} d" -msgstr "" +msgstr "{0} d" #: frappe/public/js/frappe/utils/pretty_date.js:60 msgid "{0} days ago" @@ -31909,7 +31909,7 @@ msgstr "" #: frappe/public/js/frappe/utils/pretty_date.js:29 msgid "{0} h" -msgstr "" +msgstr "{0} h" #: frappe/core/doctype/user_permission/user_permission.py:77 msgid "{0} has already assigned default value for {1}." @@ -32177,7 +32177,7 @@ msgstr "" #: frappe/public/js/frappe/utils/pretty_date.js:27 msgid "{0} m" -msgstr "" +msgstr "{0} m" #: frappe/desk/notifications.py:407 msgid "{0} mentioned you in a comment in {1} {2}" @@ -32185,7 +32185,7 @@ msgstr "" #: frappe/public/js/frappe/utils/pretty_date.js:50 msgid "{0} minutes ago" -msgstr "" +msgstr "{0} minuti fa" #: frappe/public/js/frappe/utils/pretty_date.js:68 msgid "{0} months ago" diff --git a/frappe/locale/pt_BR.po b/frappe/locale/pt_BR.po index 7067bd85bc..7a277218bc 100644 --- a/frappe/locale/pt_BR.po +++ b/frappe/locale/pt_BR.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" "POT-Creation-Date: 2026-01-25 09:36+0000\n" -"PO-Revision-Date: 2026-01-27 16:05\n" +"PO-Revision-Date: 2026-01-28 16:03\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Portuguese, Brazilian\n" "MIME-Version: 1.0\n" @@ -4559,7 +4559,7 @@ msgstr "" #: frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.py:39 #: frappe/website/doctype/contact_us_settings/contact_us_settings.json msgid "City" -msgstr "" +msgstr "Cidade" #. Label of the city (Data) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json @@ -4691,7 +4691,7 @@ msgstr "" #: frappe/integrations/doctype/oauth_authorization_code/oauth_authorization_code.json #: frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json msgid "Client" -msgstr "" +msgstr "Cliente" #. Label of the client_code_section (Section Break) field in DocType 'Report' #: frappe/core/doctype/report/report.json @@ -5388,7 +5388,7 @@ msgstr "" #: frappe/core/doctype/user/user.json #: frappe/public/js/frappe/form/dashboard.js:54 msgid "Connections" -msgstr "" +msgstr "Conexões" #. Label of the console (Code) field in DocType 'System Console' #: frappe/desk/doctype/system_console/system_console.json @@ -5671,7 +5671,7 @@ msgstr "" #: frappe/geo/doctype/country/country.json #: frappe/website/doctype/contact_us_settings/contact_us_settings.json msgid "Country" -msgstr "" +msgstr "País" #: frappe/utils/__init__.py:123 msgid "Country Code Required" @@ -7252,7 +7252,7 @@ msgstr "" #: frappe/public/js/frappe/form/layout.js:155 #: frappe/public/js/frappe/views/treeview.js:292 msgid "Details" -msgstr "" +msgstr "Detalhes" #. Label of the use_csv_sniffer (Check) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json @@ -7405,7 +7405,7 @@ msgstr "" #: frappe/website/doctype/about_us_settings/about_us_settings.json #: frappe/website/doctype/contact_us_settings/contact_us_settings.json msgid "Disabled" -msgstr "" +msgstr "Desativado" #: frappe/email/doctype/email_account/email_account.js:300 msgid "Disabled Auto Reply" @@ -8632,7 +8632,7 @@ msgstr "" #: frappe/website/web_form/request_to_delete_data/request_to_delete_data.json #: frappe/www/login.html:8 frappe/www/login.py:104 msgid "Email" -msgstr "" +msgstr "E-Mail" #. Label of the email_account (Link) field in DocType 'Communication' #. Label of the email_account (Link) field in DocType 'User Email' @@ -11228,7 +11228,7 @@ msgstr "" #: frappe/contacts/doctype/gender/gender.json #: frappe/core/doctype/user/user.json msgid "Gender" -msgstr "" +msgstr "Gênero" #: frappe/desk/page/setup_wizard/install_fixtures.py:32 msgid "Genderqueer" @@ -14596,7 +14596,7 @@ msgstr "" #: frappe/core/web_form/edit_profile/edit_profile.json #: frappe/www/complete_signup.html:19 msgid "Last Name" -msgstr "" +msgstr "Sobrenome" #. Label of the last_password_reset_date (Date) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -16228,7 +16228,7 @@ msgstr "" #: frappe/tests/test_translate.py:89 frappe/tests/test_translate.py:91 #: frappe/tests/test_translate.py:94 msgid "Mobile No" -msgstr "Telefone Celular" +msgstr "Celular" #. Label of a field in the edit-profile Web Form #: frappe/core/web_form/edit_profile/edit_profile.json @@ -19442,7 +19442,7 @@ msgstr "" #: frappe/website/doctype/contact_us_settings/contact_us_settings.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Phone" -msgstr "" +msgstr "Telefone" #. Label of the phone_no (Data) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json @@ -20307,7 +20307,7 @@ msgstr "" #: frappe/public/js/frappe/views/communication.js:186 msgid "Print Language" -msgstr "" +msgstr "Idioma de Impressão" #: frappe/public/js/frappe/form/print_utils.js:244 msgid "Print Sent to the printer!" @@ -25056,7 +25056,7 @@ msgstr "" #: frappe/website/doctype/website_route_redirect/website_route_redirect.json #: frappe/website/report/website_analytics/website_analytics.js:38 msgid "Source" -msgstr "" +msgstr "Origem" #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Source Code" @@ -25307,7 +25307,7 @@ msgstr "" #: frappe/contacts/doctype/address/address.json #: frappe/website/doctype/contact_us_settings/contact_us_settings.json msgid "State/Province" -msgstr "" +msgstr "Estado" #. Label of the document_states_section (Tab Break) field in DocType 'DocType' #. Label of the states (Table) field in DocType 'Customize Form' @@ -25394,7 +25394,7 @@ msgstr "" #: frappe/website/doctype/personal_data_deletion_step/personal_data_deletion_step.json #: frappe/workflow/doctype/workflow_action/workflow_action.json msgid "Status" -msgstr "" +msgstr "Situação" #: frappe/www/update-password.html:188 msgid "Status Updated" @@ -28295,7 +28295,7 @@ msgstr "" #: frappe/email/doctype/email_group_member/email_group_member.json #: frappe/email/queue.py:123 msgid "Unsubscribed" -msgstr "" +msgstr "Descadastrado" #: frappe/database/query.py:1098 msgid "Unsupported function or operator: {0}" @@ -29623,7 +29623,7 @@ msgstr "" #: frappe/public/js/frappe/ui/toolbar/about.js:11 #: frappe/website/workspace/website/website.json msgid "Website" -msgstr "" +msgstr "Site" #. Name of a report #: frappe/website/report/website_analytics/website_analytics.json @@ -31094,7 +31094,7 @@ msgstr "" #: frappe/core/doctype/permission_inspector/permission_inspector.json #: frappe/website/doctype/social_link_settings/social_link_settings.json msgid "email" -msgstr "" +msgstr "E-Mail" #: frappe/public/js/frappe/ui/toolbar/search_utils.js:318 msgid "email inbox" diff --git a/frappe/tests/test_translate.py b/frappe/tests/test_translate.py index 651c79d897..b435781684 100644 --- a/frappe/tests/test_translate.py +++ b/frappe/tests/test_translate.py @@ -86,7 +86,7 @@ class TestTranslate(IntegrationTestCase): self.assertEqual(_("Mobile No"), "Mobile No") try: frappe.local.lang = "pt-BR" - self.assertEqual(_("Mobile No"), "Telefone Celular") + self.assertEqual(_("Mobile No"), "Celular") frappe.local.lang = "pt" self.assertEqual(_("Mobile No"), "Nr. de Telemóvel") finally: From 8c4fcd51b8f56f6ef0abcf375c3b06c07c57f2e3 Mon Sep 17 00:00:00 2001 From: sokumon Date: Fri, 30 Jan 2026 13:42:25 +0530 Subject: [PATCH 806/812] fix: show non standard icons --- .../desk/doctype/desktop_icon/desktop_icon.py | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.py b/frappe/desk/doctype/desktop_icon/desktop_icon.py index 86dd014cde..84e0e9b55f 100644 --- a/frappe/desk/doctype/desktop_icon/desktop_icon.py +++ b/frappe/desk/doctype/desktop_icon/desktop_icon.py @@ -166,26 +166,10 @@ def get_desktop_icons(user=None, bootinfo=None): ] standard_icons = frappe.get_all("Desktop Icon", fields=fields, filters={"standard": 1}) - - user_icons = frappe.get_all("Desktop Icon", fields=fields, filters={"standard": 0, "owner": user}) + user_icons = frappe.get_all( + "Desktop Icon", fields=fields, filters=[["standard", "=", 0], "or", ["owner", "=", user]] + ) user_icons = user_icons + standard_icons - # for icon in user_icons: - # standard_icon = standard_map.get(icon.module_name, None) - - # # override properties from standard icon - # if standard_icon: - # for key in ("route", "label", "color", "icon", "link"): - # if standard_icon.get(key): - # icon[key] = standard_icon.get(key) - - # if standard_icon.blocked: - # icon.hidden = 1 - - # # flag for modules_select dialog - # icon.hidden_in_standard = 1 - - # elif standard_icon.force_show: - # icon.hidden = 0 # sort by idx user_icons.sort(key=lambda a: a.idx) From 76253eba0095d10fc901166a9dd9b7cca4d3c429 Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Fri, 30 Jan 2026 15:43:49 +0530 Subject: [PATCH 807/812] build(deps): bump oauthlib and google stack (#36509) Signed-off-by: Akhil Narang --- pyproject.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 336db872a4..05e675cc78 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,7 +45,7 @@ dependencies = [ "MarkupSafe~=3.0.3", "nh3~=0.3.2", "num2words~=0.5.14", - "oauthlib~=3.2.2", + "oauthlib~=3.3.1", "openpyxl~=3.1.5", "orjson~=3.11.5", "passlib~=1.7.4", @@ -81,9 +81,9 @@ dependencies = [ "zxcvbn~=4.5.0", "markdownify~=1.2.2", # integration dependencies - "google-api-python-client~=2.172.0", - "google-auth-oauthlib~=1.2.2", - "google-auth~=2.40.3", + "google-api-python-client~=2.188.0", + "google-auth-oauthlib~=1.2.4", + "google-auth~=2.48.0", "posthog~=5.0.0", "vobject~=0.9.9", "pycountry~=24.6.1", From 40f782a7ee92a25ddcadd7189d182f40a65b2a93 Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Fri, 30 Jan 2026 16:40:04 +0530 Subject: [PATCH 808/812] fix: change label to make it more specific --- frappe/public/js/frappe/list/list_filter.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/list/list_filter.js b/frappe/public/js/frappe/list/list_filter.js index 267ed1c63f..9225fad5e8 100644 --- a/frappe/public/js/frappe/list/list_filter.js +++ b/frappe/public/js/frappe/list/list_filter.js @@ -12,6 +12,7 @@ export default class ListFilter { } refresh_list_filter() { + if (frappe.is_mobile()) return; this.get_list_filters().then(() => { this.render_saved_filters(); }); @@ -84,7 +85,7 @@ export default class ListFilter { append_create_new_item($menu) { const new_filter = { name: "create_new", - filter_name: "Create New", + filter_name: "Save Current Filter", }; const $create_item = this.filter_template(new_filter, true); From fa45415086527b4d5a2cb002a2b52a63b3eed9ec Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 30 Jan 2026 16:40:18 +0530 Subject: [PATCH 809/812] fix!: Remove weird fallback to tabSingles (#36517) This doesn't make any sense. --- frappe/database/database.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/frappe/database/database.py b/frappe/database/database.py index 57ac3edc61..cbcc9896a4 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -677,22 +677,6 @@ class Database: or str(e).startswith("Invalid DocType") ): out = None - elif (not ignore) and frappe.db.is_table_missing(e): - # table not found, look in singles - fields = ( - [fieldname] if (isinstance(fieldname, str) and fieldname != "*") else fieldname - ) - out = self.get_values_from_single( - fields, - filters, - doctype, - as_dict, - debug, - update, - run=run, - distinct=distinct, - ) - else: raise else: From 3cb6602704d28f951c0965ceea8f61260c8dd1a7 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 30 Jan 2026 16:52:17 +0530 Subject: [PATCH 810/812] fix!: Only query single for single doctypes (#36519) Right now, if `None` is passed as second arguement we automatically query singles, in 99% cases this just results in `None` with extra steps... But why do that? Better to terminate query early and return nothing if `pk==null` is requested. --- frappe/database/database.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frappe/database/database.py b/frappe/database/database.py index cbcc9896a4..e69c871b13 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -628,6 +628,9 @@ class Database: # return last login of **User** `test@example.com` user = frappe.db.get_values("User", "test@example.com", "*")[0] """ + + from frappe.model.utils import is_single_doctype + out = None if cache and isinstance(filters, str) and fieldname in self.value_cache[doctype][filters]: return self.value_cache[doctype][filters][fieldname] @@ -679,7 +682,7 @@ class Database: out = None else: raise - else: + elif is_single_doctype(doctype): fields = [fieldname] if (isinstance(fieldname, str) and fieldname != "*") else fieldname out = self.get_values_from_single( fields, @@ -692,6 +695,8 @@ class Database: pluck=pluck, distinct=distinct, ) + else: + return None if cache and isinstance(filters, str): self.value_cache[doctype][filters][fieldname] = out From 8b8570e28cf5bb797f96f477ab577cff0495088a Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Fri, 30 Jan 2026 17:17:43 +0530 Subject: [PATCH 811/812] fix: prevent delete icon from going out of view --- frappe/public/js/frappe/list/list_settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/list/list_settings.js b/frappe/public/js/frappe/list/list_settings.js index f4cd7610a1..4399a0d368 100644 --- a/frappe/public/js/frappe/list/list_settings.js +++ b/frappe/public/js/frappe/list/list_settings.js @@ -121,7 +121,7 @@ export default class ListSettings {
    ${__(me.fields[idx].label, null, me.doctype)}
    -
    +
    ${frappe.utils.icon("trash", "xs")} From 491130397719310e34d67d1d2f886cac26e3f8dd Mon Sep 17 00:00:00 2001 From: Hussain Nagaria Date: Fri, 30 Jan 2026 18:04:41 +0530 Subject: [PATCH 812/812] fix: filters is expected to be a list * check the next line, extend is being called --- frappe/core/doctype/log_settings/log_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/core/doctype/log_settings/log_settings.py b/frappe/core/doctype/log_settings/log_settings.py index 9863ff7660..8501be7b64 100644 --- a/frappe/core/doctype/log_settings/log_settings.py +++ b/frappe/core/doctype/log_settings/log_settings.py @@ -131,7 +131,7 @@ def has_unseen_error_log(): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs def get_log_doctypes(doctype, txt, searchfield, start, page_len, filters): - filters = filters or {} + filters = filters or [] filters.extend( [