From 16d3c2c85c1a4bd8ad128e8030b81f09d41704ff Mon Sep 17 00:00:00 2001 From: sokumon Date: Thu, 27 Nov 2025 12:36:39 +0530 Subject: [PATCH 01/14] feat: generate sidebars based on module --- frappe/boot.py | 34 ++++++----- .../workspace_sidebar/workspace_sidebar.py | 60 +++++++++++++++++++ 2 files changed, 78 insertions(+), 16 deletions(-) diff --git a/frappe/boot.py b/frappe/boot.py index ebfaa83fea..9bb2bb9a8e 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -527,7 +527,20 @@ def get_sentry_dsn(): return os.getenv("FRAPPE_SENTRY_DSN") +def add_user_specific_sidebar(sidebars): + try: + my_workspace_for_user = frappe.get_doc("Workspace Sidebar", f"My Workspaces-{frappe.session.user}") + sidebars.append( + {"name": my_workspace_for_user.name, "header_icon": my_workspace_for_user.header_icon} + ) + except frappe.DoesNotExistError: + my_workspace = frappe.get_doc("Workspace Sidebar", "My Workspaces") + sidebars.append({"name": my_workspace.name, "header_icon": my_workspace.header_icon}) + + def get_sidebar_items(): + from frappe.desk.doctype.workspace_sidebar.workspace_sidebar import create_sidebars_for_modules + sidebars = frappe.get_all( "Workspace Sidebar", fields=["name", "header_icon"], filters={"name": ["not like", "%My Workspaces%"]} ) @@ -535,11 +548,12 @@ def get_sidebar_items(): sidebar_items = {} for s in sidebars: - w = frappe.get_doc("Workspace Sidebar", s["name"]) + print(s) + w = frappe.get_doc("Workspace Sidebar", s.get("name")) sidebar_items[s["name"].lower()] = { - "label": s["name"], + "label": s.get("name"), "items": [], - "header_icon": s["header_icon"], + "header_icon": s.get("header_icon"), "module": w.module, "app": w.app, } @@ -568,26 +582,14 @@ def get_sidebar_items(): "report_type": report_type, "ref_doctype": ref_doctype, } - if ( "My Workspaces" in s["name"] or si.type == "Section Break" or w.is_item_allowed(si.link_to, si.link_type) ): - sidebar_items[s["name"].lower()]["items"].append(workspace_sidebar) + sidebar_items[s.get("name").lower()]["items"].append(workspace_sidebar) old_name = f"my workspaces-{frappe.session.user.lower()}" if old_name in sidebar_items.keys(): sidebar_items["my workspaces"] = sidebar_items.pop(old_name) return sidebar_items - - -def add_user_specific_sidebar(sidebars): - try: - my_workspace_for_user = frappe.get_doc("Workspace Sidebar", f"My Workspaces-{frappe.session.user}") - sidebars.append( - {"name": my_workspace_for_user.name, "header_icon": my_workspace_for_user.header_icon} - ) - except frappe.DoesNotExistError: - my_workspace = frappe.get_doc("Workspace Sidebar", "My Workspaces") - sidebars.append({"name": my_workspace.name, "header_icon": my_workspace.header_icon}) diff --git a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py index 444673c7b2..83782de556 100644 --- a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py +++ b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py @@ -240,3 +240,63 @@ def add_to_my_workspace(workspace): except Exception as e: frappe.log_error(title="Error in Adding Private Workspaces", message=e) + + +def create_sidebars_for_modules(): + sidebars = [] + for module in frappe.get_all("Module Def", pluck="name"): + if not ( + frappe.db.exists("Workspace Sidebar", {"module": module}) + or frappe.db.exists("Workspace Sidebar", {"name": module}) + ): + print("Fetching information for Module", module) + module_info = get_module_info(module) + sidebar_items = create_sidebar_items(module_info) + sidebar = frappe.new_doc("Workspace Sidebar") + sidebar.title = module + sidebar.items = sidebar_items + sidebar.header_icon = "hammer" + sidebars.append(sidebar) + sidebar.save() + return sidebars + + +def get_module_info(module_name): + entities = ["Workspace", "Dashboard", "DocType", "Report", "Page"] + module_info = {} + + for entity in entities: + module_info[entity] = {} + filters = [{"module": module_name}] + if entity.lower() == "doctype": + filters.append({"istable": 0}) + module_info[entity] = frappe.get_all(entity, filters=filters, pluck="name") + + return module_info + + +def create_sidebar_items(module_info): + print(module_info) + sidebar_items = [] + for entity, items in module_info.items(): + if entity.lower() == "report": + section_break = frappe.new_doc("Workspace Sidebar Item") + section_break.update( + { + "type": "Section Break", + } + ) + sidebar_items.append(section_break) + for item in items: + item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item} + if entity.lower() == "workspace": + item_info["icon"] = "home" + + if entity.lower() == "doctype" and "settings" in item.lower(): + item_info["icon"] = "settings" + + sidebar_item = frappe.new_doc("Workspace Sidebar Item") + sidebar_item.update(item_info) + sidebar_items.append(sidebar_item) + + return sidebar_items From d9d231feb8f455b4f59280dd40da50d0eb2b3353 Mon Sep 17 00:00:00 2001 From: sokumon Date: Mon, 8 Dec 2025 12:27:59 +0530 Subject: [PATCH 02/14] refactor: move logic to a seperate patch --- frappe/boot.py | 25 ++++---- .../workspace_sidebar/workspace_sidebar.py | 60 ------------------ frappe/patches.txt | 1 + .../auto_generate_sidebar_from_modules.py | 61 +++++++++++++++++++ 4 files changed, 73 insertions(+), 74 deletions(-) create mode 100644 frappe/patches/v16_0/auto_generate_sidebar_from_modules.py diff --git a/frappe/boot.py b/frappe/boot.py index 9bb2bb9a8e..2af5107988 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -527,20 +527,7 @@ def get_sentry_dsn(): return os.getenv("FRAPPE_SENTRY_DSN") -def add_user_specific_sidebar(sidebars): - try: - my_workspace_for_user = frappe.get_doc("Workspace Sidebar", f"My Workspaces-{frappe.session.user}") - sidebars.append( - {"name": my_workspace_for_user.name, "header_icon": my_workspace_for_user.header_icon} - ) - except frappe.DoesNotExistError: - my_workspace = frappe.get_doc("Workspace Sidebar", "My Workspaces") - sidebars.append({"name": my_workspace.name, "header_icon": my_workspace.header_icon}) - - def get_sidebar_items(): - from frappe.desk.doctype.workspace_sidebar.workspace_sidebar import create_sidebars_for_modules - sidebars = frappe.get_all( "Workspace Sidebar", fields=["name", "header_icon"], filters={"name": ["not like", "%My Workspaces%"]} ) @@ -548,7 +535,6 @@ def get_sidebar_items(): sidebar_items = {} for s in sidebars: - print(s) w = frappe.get_doc("Workspace Sidebar", s.get("name")) sidebar_items[s["name"].lower()] = { "label": s.get("name"), @@ -593,3 +579,14 @@ def get_sidebar_items(): if old_name in sidebar_items.keys(): sidebar_items["my workspaces"] = sidebar_items.pop(old_name) return sidebar_items + + +def add_user_specific_sidebar(sidebars): + try: + my_workspace_for_user = frappe.get_doc("Workspace Sidebar", f"My Workspaces-{frappe.session.user}") + sidebars.append( + {"name": my_workspace_for_user.name, "header_icon": my_workspace_for_user.header_icon} + ) + except frappe.DoesNotExistError: + my_workspace = frappe.get_doc("Workspace Sidebar", "My Workspaces") + sidebars.append({"name": my_workspace.name, "header_icon": my_workspace.header_icon}) diff --git a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py index 83782de556..444673c7b2 100644 --- a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py +++ b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py @@ -240,63 +240,3 @@ def add_to_my_workspace(workspace): except Exception as e: frappe.log_error(title="Error in Adding Private Workspaces", message=e) - - -def create_sidebars_for_modules(): - sidebars = [] - for module in frappe.get_all("Module Def", pluck="name"): - if not ( - frappe.db.exists("Workspace Sidebar", {"module": module}) - or frappe.db.exists("Workspace Sidebar", {"name": module}) - ): - print("Fetching information for Module", module) - module_info = get_module_info(module) - sidebar_items = create_sidebar_items(module_info) - sidebar = frappe.new_doc("Workspace Sidebar") - sidebar.title = module - sidebar.items = sidebar_items - sidebar.header_icon = "hammer" - sidebars.append(sidebar) - sidebar.save() - return sidebars - - -def get_module_info(module_name): - entities = ["Workspace", "Dashboard", "DocType", "Report", "Page"] - module_info = {} - - for entity in entities: - module_info[entity] = {} - filters = [{"module": module_name}] - if entity.lower() == "doctype": - filters.append({"istable": 0}) - module_info[entity] = frappe.get_all(entity, filters=filters, pluck="name") - - return module_info - - -def create_sidebar_items(module_info): - print(module_info) - sidebar_items = [] - for entity, items in module_info.items(): - if entity.lower() == "report": - section_break = frappe.new_doc("Workspace Sidebar Item") - section_break.update( - { - "type": "Section Break", - } - ) - sidebar_items.append(section_break) - for item in items: - item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item} - if entity.lower() == "workspace": - item_info["icon"] = "home" - - if entity.lower() == "doctype" and "settings" in item.lower(): - item_info["icon"] = "settings" - - sidebar_item = frappe.new_doc("Workspace Sidebar Item") - sidebar_item.update(item_info) - sidebar_items.append(sidebar_item) - - return sidebar_items diff --git a/frappe/patches.txt b/frappe/patches.txt index 5b076fab59..93ff293ccb 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -252,3 +252,4 @@ frappe.patches.v16_0.auto_generate_desktop_icon_and_sidebar frappe.patches.v16_0.add_private_workspaces_to_sidebar frappe.core.doctype.communication_link.patches.copy_communication_date_to_link frappe.core.doctype.communication.patches.drop_ref_dt_dn_index +frappe.patches.v16_0.auto_generate_sidebar_from_modules diff --git a/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py b/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py new file mode 100644 index 0000000000..008c7a1b6b --- /dev/null +++ b/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py @@ -0,0 +1,61 @@ +import frappe + + +def execute(): + """Auto generate sidebar from module""" + sidebars = [] + for module in frappe.get_all("Module Def", pluck="name"): + if not ( + frappe.db.exists("Workspace Sidebar", {"module": module}) + or frappe.db.exists("Workspace Sidebar", {"name": module}) + ): + print("Fetching information for Module", module) + module_info = get_module_info(module) + sidebar_items = create_sidebar_items(module_info) + sidebar = frappe.new_doc("Workspace Sidebar") + sidebar.title = module + sidebar.items = sidebar_items + sidebar.header_icon = "hammer" + sidebars.append(sidebar) + sidebar.save() + return sidebars + + +def get_module_info(module_name): + entities = ["Workspace", "Dashboard", "DocType", "Report", "Page"] + module_info = {} + + for entity in entities: + module_info[entity] = {} + filters = [{"module": module_name}] + if entity.lower() == "doctype": + filters.append({"istable": 0}) + module_info[entity] = frappe.get_all(entity, filters=filters, pluck="name") + + return module_info + + +def create_sidebar_items(module_info): + sidebar_items = [] + for entity, items in module_info.items(): + if entity.lower() == "report": + section_break = frappe.new_doc("Workspace Sidebar Item") + section_break.update( + { + "type": "Section Break", + } + ) + sidebar_items.append(section_break) + for item in items: + item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item} + if entity.lower() == "workspace": + item_info["icon"] = "home" + + if entity.lower() == "doctype" and "settings" in item.lower(): + item_info["icon"] = "settings" + + sidebar_item = frappe.new_doc("Workspace Sidebar Item") + sidebar_item.update(item_info) + sidebar_items.append(sidebar_item) + + return sidebar_items From 207ee7a367dacae63e81d7ce5ae0d3393f2067f9 Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Mon, 8 Dec 2025 16:51:58 +0530 Subject: [PATCH 03/14] fix(query): match `between` behaviour for datetime fields with db_query Signed-off-by: Akhil Narang --- frappe/database/query.py | 48 ++++++++++++++++++++++++++++++++++++++ frappe/tests/test_query.py | 24 +++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/frappe/database/query.py b/frappe/database/query.py index 9b71d307a3..8614601bfa 100644 --- a/frappe/database/query.py +++ b/frappe/database/query.py @@ -79,6 +79,44 @@ def _apply_date_field_filter_conversion(value, operator: str, doctype: str, fiel return value +def _apply_datetime_field_filter_conversion(between_values: tuple | list, doctype: str, field) -> tuple: + """Apply date to datetime conversion for Datetime fields with 'between' operator. + + Args: + between_values: Tuple/list of two values [from, to] for between filter + doctype: DocType name + field: Field name or pypika Field object + + Returns: + Tuple with dates expanded to datetime ranges for Datetime fields + """ + from frappe.model.db_query import _convert_type_for_between_filters + + # Extract field name + field_name = field + if "." in str(field): + field_name = field.split(".")[-1] + + # Skip querying meta for core doctypes to avoid recursion + if doctype in CORE_DOCTYPES: + df = None + else: + meta = frappe.get_meta(doctype) + df = meta.get_field(field_name) if meta else None + + # Standard datetime fields or Datetime fieldtype + if not (field_name in ("creation", "modified") or (df and df.fieldtype == "Datetime")): + return between_values + + from_val, to_val = between_values + + # Convert to datetime using db_query helper (handles strings, dates, datetimes) + from_val = _convert_type_for_between_filters(from_val, set_time=datetime.time()) + to_val = _convert_type_for_between_filters(to_val, set_time=datetime.time(23, 59, 59, 999999)) + + return (from_val, to_val) + + if TYPE_CHECKING: from frappe.query_builder import DocType @@ -487,12 +525,22 @@ class Engine: frappe.throw(_("Document cannot be used as a filter value")) _operator = operator + if _operator.lower() in ("timespan", "previous", "next"): + from frappe.model.db_query import get_date_range + + _value = get_date_range(_operator.lower(), _value) + _operator = "between" + # For Date fields with datetime values, convert to date to match db_query behavior if isinstance(_value, datetime.datetime) or ( isinstance(_value, list | tuple) and any(isinstance(v, datetime.datetime) for v in _value) ): _value = _apply_date_field_filter_conversion(_value, _operator, doctype or self.doctype, field) + # For Datetime fields with date values and 'between' operator, convert to datetime range to match db_query + if _operator.lower() == "between" and isinstance(_value, list | tuple) and len(_value) == 2: + _value = _apply_datetime_field_filter_conversion(_value, doctype or self.doctype, field) + if not _value and isinstance(_value, list | tuple | set): _value = ("",) diff --git a/frappe/tests/test_query.py b/frappe/tests/test_query.py index 96e78990f3..e4d9150014 100644 --- a/frappe/tests/test_query.py +++ b/frappe/tests/test_query.py @@ -1902,6 +1902,30 @@ class TestQuery(IntegrationTestCase): # If we get here without PermissionError, the test passes self.assertIn(self.normalize_sql("GROUP BY `created_date`"), self.normalize_sql(sql)) + def test_between_datetime_expansion(self): + """Test that date strings are expanded to datetime ranges for Datetime fields with 'between' operator""" + # Test with creation field (standard datetime field) + query = frappe.qb.get_query( + "User", + filters={"creation": ["between", ["2025-12-01", "2025-12-01"]]}, + ) + sql = query.get_sql() + # Date strings should be expanded to datetime ranges + self.assertIn("2025-12-01 00:00:00", sql) + self.assertIn("2025-12-01 23:59:59", sql) + + def test_timespan_datetime_expansion(self): + """Test that timespan operator expands dates to datetime ranges for Datetime fields""" + query = frappe.qb.get_query( + "User", + filters={"creation": ["timespan", "last 7 days"]}, + ) + sql = query.get_sql() + # Timespan should expand dates to datetime ranges (start of first day, end of last day) + # Should have times like 00:00:00 and 23:59:59 + self.assertIn("00:00:00", sql) + self.assertIn("23:59:59", sql) + # This function is used as a permission query condition hook def test_permission_hook_condition(user): From e57244c03760124988591749f0ef9f16748a6690 Mon Sep 17 00:00:00 2001 From: Abdeali Chharchhodawala <99460106+Abdeali099@users.noreply.github.com> Date: Tue, 9 Dec 2025 11:38:18 +0530 Subject: [PATCH 04/14] chore: proper example for bulk update query (#35100) --- frappe/database/database.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/frappe/database/database.py b/frappe/database/database.py index e5274d0174..58f48f0477 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -1089,22 +1089,22 @@ class Database: Query will be built as: ```sql - UPDATE `tabItem` + UPDATE `tabTask` SET `status` = CASE - WHEN `name` = 'Item-1' THEN 'Close' - WHEN `name` = 'Item-2' THEN 'Open' - WHEN `name` = 'Item-3' THEN 'Close' - WHEN `name` = 'Item-4' THEN 'Cancelled' + WHEN `name` = 'TASK-0001' THEN 'Closed' + WHEN `name` = 'TASK-0002' THEN 'Open' + WHEN `name` = 'TASK-0003' THEN 'Closed' + WHEN `name` = 'TASK-0004' THEN 'Cancelled' ELSE `status` - end, + END, `description` = CASE - WHEN `name` = 'Item-1' THEN 'This is the first task' - WHEN `name` = 'Item-2' THEN 'This is the second task' - WHEN `name` = 'Item-3' THEN 'This is the third task' - WHEN `name` = 'Item-4' THEN 'This is the fourth task' + WHEN `name` = 'TASK-0001' THEN 'This is the first task' + WHEN `name` = 'TASK-0002' THEN 'This is the second task' + WHEN `name` = 'TASK-0003' THEN 'This is the third task' + WHEN `name` = 'TASK-0004' THEN 'This is the fourth task' ELSE `description` - end - WHERE `name` IN ( 'Item-1', 'Item-2', 'Item-3', 'Item-4' ) + END + WHERE `name` IN ('TASK-0001', 'TASK-0002', 'TASK-0003', 'TASK-0004'); ``` """ if not doc_updates: From 269471729cbf1902e87afcfa736743b294c49fb3 Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Fri, 5 Dec 2025 17:40:35 +0530 Subject: [PATCH 05/14] feat(qb_query)!: return query object if requested Signed-off-by: Akhil Narang --- .../server_script/test_server_script.py | 2 +- frappe/model/qb_query.py | 3 +- frappe/tests/test_db_query.py | 40 ++++++++++--------- frappe/tests/test_nestedset.py | 8 ++-- frappe/tests/test_perf.py | 2 +- 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/frappe/core/doctype/server_script/test_server_script.py b/frappe/core/doctype/server_script/test_server_script.py index 7360ca94d2..c6ed3ca17d 100644 --- a/frappe/core/doctype/server_script/test_server_script.py +++ b/frappe/core/doctype/server_script/test_server_script.py @@ -157,7 +157,7 @@ class TestServerScript(IntegrationTestCase): self.assertEqual(frappe.get_doc("Server Script", "test_return_value").execute_method(), "hello") def test_permission_query(self): - sql = frappe.db.get_list("ToDo", run=False) + sql = frappe.db.get_list("ToDo", run=False).get_sql() self.assertTrue("where (1 = 1)" in sql.lower()) self.assertTrue(isinstance(frappe.db.get_list("ToDo"), list)) diff --git a/frappe/model/qb_query.py b/frappe/model/qb_query.py index 526529cfa6..d4fb1d9f06 100644 --- a/frappe/model/qb_query.py +++ b/frappe/model/qb_query.py @@ -200,8 +200,7 @@ class DatabaseQuery: query = frappe.qb.get_query(**kwargs) if not run: - # Return the SQL query string instead of executing - return str(query.get_sql()) + return query # Run the query if pluck: diff --git a/frappe/tests/test_db_query.py b/frappe/tests/test_db_query.py index d6d444eb34..e52fd6ee5b 100644 --- a/frappe/tests/test_db_query.py +++ b/frappe/tests/test_db_query.py @@ -1047,28 +1047,32 @@ class TestDBQuery(IntegrationTestCase): self.assertIn("count", result[0]) def test_coalesce_with_in_ops(self): - self.assertNotIn("IF", frappe.get_all("User", {"first_name": ("in", ["a", "b"])}, run=0)) - self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("in", ["a", None])}, run=0)) - self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("in", ["a", ""])}, run=0)) - self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("in", [])}, run=0)) - self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("not in", ["a"])}, run=0)) - self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("not in", [])}, run=0)) - self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("not in", [""])}, run=0)) + self.assertNotIn("IF", frappe.get_all("User", {"first_name": ("in", ["a", "b"])}, run=0).get_sql()) + self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("in", ["a", None])}, run=0).get_sql()) + self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("in", ["a", ""])}, run=0).get_sql()) + self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("in", [])}, run=0).get_sql()) + self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("not in", ["a"])}, run=0).get_sql()) + self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("not in", [])}, run=0).get_sql()) + self.assertIn("IFNULL", frappe.get_all("User", {"first_name": ("not in", [""])}, run=0).get_sql()) # primary key is never nullable - self.assertNotIn("IFNULL", frappe.get_all("User", {"name": ("in", ["a", None])}, run=0)) - self.assertNotIn("IFNULL", frappe.get_all("User", {"name": ("in", ["a", ""])}, run=0)) - self.assertNotIn("IFNULL", frappe.get_all("User", {"name": ("in", (""))}, run=0)) - self.assertNotIn("IFNULL", frappe.get_all("User", {"name": ("in", ())}, run=0)) + self.assertNotIn("IFNULL", frappe.get_all("User", {"name": ("in", ["a", None])}, run=0).get_sql()) + self.assertNotIn("IFNULL", frappe.get_all("User", {"name": ("in", ["a", ""])}, run=0).get_sql()) + self.assertNotIn("IFNULL", frappe.get_all("User", {"name": ("in", (""))}, run=0).get_sql()) + self.assertNotIn("IFNULL", frappe.get_all("User", {"name": ("in", ())}, run=0).get_sql()) def test_coalesce_with_datetime_ops(self): - self.assertNotIn("IFNULL", frappe.get_all("User", {"last_active": (">", "2022-01-01")}, run=0)) - self.assertNotIn("IFNULL", frappe.get_all("User", {"creation": ("<", "2022-01-01")}, run=0)) + self.assertNotIn( + "IFNULL", frappe.get_all("User", {"last_active": (">", "2022-01-01")}, run=0).get_sql() + ) + self.assertNotIn("IFNULL", frappe.get_all("User", {"creation": ("<", "2022-01-01")}, run=0).get_sql()) self.assertNotIn( "IFNULL", - frappe.get_all("User", {"last_active": ("between", ("2022-01-01", "2023-01-01"))}, run=0), + frappe.get_all( + "User", {"last_active": ("between", ("2022-01-01", "2023-01-01"))}, run=0 + ).get_sql(), ) - self.assertIn("IFNULL", frappe.get_all("User", {"last_active": ("<", "2022-01-01")}, run=0)) + self.assertIn("IFNULL", frappe.get_all("User", {"last_active": ("<", "2022-01-01")}, run=0).get_sql()) def test_ambiguous_linked_tables(self): from frappe.desk.reportview import get @@ -1145,16 +1149,16 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(count[1], frappe.db.count("Language")) def test_ifnull_none(self): - query = frappe.get_all("DocField", {"fieldname": None}, run=0) + query = frappe.get_all("DocField", {"fieldname": None}, run=0).get_sql() self.assertIn("IS NULL", query) self.assertNotIn("\\'", query) self.assertNotIn("ifnull", query) self.assertFalse(frappe.get_all("DocField", {"name": None})) self.assertFalse(frappe.get_all("DocField", {"parent": None})) - self.assertNotIn("0", frappe.get_all("DocField", {"parent": None}, run=0)) + self.assertNotIn("0", frappe.get_all("DocField", {"parent": None}, run=0).get_sql()) def test_ifnull_fallback_types(self): - query = frappe.get_all("DocField", {"fieldname": ("!=", None)}, run=0) + query = frappe.get_all("DocField", {"fieldname": ("!=", None)}, run=0).get_sql() # Fallbacks should always be of correct type self.assertIn("''", query) self.assertNotIn("0", query) diff --git a/frappe/tests/test_nestedset.py b/frappe/tests/test_nestedset.py index cb2a3c42cc..c8916c4f14 100644 --- a/frappe/tests/test_nestedset.py +++ b/frappe/tests/test_nestedset.py @@ -285,10 +285,10 @@ class TestNestedSet(IntegrationTestCase): inclusive_link = {"link_field": ("descendants of (inclusive)", record)} # db_query - self.assertNotIn(record, frappe.get_all(TEST_DOCTYPE, exclusive_filter, run=0)) - self.assertIn(record, frappe.get_all(TEST_DOCTYPE, inclusive_filter, run=0)) - self.assertNotIn(record, frappe.get_all(linked_doctype, exclusive_link, run=0)) - self.assertIn(record, frappe.get_all(linked_doctype, inclusive_link, run=0)) + self.assertNotIn(record, frappe.get_all(TEST_DOCTYPE, exclusive_filter, run=0).get_sql()) + self.assertIn(record, frappe.get_all(TEST_DOCTYPE, inclusive_filter, run=0).get_sql()) + self.assertNotIn(record, frappe.get_all(linked_doctype, exclusive_link, run=0).get_sql()) + self.assertIn(record, frappe.get_all(linked_doctype, inclusive_link, run=0).get_sql()) # QB self.assertNotIn(record, str(frappe.qb.get_query(TEST_DOCTYPE, filters=exclusive_filter))) diff --git a/frappe/tests/test_perf.py b/frappe/tests/test_perf.py index a5575344a1..bb300dfeaf 100644 --- a/frappe/tests/test_perf.py +++ b/frappe/tests/test_perf.py @@ -179,7 +179,7 @@ class TestPerformance(IntegrationTestCase): frappe.get_list("User") def test_no_ifnull_checks(self): - query = frappe.get_all("DocType", {"autoname": ("is", "set")}, run=0).lower() + query = frappe.get_all("DocType", {"autoname": ("is", "set")}, run=0).get_sql().lower() self.assertNotIn("coalesce", query) self.assertNotIn("ifnull", query) From e5890087fef77b923b5d511b5847c395e6fcee07 Mon Sep 17 00:00:00 2001 From: MochaMind Date: Tue, 9 Dec 2025 11:58:52 +0530 Subject: [PATCH 06/14] chore: update POT file (#35104) --- frappe/locale/main.pot | 616 ++++++++++++++++++++--------------------- 1 file changed, 307 insertions(+), 309 deletions(-) diff --git a/frappe/locale/main.pot b/frappe/locale/main.pot index 7132924c8c..d122e5350e 100644 --- a/frappe/locale/main.pot +++ b/frappe/locale/main.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Frappe Framework VERSION\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" -"POT-Creation-Date: 2025-11-30 09:34+0000\n" -"PO-Revision-Date: 2025-11-30 09:34+0000\n" +"POT-Creation-Date: 2025-12-07 09:35+0000\n" +"PO-Revision-Date: 2025-12-07 09:35+0000\n" "Last-Translator: developers@frappe.io\n" "Language-Team: developers@frappe.io\n" "MIME-Version: 1.0\n" @@ -64,6 +64,10 @@ msgstr "" msgid "<head> HTML" msgstr "" +#: frappe/database/query.py:1987 +msgid "'*' is only allowed in {0} SQL function(s)" +msgstr "" + #: frappe/public/js/form_builder/store.js:206 msgid "'In Global Search' is not allowed for field {0} of type {1}" msgstr "" @@ -174,12 +178,12 @@ msgstr "" msgid "1 record will be exported" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:320 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:325 msgctxt "User removed row from child table" msgid "1 row from {0}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:275 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:280 msgctxt "User added row to child table" msgid "1 row to {0}" msgstr "" @@ -1447,7 +1451,7 @@ msgstr "" msgid "Adds a custom field to a DocType" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:594 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:596 msgid "Administration" msgstr "" @@ -1474,11 +1478,11 @@ msgstr "" msgid "Administrator" msgstr "" -#: frappe/core/doctype/user/user.py:1270 +#: frappe/core/doctype/user/user.py:1273 msgid "Administrator Logged In" msgstr "" -#: frappe/core/doctype/user/user.py:1264 +#: frappe/core/doctype/user/user.py:1267 msgid "Administrator accessed {0} on {1} via IP Address {2}." msgstr "" @@ -1499,8 +1503,8 @@ msgstr "" msgid "Advanced Control" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:343 -#: frappe/public/js/frappe/form/controls/link.js:345 +#: frappe/public/js/frappe/form/controls/link.js:423 +#: frappe/public/js/frappe/form/controls/link.js:425 msgid "Advanced Search" msgstr "" @@ -1581,11 +1585,7 @@ msgstr "" msgid "Alert" msgstr "" -#: frappe/database/query.py:2250 -msgid "Alias cannot be a SQL keyword: {0}" -msgstr "" - -#: frappe/database/query.py:2175 +#: frappe/database/query.py:2034 msgid "Alias must be a string" msgstr "" @@ -1641,7 +1641,7 @@ msgstr "" #. Label of the all_day (Check) field in DocType 'Event' #: frappe/desk/doctype/calendar_view/calendar_view.json #: frappe/desk/doctype/event/event.json -#: frappe/public/js/frappe/ui/notifications/notifications.js:408 +#: frappe/public/js/frappe/ui/notifications/notifications.js:439 msgid "All Day" msgstr "" @@ -2016,7 +2016,7 @@ msgstr "" msgid "Allows skipping authorization if a user has active tokens." msgstr "" -#: frappe/core/doctype/user/user.py:1078 +#: frappe/core/doctype/user/user.py:1081 msgid "Already Registered" msgstr "" @@ -2124,7 +2124,7 @@ msgstr "" msgid "An email to verify your request has been sent to your email address. Please verify your request to complete the process." msgstr "" -#: frappe/public/js/frappe/ui/toolbar/toolbar.js:367 +#: frappe/public/js/frappe/ui/toolbar/toolbar.js:261 msgid "An error occurred while setting Session Defaults" msgstr "" @@ -3245,7 +3245,7 @@ msgstr "" #. 'System Health Report' #: frappe/core/workspace/build/build.json #: frappe/desk/doctype/system_health_report/system_health_report.json -#: frappe/public/js/frappe/ui/toolbar/toolbar.js:196 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:282 msgid "Background Jobs" msgstr "" @@ -3836,7 +3836,7 @@ msgstr "" msgid "Cache Cleared" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:241 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:246 msgid "Calculate" msgstr "" @@ -3891,7 +3891,7 @@ msgid "Camera" msgstr "" #. Label of the campaign (Data) field in DocType 'Web Page View' -#: frappe/public/js/frappe/utils/utils.js:1812 +#: frappe/public/js/frappe/utils/utils.js:1833 #: frappe/website/doctype/web_page_view/web_page_view.json #: frappe/website/report/website_analytics/website_analytics.js:39 msgid "Campaign" @@ -3994,7 +3994,7 @@ msgctxt "Freeze message while cancelling a document" msgid "Cancelling" msgstr "" -#: frappe/desk/form/linked_with.py:381 +#: frappe/desk/form/linked_with.py:386 msgid "Cancelling documents" msgstr "" @@ -4006,7 +4006,7 @@ msgstr "" msgid "Cannot Download Report due to insufficient permissions" msgstr "" -#: frappe/client.py:463 +#: frappe/client.py:456 msgid "Cannot Fetch Values" msgstr "" @@ -4014,7 +4014,7 @@ msgstr "" msgid "Cannot Remove" msgstr "" -#: frappe/model/base_document.py:1251 +#: frappe/model/base_document.py:1266 msgid "Cannot Update After Submit" msgstr "" @@ -4134,7 +4134,7 @@ msgstr "" msgid "Cannot edit filters for standard number cards" msgstr "" -#: frappe/client.py:177 +#: frappe/client.py:170 msgid "Cannot edit standard fields" msgstr "" @@ -4166,7 +4166,7 @@ msgstr "" msgid "Cannot map because following condition fails:" msgstr "" -#: frappe/core/doctype/data_import/importer.py:971 +#: frappe/core/doctype/data_import/importer.py:1001 msgid "Cannot match column {0} with any field" msgstr "" @@ -4484,7 +4484,7 @@ msgstr "" msgid "Child Tables are shown as a Grid in other DocTypes" msgstr "" -#: frappe/database/query.py:947 +#: frappe/database/query.py:991 msgid "Child query fields for '{0}' must be a list or tuple." msgstr "" @@ -4746,6 +4746,7 @@ msgstr "" #: frappe/desk/doctype/todo/todo.js:23 #: frappe/public/js/frappe/form/form_tour.js:17 #: frappe/public/js/frappe/ui/messages.js:251 +#: frappe/public/js/frappe/ui/notifications/notifications.js:56 #: frappe/website/js/bootstrap-4.js:24 msgid "Close" msgstr "" @@ -4806,7 +4807,7 @@ msgid "Code challenge method" msgstr "" #: frappe/public/js/frappe/form/form_tour.js:276 -#: frappe/public/js/frappe/ui/sidebar/sidebar.html:29 +#: frappe/public/js/frappe/ui/sidebar/sidebar.html:44 #: frappe/public/js/frappe/widgets/base_widget.js:159 msgid "Collapse" msgstr "" @@ -5441,7 +5442,7 @@ msgstr "" #. Label of the content (Data) field in DocType 'Web Page View' #: frappe/core/doctype/comment/comment.json frappe/desk/doctype/note/note.json #: frappe/desk/doctype/workspace/workspace.json -#: frappe/public/js/frappe/utils/utils.js:1828 +#: frappe/public/js/frappe/utils/utils.js:1849 #: frappe/website/doctype/help_article/help_article.json #: frappe/website/doctype/web_page/web_page.json #: frappe/website/doctype/web_page_view/web_page_view.json @@ -5510,7 +5511,7 @@ msgstr "" msgid "Controls whether new users can sign up using this Social Login Key. If unset, Website Settings is respected." msgstr "" -#: frappe/public/js/frappe/utils/utils.js:1056 +#: frappe/public/js/frappe/utils/utils.js:1077 msgid "Copied to clipboard." msgstr "" @@ -5564,11 +5565,11 @@ msgstr "" msgid "Could not find {0}" msgstr "" -#: frappe/core/doctype/data_import/importer.py:933 +#: frappe/core/doctype/data_import/importer.py:963 msgid "Could not map column {0} to field {1}" msgstr "" -#: frappe/database/query.py:845 +#: frappe/database/query.py:889 msgid "Could not parse field: {0}" msgstr "" @@ -5744,7 +5745,7 @@ msgstr "" msgid "Create a Reminder" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:579 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:581 msgid "Create a new ..." msgstr "" @@ -5752,8 +5753,8 @@ msgstr "" msgid "Create a new record" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:319 -#: frappe/public/js/frappe/form/controls/link.js:321 +#: frappe/public/js/frappe/form/controls/link.js:399 +#: frappe/public/js/frappe/form/controls/link.js:401 #: frappe/public/js/frappe/form/link_selector.js:139 #: frappe/public/js/frappe/list/list_view.js:506 #: frappe/public/js/frappe/web_form/web_form_list.js:226 @@ -6300,8 +6301,8 @@ msgstr "" #: frappe/desk/doctype/form_tour/form_tour.json #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:604 -#: frappe/public/js/frappe/utils/utils.js:955 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:606 +#: frappe/public/js/frappe/utils/utils.js:976 msgid "Dashboard" msgstr "" @@ -7133,7 +7134,7 @@ msgstr "" msgid "Desk User" msgstr "" -#: frappe/public/js/frappe/ui/sidebar/sidebar_header.js:11 +#: frappe/public/js/frappe/ui/sidebar/sidebar_header.js:21 #: frappe/www/me.html:80 msgid "Desktop" msgstr "" @@ -7595,7 +7596,7 @@ msgstr "" msgid "DocType must be Submittable for the selected Doc Event" msgstr "" -#: frappe/client.py:414 +#: frappe/client.py:407 msgid "DocType must be a string" msgstr "" @@ -7731,7 +7732,7 @@ msgstr "" msgid "Document Name" msgstr "" -#: frappe/client.py:417 +#: frappe/client.py:410 msgid "Document Name must be a string" msgstr "" @@ -7911,7 +7912,7 @@ msgstr "" msgid "Document Unlocked" msgstr "" -#: frappe/database/query.py:457 +#: frappe/database/query.py:487 msgid "Document cannot be used as a filter value" msgstr "" @@ -7959,7 +7960,7 @@ msgstr "" msgid "Document {0} has been set to state {1} by {2}" msgstr "" -#: frappe/client.py:441 +#: frappe/client.py:434 msgid "Document {0} {1} does not exist" msgstr "" @@ -8196,7 +8197,7 @@ msgstr "" msgid "Duplicate Filter Name" msgstr "" -#: frappe/model/base_document.py:749 frappe/model/rename_doc.py:111 +#: frappe/model/base_document.py:764 frappe/model/rename_doc.py:111 msgid "Duplicate Name" msgstr "" @@ -8432,7 +8433,7 @@ msgstr "" msgid "Edit Shortcut" msgstr "" -#: frappe/public/js/frappe/ui/sidebar/sidebar_header.js:19 +#: frappe/public/js/frappe/ui/sidebar/sidebar_header.js:29 msgid "Edit Sidebar" msgstr "" @@ -8807,7 +8808,7 @@ msgstr "" msgid "Embed code copied" msgstr "" -#: frappe/database/query.py:2179 +#: frappe/database/query.py:2038 msgid "Empty alias is not allowed" msgstr "" @@ -8815,7 +8816,7 @@ msgstr "" msgid "Empty column" msgstr "" -#: frappe/database/query.py:2073 +#: frappe/database/query.py:1981 msgid "Empty string arguments are not allowed" msgstr "" @@ -9140,7 +9141,7 @@ msgid "Enter Code displayed in OTP App." msgstr "" #: frappe/public/js/frappe/views/communication.js:768 -msgid "Enter Email Recipient(s)" +msgid "Enter Email Recipient(s) in the To, CC, or BCC fields" msgstr "" #. Label of the doc_type (Link) field in DocType 'Customize Form' @@ -9291,10 +9292,14 @@ msgstr "" msgid "Error in {0}.get_list: {1}" msgstr "" -#: frappe/database/query.py:353 +#: frappe/database/query.py:383 msgid "Error parsing nested filters: {0}. {1}" msgstr "" +#: frappe/desk/search.py:246 +msgid "Error validating \"Ignore User Permissions\"" +msgstr "" + #: frappe/email/doctype/email_account/email_account.py:670 msgid "Error while connecting to email account {0}" msgstr "" @@ -9303,15 +9308,15 @@ msgstr "" msgid "Error while evaluating Notification {0}. Please fix your template." msgstr "" -#: frappe/model/base_document.py:889 +#: frappe/model/base_document.py:904 msgid "Error: Data missing in table {0}" msgstr "" -#: frappe/model/base_document.py:899 +#: frappe/model/base_document.py:914 msgid "Error: Value missing for {0}: {1}" msgstr "" -#: frappe/model/base_document.py:893 +#: frappe/model/base_document.py:908 msgid "Error: {0} Row #{1}: Value missing for: {2}" msgstr "" @@ -9364,7 +9369,7 @@ msgstr "" msgid "Event Type" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:56 +#: frappe/public/js/frappe/ui/notifications/notifications.js:67 msgid "Events" msgstr "" @@ -9491,7 +9496,7 @@ msgstr "" msgid "Expand All" msgstr "" -#: frappe/database/query.py:578 +#: frappe/database/query.py:613 msgid "Expected 'and' or 'or' operator, found: {0}" msgstr "" @@ -9937,6 +9942,10 @@ msgstr "" msgid "Field \"value\" is mandatory. Please specify value to be updated" msgstr "" +#: frappe/desk/search.py:253 +msgid "Field {0} not found in {1}" +msgstr "" + #. Label of the description (Text) field in DocType 'Custom Field' #: frappe/custom/doctype/custom_field/custom_field.json msgid "Field Description" @@ -10105,7 +10114,7 @@ msgstr "" msgid "Fields must be a list or tuple when as_list is enabled" msgstr "" -#: frappe/database/query.py:896 +#: frappe/database/query.py:940 msgid "Fields must be a string, list, tuple, pypika Field, or pypika Function" msgstr "" @@ -10274,11 +10283,11 @@ msgstr "" msgid "Filter Values" msgstr "" -#: frappe/database/query.py:584 +#: frappe/database/query.py:619 msgid "Filter condition missing after operator: {0}" msgstr "" -#: frappe/database/query.py:660 +#: frappe/database/query.py:695 msgid "Filter fields have invalid backtick notation: {0}" msgstr "" @@ -10353,7 +10362,7 @@ msgstr "" msgid "Filters Section" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:526 +#: frappe/public/js/frappe/form/controls/link.js:533 msgid "Filters applied for {0}" msgstr "" @@ -10374,14 +10383,14 @@ msgstr "" msgid "Filters:" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:614 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:616 msgid "Find '{0}' in ..." msgstr "" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:392 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:394 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:161 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:164 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:397 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:399 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:163 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:166 msgid "Find {0} in {1}" msgstr "" @@ -11061,7 +11070,7 @@ msgstr "" msgid "Function {0} is not whitelisted." msgstr "" -#: frappe/database/query.py:1977 +#: frappe/database/query.py:1885 msgid "Function {0} requires arguments but none were provided" msgstr "" @@ -11130,7 +11139,7 @@ msgstr "" msgid "Generate New Report" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:460 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:465 msgid "Generate Random Password" msgstr "" @@ -11140,8 +11149,8 @@ msgstr "" msgid "Generate Separate Documents For Each Assignee" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/toolbar.js:191 -#: frappe/public/js/frappe/utils/utils.js:1873 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:277 +#: frappe/public/js/frappe/utils/utils.js:1894 msgid "Generate Tracking URL" msgstr "" @@ -11542,7 +11551,7 @@ msgstr "" msgid "Group By field is required to create a dashboard chart" msgstr "" -#: frappe/database/query.py:1143 +#: frappe/database/query.py:1129 msgid "Group By must be a string" msgstr "" @@ -11785,7 +11794,6 @@ msgstr "" #: frappe/custom/doctype/property_setter/property_setter.json #: frappe/public/js/frappe/form/templates/form_sidebar.html:41 #: frappe/public/js/frappe/form/workflow.js:23 -#: frappe/public/js/frappe/ui/toolbar/navbar.html:87 #: frappe/public/js/frappe/utils/help.js:27 msgid "Help" msgstr "" @@ -11811,7 +11819,6 @@ msgstr "" #. Label of the help_dropdown (Table) field in DocType 'Navbar Settings' #: frappe/core/doctype/navbar_settings/navbar_settings.json -#: frappe/public/js/frappe/ui/toolbar/navbar.html:84 msgid "Help Dropdown" msgstr "" @@ -11840,7 +11847,7 @@ msgstr "" msgid "Helvetica Neue" msgstr "" -#: frappe/public/js/frappe/utils/utils.js:1870 +#: frappe/public/js/frappe/utils/utils.js:1891 msgid "Here's your tracking URL" msgstr "" @@ -12134,10 +12141,10 @@ 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: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/data_import/importer.py:1204 +#: frappe/core/doctype/data_import/importer.py:1210 +#: frappe/core/doctype/data_import/importer.py:1275 +#: frappe/core/doctype/data_import/importer.py:1278 #: 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 @@ -12594,14 +12601,10 @@ msgstr "" msgid "Impersonate as {0}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:352 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:357 msgid "Impersonated by {0}" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:21 -msgid "Impersonating {0}" -msgstr "" - #: frappe/core/doctype/log_settings/log_settings.py:56 msgid "Implement `clear_old_logs` method to enable auto error clearing." msgstr "" @@ -12684,7 +12687,7 @@ msgstr "" msgid "Import from Google Sheets" msgstr "" -#: frappe/core/doctype/data_import/importer.py:612 +#: frappe/core/doctype/data_import/importer.py:641 msgid "Import template should be of type .csv, .xlsx or .xls" msgstr "" @@ -12692,6 +12695,10 @@ msgstr "" msgid "Import template should contain a Header and atleast one row." msgstr "" +#: frappe/core/doctype/data_import/importer.py:494 +msgid "Import template should contain a Header row." +msgstr "" + #: frappe/core/doctype/data_import/data_import.js:171 msgid "Import timed out, please re-try." msgstr "" @@ -13052,8 +13059,8 @@ msgstr "" msgid "Instagram" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:713 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:714 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:715 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:716 msgid "Install {0} from Marketplace" msgstr "" @@ -13087,7 +13094,7 @@ msgstr "" msgid "Insufficient Permission Level for {0}" msgstr "" -#: frappe/database/query.py:1209 frappe/database/query.py:1595 +#: frappe/database/query.py:1192 msgid "Insufficient Permission for {0}" msgstr "" @@ -13233,10 +13240,14 @@ msgstr "" msgid "Invalid Condition: {}" msgstr "" -#: frappe/email/smtp.py:135 +#: frappe/email/smtp.py:136 msgid "Invalid Credentials" msgstr "" +#: frappe/email/smtp.py:138 +msgid "Invalid Credentials for Email Account: {0}" +msgstr "" + #: frappe/utils/data.py:146 frappe/utils/data.py:309 msgid "Invalid Date" msgstr "" @@ -13245,7 +13256,7 @@ msgstr "" msgid "Invalid DocType" msgstr "" -#: frappe/database/query.py:258 +#: frappe/database/query.py:288 msgid "Invalid DocType: {0}" msgstr "" @@ -13261,8 +13272,8 @@ msgstr "" msgid "Invalid File URL" msgstr "" -#: frappe/database/query.py:662 frappe/database/query.py:689 -#: frappe/database/query.py:699 frappe/database/query.py:722 +#: frappe/database/query.py:697 frappe/database/query.py:724 +#: frappe/database/query.py:734 frappe/database/query.py:757 msgid "Invalid Filter" msgstr "" @@ -13298,7 +13309,7 @@ msgstr "" msgid "Invalid Naming Series: {}" msgstr "" -#: frappe/core/doctype/data_import/data_import.py:182 +#: frappe/core/doctype/data_import/data_import.py:183 #: frappe/core/doctype/prepared_report/prepared_report.py:200 #: frappe/core/doctype/rq_job/rq_job.py:113 #: frappe/core/doctype/rq_job/rq_job.py:122 @@ -13326,7 +13337,7 @@ msgstr "" msgid "Invalid Parameters." msgstr "" -#: frappe/core/doctype/user/user.py:1285 frappe/www/update-password.html:148 +#: frappe/core/doctype/user/user.py:1288 frappe/www/update-password.html:148 #: frappe/www/update-password.html:169 frappe/www/update-password.html:171 #: frappe/www/update-password.html:272 msgid "Invalid Password" @@ -13376,7 +13387,7 @@ msgstr "" msgid "Invalid aggregate function" msgstr "" -#: frappe/database/query.py:2184 +#: frappe/database/query.py:2044 msgid "Invalid alias format: {0}. Alias must be a simple identifier." msgstr "" @@ -13384,19 +13395,19 @@ msgstr "" msgid "Invalid app" msgstr "" -#: frappe/database/query.py:2093 frappe/database/query.py:2110 +#: frappe/database/query.py:2005 frappe/database/query.py:2020 msgid "Invalid argument format: {0}. Only quoted string literals or simple field names are allowed." msgstr "" -#: frappe/database/query.py:2062 +#: frappe/database/query.py:1970 msgid "Invalid argument type: {0}. Only strings, numbers, dicts, and None are allowed." msgstr "" -#: frappe/database/query.py:695 +#: frappe/database/query.py:730 msgid "Invalid characters in fieldname: {0}. Only letters, numbers, and underscores are allowed." msgstr "" -#: frappe/database/query.py:856 +#: frappe/database/query.py:900 msgid "Invalid characters in table name: {0}" msgstr "" @@ -13404,11 +13415,11 @@ msgstr "" msgid "Invalid column" msgstr "" -#: frappe/database/query.py:607 +#: frappe/database/query.py:642 msgid "Invalid condition type in nested filters: {0}" msgstr "" -#: frappe/database/query.py:1188 +#: frappe/database/query.py:1173 msgid "Invalid direction in Order By: {0}. Must be 'ASC' or 'DESC'." msgstr "" @@ -13424,23 +13435,19 @@ msgstr "" msgid "Invalid expression set in filter {0} ({1})" msgstr "" -#: frappe/database/query.py:1853 +#: frappe/database/query.py:1774 msgid "Invalid field format for SELECT: {0}. Field names must be simple, backticked, table-qualified, aliased, or '*'." msgstr "" -#: frappe/database/query.py:1127 +#: frappe/database/query.py:1113 msgid "Invalid field format in {0}: {1}. Use 'field', 'link_field.field', or 'child_table.field'." msgstr "" -#: frappe/database/query.py:2262 -msgid "Invalid field name in function: {0}. Only simple field names are allowed." -msgstr "" - #: frappe/utils/data.py:2288 msgid "Invalid field name {0}" msgstr "" -#: frappe/database/query.py:955 +#: frappe/database/query.py:999 msgid "Invalid field type: {0}" msgstr "" @@ -13452,11 +13459,11 @@ msgstr "" msgid "Invalid file path: {0}" msgstr "" -#: frappe/database/query.py:590 +#: frappe/database/query.py:625 msgid "Invalid filter condition: {0}. Expected a list or tuple." msgstr "" -#: frappe/database/query.py:685 +#: frappe/database/query.py:720 msgid "Invalid filter field format: {0}. Use 'fieldname' or 'link_fieldname.target_fieldname'." msgstr "" @@ -13464,7 +13471,7 @@ msgstr "" msgid "Invalid filter: {0}" msgstr "" -#: frappe/database/query.py:1982 +#: frappe/database/query.py:1890 msgid "Invalid function argument type: {0}. Only strings, numbers, lists, and None are allowed." msgstr "" @@ -13493,7 +13500,7 @@ msgstr "" msgid "Invalid naming series {}: dot (.) missing before the numeric placeholders. Kindly use a format like ABCD.#####." msgstr "" -#: frappe/database/query.py:2054 +#: frappe/database/query.py:1962 msgid "Invalid nested expression: dictionary must represent a function or operator" msgstr "" @@ -13517,18 +13524,14 @@ msgstr "" msgid "Invalid role" msgstr "" -#: frappe/database/query.py:638 +#: frappe/database/query.py:673 msgid "Invalid simple filter format: {0}" msgstr "" -#: frappe/database/query.py:567 +#: frappe/database/query.py:602 msgid "Invalid start for filter condition: {0}. Expected a list or tuple." msgstr "" -#: frappe/database/query.py:2131 -msgid "Invalid string literal format: {0}" -msgstr "" - #: frappe/core/doctype/data_import/importer.py:430 msgid "Invalid template file for import" msgstr "" @@ -13559,7 +13562,7 @@ msgstr "" msgid "Invalid {0} condition" msgstr "" -#: frappe/database/query.py:1943 +#: frappe/database/query.py:1851 msgid "Invalid {0} dictionary format" msgstr "" @@ -13989,7 +13992,7 @@ msgstr "" msgid "Job is in {0} state and can't be cancelled" msgstr "" -#: frappe/core/doctype/data_import/data_import.py:182 +#: frappe/core/doctype/data_import/data_import.py:183 #: frappe/core/doctype/prepared_report/prepared_report.py:200 #: frappe/core/doctype/rq_job/rq_job.py:113 msgid "Job is not running." @@ -14758,7 +14761,7 @@ msgstr "" msgid "Limit" msgstr "" -#: frappe/database/query.py:230 +#: frappe/database/query.py:248 msgid "Limit must be a non-negative integer" msgstr "" @@ -14967,7 +14970,7 @@ msgstr "" #: 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:932 +#: frappe/public/js/frappe/utils/utils.js:953 msgid "List" msgstr "" @@ -15038,7 +15041,7 @@ msgstr "" msgid "List setting message" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:584 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:586 msgid "Lists" msgstr "" @@ -15343,7 +15346,7 @@ msgstr "" msgid "Looks like you haven’t added any third party apps." msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:315 +#: frappe/public/js/frappe/ui/notifications/notifications.js:346 msgid "Looks like you haven’t received any notifications." msgstr "" @@ -15477,6 +15480,10 @@ msgstr "" msgid "Mandatory Information missing:" msgstr "" +#: frappe/core/doctype/data_import/importer.py:499 +msgid "Mandatory field {0} is missing in the import template for {1}. Please correct the template and try again." +msgstr "" + #: frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js:120 msgid "Mandatory field: set role for" msgstr "" @@ -15525,7 +15532,7 @@ msgstr "" msgid "Map route parameters into form variables. Example /project/<name>" msgstr "" -#: frappe/core/doctype/data_import/importer.py:924 +#: frappe/core/doctype/data_import/importer.py:954 msgid "Mapping column {0} to field {1}" msgstr "" @@ -15555,7 +15562,7 @@ msgstr "" msgid "MariaDB Variables" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:45 +#: frappe/public/js/frappe/ui/notifications/notifications.js:46 msgid "Mark all as read" msgstr "" @@ -15704,7 +15711,7 @@ msgstr "" #. 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:221 -#: frappe/public/js/frappe/utils/utils.js:1820 +#: frappe/public/js/frappe/utils/utils.js:1841 #: frappe/website/doctype/web_page_view/web_page_view.json #: frappe/website/report/website_analytics/website_analytics.js:40 msgid "Medium" @@ -16095,7 +16102,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:939 +#: frappe/public/js/frappe/utils/utils.js:960 #: frappe/website/doctype/web_form/web_form.json #: frappe/website/doctype/web_template/web_template.json #: frappe/website/doctype/website_theme/website_theme.json @@ -16576,7 +16583,7 @@ msgstr "" msgid "Negative Value" msgstr "" -#: frappe/database/query.py:559 +#: frappe/database/query.py:594 msgid "Nested filters must be provided as a list or tuple." msgstr "" @@ -16790,10 +16797,10 @@ msgstr "" #: frappe/public/js/frappe/form/toolbar.js:232 #: frappe/public/js/frappe/form/toolbar.js:594 #: frappe/public/js/frappe/model/model.js:612 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:189 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:190 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:248 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:249 +#: 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/treeview.js:366 #: frappe/public/js/frappe/widgets/widget_dialog.js:72 #: frappe/website/doctype/web_form/web_form.py:438 @@ -16950,7 +16957,7 @@ msgstr "" #: 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:504 +#: frappe/public/js/frappe/form/controls/link.js:511 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:223 #: frappe/public/js/frappe/views/reports/query_report.js:1690 #: frappe/website/doctype/help_article/templates/help_article.html:26 @@ -17053,7 +17060,7 @@ msgstr "" msgid "No Name Specified for {0}" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:315 +#: frappe/public/js/frappe/ui/notifications/notifications.js:346 msgid "No New notifications" msgstr "" @@ -17113,7 +17120,7 @@ msgstr "" msgid "No Tags" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:442 +#: frappe/public/js/frappe/ui/notifications/notifications.js:473 msgid "No Upcoming Events" msgstr "" @@ -17225,10 +17232,6 @@ msgstr "" msgid "No new Google Contacts synced." msgstr "" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:46 -msgid "No new notifications" -msgstr "" - #: frappe/printing/page/print_format_builder/print_format_builder.js:415 msgid "No of Columns" msgstr "" @@ -17248,7 +17251,7 @@ msgstr "" msgid "No of Sent SMS" msgstr "" -#: frappe/__init__.py:623 frappe/client.py:120 frappe/client.py:162 +#: frappe/__init__.py:623 frappe/client.py:113 frappe/client.py:155 msgid "No permission for {0}" msgstr "" @@ -17365,7 +17368,7 @@ msgstr "" msgid "Normalized Query" msgstr "" -#: frappe/core/doctype/user/user.py:1073 +#: frappe/core/doctype/user/user.py:1076 #: frappe/templates/includes/login/login.js:257 frappe/utils/oauth.py:298 msgid "Not Allowed" msgstr "" @@ -17421,7 +17424,7 @@ msgstr "" msgid "Not Permitted" msgstr "" -#: frappe/desk/query_report.py:596 +#: frappe/desk/query_report.py:603 msgid "Not Permitted to read {0}" msgstr "" @@ -17581,7 +17584,7 @@ msgstr "" msgid "Notes:" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:492 +#: frappe/public/js/frappe/ui/notifications/notifications.js:523 msgid "Nothing New" msgstr "" @@ -17624,7 +17627,7 @@ msgstr "" #. Name of a DocType #: frappe/desk/doctype/notification_settings/notification_settings.json -#: frappe/public/js/frappe/ui/notifications/notifications.js:37 +#: frappe/public/js/frappe/ui/notifications/notifications.js:38 msgid "Notification Settings" msgstr "" @@ -17656,12 +17659,12 @@ msgstr "" #. Label of the notifications (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json -#: frappe/public/js/frappe/ui/notifications/notifications.js:50 -#: frappe/public/js/frappe/ui/notifications/notifications.js:187 +#: frappe/public/js/frappe/ui/notifications/notifications.js:61 +#: frappe/public/js/frappe/ui/notifications/notifications.js:218 msgid "Notifications" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:299 +#: frappe/public/js/frappe/ui/notifications/notifications.js:330 msgid "Notifications Disabled" msgstr "" @@ -17701,7 +17704,7 @@ msgstr "" msgid "Notify users with a popup when they log in" msgstr "" -#: frappe/public/js/frappe/form/controls/datetime.js:41 +#: frappe/public/js/frappe/form/controls/datetime.js:28 #: frappe/public/js/frappe/form/controls/time.js:37 msgid "Now" msgstr "" @@ -17937,7 +17940,7 @@ msgstr "" msgid "Offset Y" msgstr "" -#: frappe/database/query.py:235 +#: frappe/database/query.py:253 msgid "Offset must be a non-negative integer" msgstr "" @@ -18072,7 +18075,7 @@ msgstr "" msgid "One of" msgstr "" -#: frappe/client.py:224 +#: frappe/client.py:217 msgid "Only 200 inserts allowed in one request" msgstr "" @@ -18180,7 +18183,8 @@ msgctxt "Access" msgid "Open" msgstr "" -#: frappe/desk/page/desktop/desktop.js:221 +#: frappe/desk/page/desktop/desktop.js:217 +#: frappe/desk/page/desktop/desktop.js:226 #: frappe/public/js/frappe/ui/keyboard.js:207 #: frappe/public/js/frappe/ui/keyboard.js:217 msgid "Open Awesomebar" @@ -18242,6 +18246,10 @@ msgstr "" msgid "Open in a new tab" msgstr "" +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:241 +msgid "Open in new tab" +msgstr "" + #: frappe/public/js/frappe/list/list_view.js:1440 msgctxt "Description of a list view shortcut" msgid "Open list item" @@ -18257,16 +18265,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:312 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:313 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:324 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:325 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:335 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:336 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:345 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:346 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:366 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:367 +#: 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 msgid "Open {0}" msgstr "" @@ -18298,7 +18306,7 @@ msgstr "" msgid "Operator must be one of {0}" msgstr "" -#: frappe/database/query.py:2010 +#: frappe/database/query.py:1918 msgid "Operator {0} requires exactly 2 arguments (left and right operands)" msgstr "" @@ -18383,7 +18391,7 @@ msgstr "" msgid "Options is required for field {0} of type {1}" msgstr "" -#: frappe/model/base_document.py:957 +#: frappe/model/base_document.py:972 msgid "Options not set for link field {0}" msgstr "" @@ -18399,7 +18407,7 @@ msgstr "" msgid "Order" msgstr "" -#: frappe/database/query.py:1160 +#: frappe/database/query.py:1145 msgid "Order By must be a string" msgstr "" @@ -18808,7 +18816,7 @@ msgstr "" msgid "Parentfield not specified in {0}: {1}" msgstr "" -#: frappe/client.py:478 +#: frappe/client.py:471 msgid "Parenttype, Parent and Parentfield are required to insert a child record" msgstr "" @@ -18864,7 +18872,7 @@ msgstr "" msgid "Password" msgstr "" -#: frappe/core/doctype/user/user.py:1138 +#: frappe/core/doctype/user/user.py:1141 msgid "Password Email Sent" msgstr "" @@ -18906,7 +18914,7 @@ msgstr "" msgid "Password not found for {0} {1} {2}" msgstr "" -#: frappe/core/doctype/user/user.py:1137 +#: frappe/core/doctype/user/user.py:1140 msgid "Password reset instructions have been sent to {}'s email" msgstr "" @@ -19081,7 +19089,7 @@ msgstr "" msgid "Permanently delete {0}?" msgstr "" -#: frappe/core/doctype/user_type/user_type.py:84 frappe/database/query.py:814 +#: frappe/core/doctype/user_type/user_type.py:84 frappe/database/query.py:843 msgid "Permission Error" msgstr "" @@ -19323,7 +19331,7 @@ msgstr "" msgid "Please add a valid comment." msgstr "" -#: frappe/core/doctype/user/user.py:1120 +#: frappe/core/doctype/user/user.py:1123 msgid "Please ask your administrator to verify your sign-up" msgstr "" @@ -19347,11 +19355,11 @@ msgstr "" msgid "Please check the filter values set for Dashboard Chart: {}" msgstr "" -#: frappe/model/base_document.py:1037 +#: frappe/model/base_document.py:1052 msgid "Please check the value of \"Fetch From\" set for field {0}" msgstr "" -#: frappe/core/doctype/user/user.py:1118 +#: frappe/core/doctype/user/user.py:1121 msgid "Please check your email for verification" msgstr "" @@ -19416,7 +19424,7 @@ msgstr "" #: frappe/printing/page/print/print.js:696 #: frappe/printing/page/print/print.js:732 #: frappe/public/js/frappe/list/bulk_operations.js:161 -#: frappe/public/js/frappe/utils/utils.js:1517 +#: frappe/public/js/frappe/utils/utils.js:1538 msgid "Please enable pop-ups" msgstr "" @@ -19783,10 +19791,6 @@ msgstr "" msgid "Posting Timestamp" msgstr "" -#: frappe/database/query.py:2160 -msgid "Potentially dangerous content in string literal: {0}" -msgstr "" - #. Label of the precision (Select) field in DocType 'DocField' #. Label of the precision (Select) field in DocType 'Custom Field' #. Label of the precision (Select) field in DocType 'Customize Form Field' @@ -20743,7 +20747,7 @@ msgstr "" #. 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:461 frappe/core/doctype/communication/communication.json +#: frappe/client.py:454 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 @@ -20784,7 +20788,6 @@ msgstr "" msgid "Read Only Depends On (JS)" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:16 #: frappe/templates/includes/navbar/navbar_items.html:97 msgid "Read Only Mode" msgstr "" @@ -20866,7 +20869,7 @@ msgstr "" msgid "Recent years are easy to guess." msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:574 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:576 msgid "Recents" msgstr "" @@ -21252,7 +21255,7 @@ msgstr "" msgid "Refreshing..." msgstr "" -#: frappe/core/doctype/user/user.py:1080 +#: frappe/core/doctype/user/user.py:1083 msgid "Registered but disabled" msgstr "" @@ -21569,7 +21572,7 @@ msgstr "" #: 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:928 +#: frappe/public/js/frappe/utils/utils.js:949 msgid "Report" msgstr "" @@ -21702,7 +21705,7 @@ msgstr "" msgid "Report timed out." msgstr "" -#: frappe/desk/query_report.py:651 +#: frappe/desk/query_report.py:658 msgid "Report updated successfully" msgstr "" @@ -21714,8 +21717,8 @@ msgstr "" msgid "Report with more than 10 columns looks better in Landscape mode." msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:284 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:285 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:286 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:287 msgid "Report {0}" msgstr "" @@ -21738,7 +21741,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:589 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:591 msgid "Reports" msgstr "" @@ -21980,7 +21983,7 @@ msgstr "" msgid "Response Type" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:414 +#: frappe/public/js/frappe/ui/notifications/notifications.js:445 msgid "Rest of the day" msgstr "" @@ -22038,8 +22041,8 @@ msgctxt "Title of message showing restrictions in list view" msgid "Restrictions" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:448 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:463 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:453 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:468 msgid "Result" msgstr "" @@ -22337,7 +22340,7 @@ msgstr "" msgid "Route: Example \"/app\"" msgstr "" -#: frappe/model/base_document.py:938 frappe/model/document.py:802 +#: frappe/model/base_document.py:953 frappe/model/document.py:802 msgid "Row" msgstr "" @@ -22350,7 +22353,7 @@ msgstr "" msgid "Row # {0}: Non administrator user can not set the role {1} to the custom doctype" msgstr "" -#: frappe/model/base_document.py:1068 +#: frappe/model/base_document.py:1083 msgid "Row #{0}:" msgstr "" @@ -22540,8 +22543,8 @@ msgstr "" msgid "SQL Queries" msgstr "" -#: frappe/database/query.py:1843 -msgid "SQL functions are not allowed in SELECT fields: {0}. Use the query builder API with functions instead." +#: frappe/database/query.py:1764 +msgid "SQL functions are not allowed as strings in SELECT: {0}. Use dict syntax like {{'COUNT': '*'}} instead." msgstr "" #. Label of the ssl_tls_mode (Select) field in DocType 'LDAP Settings' @@ -22610,7 +22613,7 @@ msgid "Saturday" msgstr "" #. Option for the 'Send Alert On' (Select) field in DocType 'Notification' -#: cypress/integration/web_form.js:46 +#: cypress/integration/web_form.js:52 #: frappe/core/doctype/data_import/data_import.js:119 #: frappe/email/doctype/notification/notification.json #: frappe/printing/page/print/print.js:922 @@ -22620,7 +22623,7 @@ msgstr "" #: frappe/public/js/frappe/list/list_settings.js:37 #: frappe/public/js/frappe/list/list_settings.js:245 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:25 -#: frappe/public/js/frappe/ui/toolbar/toolbar.js:377 +#: frappe/public/js/frappe/ui/toolbar/toolbar.js:271 #: 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 @@ -22692,7 +22695,7 @@ msgstr "" msgid "Saving Customization..." msgstr "" -#: frappe/public/js/frappe/ui/sidebar/sidebar.js:756 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:815 msgid "Saving Sidebar" msgstr "" @@ -22783,7 +22786,7 @@ msgstr "" msgid "Scheduler Event" msgstr "" -#: frappe/core/doctype/data_import/data_import.py:124 +#: frappe/core/doctype/data_import/data_import.py:125 msgid "Scheduler Inactive" msgstr "" @@ -22796,7 +22799,7 @@ msgstr "" msgid "Scheduler can not be re-enabled when maintenance mode is active." msgstr "" -#: frappe/core/doctype/data_import/data_import.py:124 +#: frappe/core/doctype/data_import/data_import.py:125 msgid "Scheduler is inactive. Cannot import data." msgstr "" @@ -22888,6 +22891,7 @@ msgstr "" #. Label of the search_section (Section Break) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json +#: frappe/desk/page/desktop/desktop.html:19 #: frappe/public/js/frappe/form/link_selector.js:46 #: frappe/public/js/frappe/list/list_sidebar.html:69 #: frappe/public/js/frappe/ui/address_autocomplete/autocomplete_dialog.js:20 @@ -22910,7 +22914,7 @@ msgstr "" msgid "Search Fields" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:246 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:251 msgid "Search Help" msgstr "" @@ -22945,8 +22949,8 @@ msgstr "" msgid "Search for anything" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:360 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:367 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:365 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:372 msgid "Search for {0}" msgstr "" @@ -22954,10 +22958,6 @@ msgstr "" msgid "Search in a document type" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:30 -msgid "Search or type a command ({0})" -msgstr "" - #: frappe/public/js/form_builder/components/SearchBox.vue:8 msgid "Search properties..." msgstr "" @@ -23026,7 +23026,7 @@ msgstr "" msgid "Security Settings" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:309 +#: frappe/public/js/frappe/ui/notifications/notifications.js:340 msgid "See all Activity" msgstr "" @@ -23721,11 +23721,11 @@ msgstr "" #. 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:376 +#: frappe/hooks.py frappe/public/js/frappe/ui/toolbar/toolbar.js:270 msgid "Session Defaults" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/toolbar.js:361 +#: frappe/public/js/frappe/ui/toolbar/toolbar.js:255 msgid "Session Defaults Saved" msgstr "" @@ -23968,7 +23968,7 @@ 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:334 +#: frappe/public/js/frappe/ui/toolbar/toolbar.js:228 #: frappe/public/js/frappe/views/workspace/workspace.js:385 #: frappe/website/doctype/web_form/web_form.json #: frappe/website/doctype/web_page/web_page.json frappe/www/me.html:20 @@ -23992,7 +23992,7 @@ 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:609 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:611 msgid "Setup" msgstr "" @@ -24486,7 +24486,7 @@ msgstr "" msgid "Sign Up and Confirmation" msgstr "" -#: frappe/core/doctype/user/user.py:1073 +#: frappe/core/doctype/user/user.py:1076 msgid "Sign Up is disabled" msgstr "" @@ -24597,15 +24597,15 @@ msgstr "" msgid "Skipped" msgstr "" -#: frappe/core/doctype/data_import/importer.py:952 +#: frappe/core/doctype/data_import/importer.py:982 msgid "Skipping Duplicate Column {0}" msgstr "" -#: frappe/core/doctype/data_import/importer.py:977 +#: frappe/core/doctype/data_import/importer.py:1007 msgid "Skipping Untitled Column" msgstr "" -#: frappe/core/doctype/data_import/importer.py:963 +#: frappe/core/doctype/data_import/importer.py:993 msgid "Skipping column {0}" msgstr "" @@ -24824,7 +24824,7 @@ msgstr "" #. 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:1803 +#: frappe/public/js/frappe/utils/utils.js:1824 #: 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 @@ -25548,7 +25548,7 @@ msgstr "" msgid "Successfully reset onboarding status for all users." msgstr "" -#: frappe/core/doctype/user/user.py:1455 +#: frappe/core/doctype/user/user.py:1458 msgid "Successfully signed out" msgstr "" @@ -26007,6 +26007,10 @@ msgstr "" msgid "Table MultiSelect" msgstr "" +#: frappe/desk/search.py:269 +msgid "Table MultiSelect requires a table with at least one Link field, but none was found in {0}" +msgstr "" + #: frappe/custom/doctype/customize_form/customize_form.js:229 msgid "Table Trimmed" msgstr "" @@ -26106,7 +26110,9 @@ msgid "Template" msgstr "" #: frappe/core/doctype/data_import/importer.py:483 -#: frappe/core/doctype/data_import/importer.py:610 +#: frappe/core/doctype/data_import/importer.py:494 +#: frappe/core/doctype/data_import/importer.py:502 +#: frappe/core/doctype/data_import/importer.py:639 msgid "Template Error" msgstr "" @@ -26130,7 +26136,7 @@ msgstr "" msgid "Templates" msgstr "" -#: frappe/core/doctype/user/user.py:1086 +#: frappe/core/doctype/user/user.py:1089 msgid "Temporarily Disabled" msgstr "" @@ -26288,7 +26294,7 @@ msgstr "" msgid "The changes have been reverted." msgstr "" -#: frappe/core/doctype/data_import/importer.py:1009 +#: frappe/core/doctype/data_import/importer.py:1039 msgid "The column {0} has {1} different date formats. Automatically setting {2} as the default format as it is the most common. Please change other values in this column to this format." msgstr "" @@ -26326,6 +26332,14 @@ msgstr "" msgid "The document type selected is a child table, so the parent document type is required." msgstr "" +#: frappe/desk/search.py:282 +msgid "The field {0} in {1} does not allow ignoring user permissions" +msgstr "" + +#: frappe/desk/search.py:292 +msgid "The field {0} in {1} links to {2} and not {3}" +msgstr "" + #: frappe/core/doctype/user_type/user_type.py:110 msgid "The field {0} is mandatory" msgstr "" @@ -26342,11 +26356,11 @@ msgstr "" msgid "The following Header Script will add the current date to an element in 'Header HTML' with class 'header-content'" msgstr "" -#: frappe/core/doctype/data_import/importer.py:1089 +#: frappe/core/doctype/data_import/importer.py:1119 msgid "The following values are invalid: {0}. Values must be one of {1}" msgstr "" -#: frappe/core/doctype/data_import/importer.py:1046 +#: frappe/core/doctype/data_import/importer.py:1076 msgid "The following values do not exist for {0}: {1}" msgstr "" @@ -26405,11 +26419,11 @@ msgstr "" msgid "The report you requested has been generated.

Click here to download:
{0}

This link will expire in {1} hours." msgstr "" -#: frappe/core/doctype/user/user.py:1044 +#: frappe/core/doctype/user/user.py:1047 msgid "The reset password link has been expired" msgstr "" -#: frappe/core/doctype/user/user.py:1046 +#: frappe/core/doctype/user/user.py:1049 msgid "The reset password link has either been used before or is invalid" msgstr "" @@ -26478,7 +26492,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:442 +#: frappe/public/js/frappe/ui/notifications/notifications.js:473 msgid "There are no upcoming events for you." msgstr "" @@ -26511,7 +26525,7 @@ msgstr "" msgid "There is no task called \"{}\"" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:492 +#: frappe/public/js/frappe/ui/notifications/notifications.js:523 msgid "There is nothing new to show you right now." msgstr "" @@ -26857,7 +26871,7 @@ msgstr "" msgid "This will terminate the job immediately and might be dangerous, are you sure?" msgstr "" -#: frappe/core/doctype/user/user.py:1299 +#: frappe/core/doctype/user/user.py:1302 msgid "Throttled" msgstr "" @@ -27336,7 +27350,7 @@ msgstr "" msgid "Too many queued background jobs ({0}). Please retry after some time." msgstr "" -#: frappe/core/doctype/user/user.py:1087 +#: frappe/core/doctype/user/user.py:1090 msgid "Too many users signed up recently, so the registration is disabled. Please try back in an hour" msgstr "" @@ -27392,7 +27406,7 @@ msgstr "" msgid "Topic" msgstr "" -#: frappe/desk/query_report.py:587 +#: frappe/desk/query_report.py:594 #: frappe/public/js/frappe/views/reports/print_grid.html:45 #: frappe/public/js/frappe/views/reports/query_report.js:1349 #: frappe/public/js/frappe/views/reports/report_view.js:1553 @@ -27511,7 +27525,7 @@ msgstr "" msgid "Track milestones for any document" msgstr "" -#: frappe/public/js/frappe/utils/utils.js:1867 +#: frappe/public/js/frappe/utils/utils.js:1888 msgid "Tracking URL generated and copied to clipboard" msgstr "" @@ -27936,10 +27950,6 @@ msgstr "" msgid "Undo last action" msgstr "" -#: frappe/database/query.py:2137 -msgid "Unescaped quotes in string literal: {0}" -msgstr "" - #: frappe/public/js/frappe/form/templates/form_sidebar.html:109 #: frappe/public/js/frappe/form/toolbar.js:912 msgid "Unfollow" @@ -28051,11 +28061,11 @@ msgstr "" msgid "Unsubscribed" msgstr "" -#: frappe/database/query.py:940 +#: frappe/database/query.py:984 msgid "Unsupported function or operator: {0}" msgstr "" -#: frappe/database/query.py:1946 +#: frappe/database/query.py:1854 msgid "Unsupported {0}: {1}" msgstr "" @@ -28550,7 +28560,7 @@ msgstr "" msgid "User Invitation" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:115 +#: frappe/public/js/frappe/ui/toolbar/navbar.html:31 msgid "User Menu" msgstr "" @@ -28714,7 +28724,7 @@ msgstr "" msgid "User {0} has requested for data deletion" msgstr "" -#: frappe/core/doctype/user/user.py:1426 +#: frappe/core/doctype/user/user.py:1429 msgid "User {0} impersonated as {1}" msgstr "" @@ -28883,7 +28893,7 @@ msgstr "" msgid "Value To Be Set" msgstr "" -#: frappe/model/base_document.py:1144 frappe/model/document.py:858 +#: frappe/model/base_document.py:1159 frappe/model/document.py:858 msgid "Value cannot be changed for {0}" msgstr "" @@ -28913,7 +28923,7 @@ msgstr "" msgid "Value from this field will be set as the due date in the ToDo" msgstr "" -#: frappe/core/doctype/data_import/importer.py:714 +#: frappe/core/doctype/data_import/importer.py:744 msgid "Value must be one of {0}" msgstr "" @@ -28928,20 +28938,20 @@ msgstr "" msgid "Value to Validate" msgstr "" -#: frappe/model/base_document.py:1214 +#: frappe/model/base_document.py:1229 msgid "Value too big" msgstr "" -#: frappe/core/doctype/data_import/importer.py:727 +#: frappe/core/doctype/data_import/importer.py:757 msgid "Value {0} missing for {1}" msgstr "" -#: frappe/core/doctype/data_import/importer.py:773 frappe/utils/data.py:868 +#: frappe/core/doctype/data_import/importer.py:803 frappe/utils/data.py:868 msgid "Value {0} must be in the valid duration format: d h m s" msgstr "" -#: frappe/core/doctype/data_import/importer.py:745 -#: frappe/core/doctype/data_import/importer.py:760 +#: frappe/core/doctype/data_import/importer.py:775 +#: frappe/core/doctype/data_import/importer.py:790 msgid "Value {0} must in {1} format" msgstr "" @@ -29028,7 +29038,7 @@ msgstr "" msgid "View File" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:220 +#: frappe/public/js/frappe/ui/notifications/notifications.js:251 msgid "View Full Log" msgstr "" @@ -29259,7 +29269,7 @@ msgstr "" msgid "Web Page Block" msgstr "" -#: frappe/public/js/frappe/utils/utils.js:1795 +#: frappe/public/js/frappe/utils/utils.js:1816 msgid "Web Page URL" msgstr "" @@ -29356,7 +29366,7 @@ msgstr "" #. 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:28 +#: frappe/public/js/frappe/ui/sidebar/sidebar_header.js:38 #: frappe/public/js/frappe/ui/toolbar/about.js:11 #: frappe/website/workspace/website/website.json msgid "Website" @@ -29571,7 +29581,7 @@ msgstr "" msgid "Welcome to {0}" msgstr "" -#: frappe/public/js/frappe/ui/notifications/notifications.js:62 +#: frappe/public/js/frappe/ui/notifications/notifications.js:73 msgid "What's New" msgstr "" @@ -29718,7 +29728,7 @@ msgid "Workflow Builder ID" msgstr "" #: frappe/workflow/doctype/workflow/workflow.js:11 -msgid "Workflow Builder allows you to create workflows visually. You can drag and drop states and link them to create transitions. Also you can update thieir properties from the sidebar." +msgid "Workflow Builder allows you to create workflows visually. You can drag and drop states and link them to create transitions. Also you can update their properties from the sidebar." msgstr "" #. Label of the workflow_data (JSON) field in DocType 'Workflow' @@ -29809,8 +29819,8 @@ msgstr "" #: 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:599 -#: frappe/public/js/frappe/utils/utils.js:947 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:601 +#: frappe/public/js/frappe/utils/utils.js:968 #: frappe/public/js/frappe/views/workspace/workspace.js:10 msgid "Workspace" msgstr "" @@ -29920,7 +29930,7 @@ msgstr "" msgid "Write" msgstr "" -#: frappe/model/base_document.py:1040 +#: frappe/model/base_document.py:1055 msgid "Wrong Fetch From value" msgstr "" @@ -30013,7 +30023,7 @@ 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:504 +#: frappe/public/js/frappe/form/controls/link.js:511 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:223 #: frappe/public/js/frappe/views/reports/query_report.js:1690 #: frappe/website/doctype/help_article/templates/help_article.html:25 @@ -30043,11 +30053,11 @@ msgstr "" msgid "You Liked" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:266 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:271 msgid "You added 1 row to {0}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:244 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:249 msgid "You added {0} rows to {1}" msgstr "" @@ -30059,10 +30069,6 @@ msgstr "" msgid "You are connected to internet." msgstr "" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:20 -msgid "You are impersonating as another user." -msgstr "" - #: frappe/integrations/frappe_providers/frappecloud_billing.py:28 msgid "You are not allowed to access this resource" msgstr "" @@ -30267,11 +30273,11 @@ msgstr "" msgid "You changed the value of {0} {1}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:191 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:196 msgid "You changed the values for {0}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:180 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:185 msgid "You changed the values for {0} {1}" msgstr "" @@ -30285,12 +30291,12 @@ msgstr "" msgid "You created this" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:340 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:345 msgctxt "Form timeline" msgid "You created this document {0}" msgstr "" -#: frappe/client.py:428 +#: frappe/client.py:421 msgid "You do not have Read or Select Permissions for {}" msgstr "" @@ -30306,11 +30312,11 @@ msgstr "" msgid "You do not have import permission for {0}" msgstr "" -#: frappe/database/query.py:810 +#: frappe/database/query.py:839 msgid "You do not have permission to access field: {0}" msgstr "" -#: frappe/desk/query_report.py:934 +#: frappe/desk/query_report.py:941 msgid "You do not have permission to access {0}: {1}." msgstr "" @@ -30362,10 +30368,6 @@ msgstr "" msgid "You have unsaved changes in this form. Please save before you continue." msgstr "" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:50 -msgid "You have unseen notifications" -msgstr "" - #: frappe/core/doctype/log_settings/log_settings.py:125 msgid "You have unseen {0}" msgstr "" @@ -30464,11 +30466,11 @@ msgstr "" msgid "You need write permission on {0} {1} to rename" msgstr "" -#: frappe/client.py:460 +#: frappe/client.py:453 msgid "You need {0} permission to fetch values from {1} {2}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:311 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:316 msgid "You removed 1 row from {0}" msgstr "" @@ -30477,7 +30479,7 @@ msgctxt "Form timeline" msgid "You removed attachment {0}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:289 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:294 msgid "You removed {0} rows from {1}" msgstr "" @@ -30630,10 +30632,6 @@ msgstr "" msgid "Your session has expired, please login again to continue." msgstr "" -#: frappe/public/js/frappe/ui/toolbar/navbar.html:15 -msgid "Your site is undergoing maintenance or being updated." -msgstr "" - #: frappe/templates/emails/verification_code.html:1 msgid "Your verification code is {0}" msgstr "" @@ -30648,7 +30646,7 @@ msgstr "" msgid "Zero means send records updated at anytime" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:358 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:363 msgid "[Action taken by {0}]" msgstr "" @@ -30694,7 +30692,7 @@ msgstr "" msgid "cProfile Output" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:321 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:323 msgid "calendar" msgstr "" @@ -30734,7 +30732,7 @@ msgid "cyan" msgstr "" #: frappe/public/js/frappe/form/controls/duration.js:219 -#: frappe/public/js/frappe/utils/utils.js:1142 +#: frappe/public/js/frappe/utils/utils.js:1163 msgctxt "Days (Field: Duration)" msgid "d" msgstr "" @@ -30802,7 +30800,7 @@ msgstr "" msgid "e.g. \"Support\", \"Sales\", \"Jerry Yang\"" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:243 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:248 msgid "e.g. (55 + 434) / 4 or =Math.sin(Math.PI/2)..." msgstr "" @@ -30844,12 +30842,12 @@ msgstr "" msgid "email" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:342 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:344 msgid "email inbox" msgstr "" #: frappe/permissions.py:431 frappe/permissions.py:442 -#: frappe/public/js/frappe/form/controls/link.js:516 +#: frappe/public/js/frappe/form/controls/link.js:523 msgid "empty" msgstr "" @@ -30905,12 +30903,12 @@ msgid "gzip not found in PATH! This is required to take a backup." msgstr "" #: frappe/public/js/frappe/form/controls/duration.js:220 -#: frappe/public/js/frappe/utils/utils.js:1146 +#: frappe/public/js/frappe/utils/utils.js:1167 msgctxt "Hours (Field: Duration)" msgid "h" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:332 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:334 msgid "hub" msgstr "" @@ -30964,7 +30962,7 @@ msgid "long" msgstr "" #: frappe/public/js/frappe/form/controls/duration.js:221 -#: frappe/public/js/frappe/utils/utils.js:1150 +#: frappe/public/js/frappe/utils/utils.js:1171 msgctxt "Minutes (Field: Duration)" msgid "m" msgstr "" @@ -30996,7 +30994,7 @@ msgstr "" msgid "module name..." msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:180 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:182 msgid "new" msgstr "" @@ -31135,7 +31133,7 @@ msgid "restored {0} as {1}" msgstr "" #: frappe/public/js/frappe/form/controls/duration.js:222 -#: frappe/public/js/frappe/utils/utils.js:1154 +#: frappe/public/js/frappe/utils/utils.js:1175 msgctxt "Seconds (Field: Duration)" msgid "s" msgstr "" @@ -31361,11 +31359,11 @@ msgstr "" msgid "{0}" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:215 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:217 msgid "{0} ${skip_list ? \"\" : type}" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:227 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:229 msgid "{0} ${type}" msgstr "" @@ -31382,8 +31380,8 @@ msgstr "" msgid "{0} ({1}) - {2}%" msgstr "" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:439 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:443 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:444 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:448 msgid "{0} = {1}" msgstr "" @@ -31396,8 +31394,8 @@ msgid "{0} Chart" msgstr "" #: frappe/core/page/dashboard_view/dashboard_view.js:67 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:389 -#: frappe/public/js/frappe/ui/toolbar/search_utils.js:390 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:391 +#: frappe/public/js/frappe/ui/toolbar/search_utils.js:392 #: frappe/public/js/frappe/views/dashboard/dashboard_view.js:12 msgid "{0} Dashboard" msgstr "" @@ -31441,7 +31439,7 @@ msgstr "" msgid "{0} Name" msgstr "" -#: frappe/model/base_document.py:1244 +#: frappe/model/base_document.py:1259 msgid "{0} Not allowed to change {1} after submission from {2} to {3}" msgstr "" @@ -31470,11 +31468,11 @@ msgstr "" msgid "{0} added" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:268 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:273 msgid "{0} added 1 row to {1}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:246 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:251 msgid "{0} added {1} rows to {2}" msgstr "" @@ -31544,11 +31542,11 @@ msgstr "" msgid "{0} changed the value of {1} {2}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:194 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:199 msgid "{0} changed the values for {1}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:185 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:190 msgid "{0} changed the values for {1} {2}" msgstr "" @@ -31570,7 +31568,7 @@ msgstr "" msgid "{0} created this" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:343 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:348 msgctxt "Form timeline" msgid "{0} created this document {1}" msgstr "" @@ -31592,7 +31590,7 @@ msgstr "" msgid "{0} field cannot be set as unique in {1}, as there are non-unique existing values" msgstr "" -#: frappe/core/doctype/data_import/importer.py:1071 +#: frappe/core/doctype/data_import/importer.py:1101 msgid "{0} format could not be determined from the values in this column. Defaulting to {1}." msgstr "" @@ -31600,7 +31598,7 @@ msgstr "" msgid "{0} from {1} to {2}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:165 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:170 msgid "{0} from {1} to {2} in row #{3}" msgstr "" @@ -31612,7 +31610,7 @@ msgstr "" msgid "{0} has already assigned default value for {1}." msgstr "" -#: frappe/database/query.py:1101 +#: frappe/database/query.py:1087 msgid "{0} has invalid backtick notation: {1}" msgstr "" @@ -31686,7 +31684,7 @@ msgstr "" msgid "{0} is mandatory" msgstr "" -#: frappe/database/query.py:720 +#: frappe/database/query.py:755 msgid "{0} is not a child table of {1}" msgstr "" @@ -31795,7 +31793,7 @@ msgstr "" msgid "{0} items selected" msgstr "" -#: frappe/core/doctype/user/user.py:1435 +#: frappe/core/doctype/user/user.py:1438 msgid "{0} just impersonated as you. They gave this reason: {1}" msgstr "" @@ -31848,11 +31846,11 @@ msgstr "" msgid "{0} must be one of {1}" msgstr "" -#: frappe/model/base_document.py:962 +#: frappe/model/base_document.py:977 msgid "{0} must be set first" msgstr "" -#: frappe/model/base_document.py:815 +#: frappe/model/base_document.py:830 msgid "{0} must be unique" msgstr "" @@ -31914,7 +31912,7 @@ msgstr "" msgid "{0} records will be exported" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:313 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:318 msgid "{0} removed 1 row from {1}" msgstr "" @@ -31927,7 +31925,7 @@ msgstr "" msgid "{0} removed their assignment." msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:291 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:296 msgid "{0} removed {1} rows from {2}" msgstr "" @@ -31939,17 +31937,17 @@ msgstr "" msgid "{0} row #{1}:" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:299 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:304 msgctxt "User removed rows from child table" msgid "{0} rows from {1}" msgstr "" -#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:254 +#: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:259 msgctxt "User added rows to child table" msgid "{0} rows to {1}" msgstr "" -#: frappe/desk/query_report.py:666 +#: frappe/desk/query_report.py:673 msgid "{0} saved successfully" msgstr "" @@ -32041,11 +32039,11 @@ msgstr "" msgid "{0} {1} added to Dashboard {2}" msgstr "" -#: frappe/model/base_document.py:748 frappe/model/rename_doc.py:110 +#: frappe/model/base_document.py:763 frappe/model/rename_doc.py:110 msgid "{0} {1} already exists" msgstr "" -#: frappe/model/base_document.py:1073 +#: frappe/model/base_document.py:1088 msgid "{0} {1} cannot be \"{2}\". It should be one of \"{3}\"" msgstr "" @@ -32069,7 +32067,7 @@ msgstr "" msgid "{0} {1}: Submitted Record cannot be deleted. You must {2} Cancel {3} it first." msgstr "" -#: frappe/model/base_document.py:1205 +#: frappe/model/base_document.py:1220 msgid "{0}, Row {1}" msgstr "" @@ -32077,7 +32075,7 @@ msgstr "" msgid "{0}/{1} complete | Please leave this tab open until completion." msgstr "" -#: frappe/model/base_document.py:1210 +#: frappe/model/base_document.py:1225 msgid "{0}: '{1}' ({3}) will get truncated, as max characters allowed is {2}" msgstr "" From e2ff41dc89bfc1877cd7425c387808ceea7432d6 Mon Sep 17 00:00:00 2001 From: sokumon Date: Tue, 9 Dec 2025 01:59:47 +0530 Subject: [PATCH 07/14] fix: enhance the sidebar which is generated --- .../auto_generate_sidebar_from_modules.py | 54 +++++++++++++++---- frappe/public/js/frappe/ui/sidebar/sidebar.js | 4 +- .../js/frappe/ui/sidebar/sidebar_item.js | 4 +- 3 files changed, 48 insertions(+), 14 deletions(-) diff --git a/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py b/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py index 008c7a1b6b..3f78ffeb86 100644 --- a/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py +++ b/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py @@ -18,7 +18,6 @@ def execute(): sidebar.header_icon = "hammer" sidebars.append(sidebar) sidebar.save() - return sidebars def get_module_info(module_name): @@ -32,30 +31,63 @@ def get_module_info(module_name): filters.append({"istable": 0}) module_info[entity] = frappe.get_all(entity, filters=filters, pluck="name") + # if module info has no workspaces, then move doctypes to the front + if not module_info.get("Workspace"): + module_info = { + "DocType": module_info.get("DocType"), + "Workspace": module_info.get("Workspace"), + "Report": module_info.get("Report"), + "Dashboard": module_info.get("Dashboard"), + "Page": module_info.get("Page"), + } return module_info def create_sidebar_items(module_info): sidebar_items = [] + idx = 1 + + section_entities = {"report": "Reports", "dashboard": "Dashboards", "page": "Pages"} + for entity, items in module_info.items(): - if entity.lower() == "report": - section_break = frappe.new_doc("Workspace Sidebar Item") - section_break.update( - { - "type": "Section Break", - } - ) + section_break_added = False + entity_lower = entity.lower() + + if entity_lower in section_entities: + if entity_lower == "report": + section_break = add_section_breaks("Reports", idx) + elif entity_lower in ("dashboard", "page") and len(items) > 1: + section_break = add_section_breaks(section_entities[entity_lower], idx) + section_break_added = True sidebar_items.append(section_break) + idx += 1 + for item in items: - item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item} - if entity.lower() == "workspace": + print(entity, item) + item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item, "idx": idx} + + if entity_lower == "report": + item_info["child"] = 1 + + if entity_lower == "workspace": item_info["icon"] = "home" - if entity.lower() == "doctype" and "settings" in item.lower(): + if entity_lower == "doctype" and "settings" in item.lower(): item_info["icon"] = "settings" + if section_break_added: + item_info["child"] = 1 + sidebar_item = frappe.new_doc("Workspace Sidebar Item") sidebar_item.update(item_info) sidebar_items.append(sidebar_item) + idx += 1 + return sidebar_items + + +def add_section_breaks(label, idx): + section_break = frappe.new_doc("Workspace Sidebar Item") + section_break.update({"label": label, "type": "Section Break", "idx": idx}) + return section_break diff --git a/frappe/public/js/frappe/ui/sidebar/sidebar.js b/frappe/public/js/frappe/ui/sidebar/sidebar.js index a101dfddf4..5d7106de6f 100644 --- a/frappe/public/js/frappe/ui/sidebar/sidebar.js +++ b/frappe/public/js/frappe/ui/sidebar/sidebar.js @@ -161,11 +161,11 @@ frappe.ui.Sidebar = class Sidebar { let match = false; const that = this; $(".item-anchor").each(function () { - let href = $(this).attr("href")?.split("?")[0]; + let href = decodeURIComponent($(this).attr("href")?.split("?")[0]); const path = decodeURIComponent(window.location.pathname); // Match only if path equals href or starts with it followed by "/" or end of string - const isActive = new RegExp(`^${href}(?:/|$)`).test(path); + const isActive = href === path; if (href && isActive) { match = true; if (that.active_item) that.active_item.removeClass("active-sidebar"); diff --git a/frappe/public/js/frappe/ui/sidebar/sidebar_item.js b/frappe/public/js/frappe/ui/sidebar/sidebar_item.js index bb88ec5f4a..d67d435fba 100644 --- a/frappe/public/js/frappe/ui/sidebar/sidebar_item.js +++ b/frappe/public/js/frappe/ui/sidebar/sidebar_item.js @@ -54,7 +54,9 @@ frappe.ui.sidebar_item.TypeLink = class SidebarItem { }); } } - return path; + if (path) { + return encodeURI(path); + } } prepare() {} make() { From 146e8b66f089339f055900cfce1bd620153a57d1 Mon Sep 17 00:00:00 2001 From: Rahul Agrawal <12agrawalrahul@gmail.com> Date: Tue, 9 Dec 2025 13:04:49 +0530 Subject: [PATCH 08/14] fix: store childtable fieldname in query param (#35122) * fix: resolve child table fieldname override in list view filter * chore: rename variables --- frappe/public/js/frappe/list/list_view.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index ff6f2e0ac6..02ce0c1606 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -1900,14 +1900,18 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { get_search_params() { let search_params = new URLSearchParams(); - this.get_filters_for_args().forEach((filter) => { - if (filter[2] === "=") { - search_params.append(filter[1], filter[3]); - } else { - search_params.append(filter[1], JSON.stringify([filter[2], filter[3]])); - } + const doctype = filter[0]; + const field = filter[1]; + const operator = filter[2]; + const value = filter[3]; + + const query_key = doctype === this.doctype ? field : `${doctype}.${field}`; + const query_value = operator === "=" ? value : JSON.stringify([operator, value]); + + search_params.append(query_key, query_value); }); + return search_params; } From 8d46b17c713c4c7455eebb1213946c905991be70 Mon Sep 17 00:00:00 2001 From: Saqib Ansari Date: Tue, 9 Dec 2025 14:01:43 +0530 Subject: [PATCH 09/14] fix: dashboard view margin (#35128) --- frappe/core/page/dashboard_view/dashboard_view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/core/page/dashboard_view/dashboard_view.js b/frappe/core/page/dashboard_view/dashboard_view.js index 5b53970e79..c9d8342f2c 100644 --- a/frappe/core/page/dashboard_view/dashboard_view.js +++ b/frappe/core/page/dashboard_view/dashboard_view.js @@ -20,7 +20,7 @@ frappe.pages["dashboard-view"].on_page_load = function (wrapper) { class Dashboard { constructor(wrapper) { this.wrapper = $(wrapper); - $(`
+ $(`
`).appendTo(this.wrapper.find(".page-content").empty()); this.container = this.wrapper.find(".dashboard-graph"); From 92a73cbd5e73e939d0083db40353c787f43ab96e Mon Sep 17 00:00:00 2001 From: sokumon Date: Tue, 9 Dec 2025 15:16:37 +0530 Subject: [PATCH 10/14] refactor: move logic to a function --- frappe/boot.py | 19 ++- frappe/patches.txt | 1 - .../auto_generate_sidebar_from_modules.py | 93 ------------ frappe/public/js/frappe/ui/sidebar/sidebar.js | 2 +- frappe/utils/install.py | 133 ++++++++++++++++++ 5 files changed, 148 insertions(+), 100 deletions(-) delete mode 100644 frappe/patches/v16_0/auto_generate_sidebar_from_modules.py diff --git a/frappe/boot.py b/frappe/boot.py index 2af5107988..dc8c99199e 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -528,16 +528,25 @@ def get_sentry_dsn(): def get_sidebar_items(): + from frappe.utils.install import auto_generate_sidebar_from_module + sidebars = frappe.get_all( "Workspace Sidebar", fields=["name", "header_icon"], filters={"name": ["not like", "%My Workspaces%"]} ) + module_sidebars = auto_generate_sidebar_from_module() + sidebars.extend(module_sidebars) add_user_specific_sidebar(sidebars) sidebar_items = {} for s in sidebars: - w = frappe.get_doc("Workspace Sidebar", s.get("name")) - sidebar_items[s["name"].lower()] = { - "label": s.get("name"), + sidebar_title = s.get("name") + if sidebar_title: + w = frappe.get_doc("Workspace Sidebar", sidebar_title) + else: + sidebar_title = s.title + w = s + sidebar_items[sidebar_title.lower()] = { + "label": sidebar_title, "items": [], "header_icon": s.get("header_icon"), "module": w.module, @@ -569,11 +578,11 @@ def get_sidebar_items(): "ref_doctype": ref_doctype, } if ( - "My Workspaces" in s["name"] + "My Workspaces" in sidebar_title or si.type == "Section Break" or w.is_item_allowed(si.link_to, si.link_type) ): - sidebar_items[s.get("name").lower()]["items"].append(workspace_sidebar) + sidebar_items[sidebar_title.lower()]["items"].append(workspace_sidebar) old_name = f"my workspaces-{frappe.session.user.lower()}" if old_name in sidebar_items.keys(): diff --git a/frappe/patches.txt b/frappe/patches.txt index 93ff293ccb..5b076fab59 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -252,4 +252,3 @@ frappe.patches.v16_0.auto_generate_desktop_icon_and_sidebar frappe.patches.v16_0.add_private_workspaces_to_sidebar frappe.core.doctype.communication_link.patches.copy_communication_date_to_link frappe.core.doctype.communication.patches.drop_ref_dt_dn_index -frappe.patches.v16_0.auto_generate_sidebar_from_modules diff --git a/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py b/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py deleted file mode 100644 index 3f78ffeb86..0000000000 --- a/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py +++ /dev/null @@ -1,93 +0,0 @@ -import frappe - - -def execute(): - """Auto generate sidebar from module""" - sidebars = [] - for module in frappe.get_all("Module Def", pluck="name"): - if not ( - frappe.db.exists("Workspace Sidebar", {"module": module}) - or frappe.db.exists("Workspace Sidebar", {"name": module}) - ): - print("Fetching information for Module", module) - module_info = get_module_info(module) - sidebar_items = create_sidebar_items(module_info) - sidebar = frappe.new_doc("Workspace Sidebar") - sidebar.title = module - sidebar.items = sidebar_items - sidebar.header_icon = "hammer" - sidebars.append(sidebar) - sidebar.save() - - -def get_module_info(module_name): - entities = ["Workspace", "Dashboard", "DocType", "Report", "Page"] - module_info = {} - - for entity in entities: - module_info[entity] = {} - filters = [{"module": module_name}] - if entity.lower() == "doctype": - filters.append({"istable": 0}) - module_info[entity] = frappe.get_all(entity, filters=filters, pluck="name") - - # if module info has no workspaces, then move doctypes to the front - if not module_info.get("Workspace"): - module_info = { - "DocType": module_info.get("DocType"), - "Workspace": module_info.get("Workspace"), - "Report": module_info.get("Report"), - "Dashboard": module_info.get("Dashboard"), - "Page": module_info.get("Page"), - } - return module_info - - -def create_sidebar_items(module_info): - sidebar_items = [] - idx = 1 - - section_entities = {"report": "Reports", "dashboard": "Dashboards", "page": "Pages"} - - for entity, items in module_info.items(): - section_break_added = False - entity_lower = entity.lower() - - if entity_lower in section_entities: - if entity_lower == "report": - section_break = add_section_breaks("Reports", idx) - elif entity_lower in ("dashboard", "page") and len(items) > 1: - section_break = add_section_breaks(section_entities[entity_lower], idx) - section_break_added = True - sidebar_items.append(section_break) - idx += 1 - - for item in items: - print(entity, item) - item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item, "idx": idx} - - if entity_lower == "report": - item_info["child"] = 1 - - if entity_lower == "workspace": - item_info["icon"] = "home" - - if entity_lower == "doctype" and "settings" in item.lower(): - item_info["icon"] = "settings" - - if section_break_added: - item_info["child"] = 1 - - sidebar_item = frappe.new_doc("Workspace Sidebar Item") - sidebar_item.update(item_info) - sidebar_items.append(sidebar_item) - - idx += 1 - - return sidebar_items - - -def add_section_breaks(label, idx): - section_break = frappe.new_doc("Workspace Sidebar Item") - section_break.update({"label": label, "type": "Section Break", "idx": idx}) - return section_break diff --git a/frappe/public/js/frappe/ui/sidebar/sidebar.js b/frappe/public/js/frappe/ui/sidebar/sidebar.js index 5d7106de6f..e4e3810216 100644 --- a/frappe/public/js/frappe/ui/sidebar/sidebar.js +++ b/frappe/public/js/frappe/ui/sidebar/sidebar.js @@ -445,7 +445,7 @@ frappe.ui.Sidebar = class Sidebar { if (route.length == 2) { workspace_title = this.get_correct_workspace_sidebars(route[1]); } else { - workspace_title = this.get_correct_workspace_sidebars(route); + workspace_title = this.get_correct_workspace_sidebars(route[0]); } let module_name = workspace_title[0]; if (module_name) { diff --git a/frappe/utils/install.py b/frappe/utils/install.py index 60a393882e..2f885370c8 100644 --- a/frappe/utils/install.py +++ b/frappe/utils/install.py @@ -5,6 +5,7 @@ import getpass import frappe from frappe.geo.doctype.country.country import import_country_and_currency from frappe.utils import cint +from frappe.utils.caching import site_cache from frappe.utils.password import update_password @@ -221,3 +222,135 @@ def delete_desktop_icon_and_sidebar(app_name, dry_run=False): if dry_run: # Delete icons and sidebars frappe.db.commit() # nosemgrep + + +@site_cache() +def auto_generate_sidebar_from_module(): + """Auto generate sidebar from module""" + sidebars = [] + for module in frappe.get_all("Module Def", pluck="name"): + if not ( + frappe.db.exists("Workspace Sidebar", {"module": module}) + or frappe.db.exists("Workspace Sidebar", {"name": module}) + ): + module_info = get_module_info(module) + sidebar_items = create_sidebar_items(module_info) + sidebar = frappe.new_doc("Workspace Sidebar") + sidebar.title = module + sidebar.items = sidebar_items + sidebar.module = module + sidebar.header_icon = "hammer" + sidebar.app = frappe.local.module_app.get(frappe.scrub(module), None) + sidebars.append(sidebar) + return sidebars + + +def get_module_info(module_name): + entities = ["Workspace", "Dashboard", "DocType", "Report", "Page"] + module_info = {} + + for entity in entities: + module_info[entity] = {} + filters = [{"module": module_name}] + pluck = "name" + fieldnames = ["name"] + if entity.lower() == "doctype": + filters.append({"istable": 0}) + if entity.lower() == "page": + fieldnames.append("title") + pluck = None + module_info[entity] = frappe.get_all( + entity, filters=filters, fields=fieldnames, pluck=pluck, order_by="creation asc" + ) + + # if module info has no workspaces, then move doctypes to the front + if not module_info.get("Workspace"): + module_info = { + "DocType": module_info.get("DocType"), + "Workspace": module_info.get("Workspace"), + "Report": module_info.get("Report"), + "Dashboard": module_info.get("Dashboard"), + "Page": module_info.get("Page"), + } + top_doctypes = choose_top_doctypes(module_info.get("DocType")) + if top_doctypes: + module_info["DocType"] = choose_top_doctypes(module_info.get("DocType")) + return module_info + + +def choose_top_doctypes(doctype_names): + doctype_limit = 3 + if len(doctype_names) > doctype_limit: + try: + doctype_count_map = {} + for doctype in doctype_names: + doctype_count_map[doctype] = frappe.db.count(doctype) + top_doctypes = [ + name + for name, count in sorted(doctype_count_map.items(), key=lambda x: x[1], reverse=True)[ + :doctype_limit + ] + ] + return top_doctypes + except frappe.db.ProgrammingError: + # catches table not found errors + return None + + +def create_sidebar_items(module_info): + sidebar_items = [] + idx = 1 + + section_entities = {"report": "Reports", "dashboard": "Dashboards", "page": "Pages"} + + for entity, items in module_info.items(): + section_break_added = False + entity_lower = entity.lower() + + if entity_lower in section_entities: + if entity_lower == "report": + section_break = add_section_breaks("Reports", idx) + elif entity_lower in ("dashboard", "page") and len(items) > 1: + section_break = add_section_breaks(section_entities[entity_lower], idx) + section_break_added = True + sidebar_items.append(section_break) + idx += 1 + + for item in items: + print(entity, item) + item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item, "idx": idx} + + if entity_lower == "report": + item_info["child"] = 1 + item_info["icon"] = "table" + + if entity_lower == "page": + item_info["label"] = item.get("title") + item_info["link_to"] = item.get("name") + + if entity_lower == "workspace": + item_info["icon"] = "home" + item_info["icon"] = "wallpaper" + + if entity_lower == "page": + item_info["icon"] = "panel-top" + + if entity_lower == "doctype" and "settings" in item.lower(): + item_info["icon"] = "settings" + + if section_break_added: + item_info["child"] = 1 + + sidebar_item = frappe.new_doc("Workspace Sidebar Item") + sidebar_item.update(item_info) + sidebar_items.append(sidebar_item) + + idx += 1 + + return sidebar_items + + +def add_section_breaks(label, idx): + section_break = frappe.new_doc("Workspace Sidebar Item") + section_break.update({"label": label, "type": "Section Break", "idx": idx}) + return section_break From 9fc078e112d64002fbb3b8f13d893b47f5bf08e4 Mon Sep 17 00:00:00 2001 From: sokumon Date: Tue, 9 Dec 2025 15:44:32 +0530 Subject: [PATCH 11/14] fix: add a simpler icon for list --- frappe/public/js/frappe/ui/sidebar/sidebar_item.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/ui/sidebar/sidebar_item.js b/frappe/public/js/frappe/ui/sidebar/sidebar_item.js index d67d435fba..67d76c4689 100644 --- a/frappe/public/js/frappe/ui/sidebar/sidebar_item.js +++ b/frappe/public/js/frappe/ui/sidebar/sidebar_item.js @@ -63,7 +63,7 @@ frappe.ui.sidebar_item.TypeLink = class SidebarItem { this.path = this.get_path(); this.set_suffix(); if (!this.item.icon && !(this.item.child && this.item.parent.indent)) { - this.item.icon = "list-alt"; + this.item.icon = "list"; } this.wrapper = $( frappe.render_template("sidebar_item", { From 088b091bd75fab0199c539ff03ed646b6bdcb0dd Mon Sep 17 00:00:00 2001 From: MochaMind Date: Tue, 9 Dec 2025 17:07:30 +0530 Subject: [PATCH 12/14] fix: sync translations from crowdin (#35096) --- frappe/locale/fa.po | 54 +++---- frappe/locale/hu.po | 372 ++++++++++++++++++++++---------------------- frappe/locale/sl.po | 186 +++++++++++----------- frappe/locale/sv.po | 4 +- 4 files changed, 309 insertions(+), 307 deletions(-) diff --git a/frappe/locale/fa.po b/frappe/locale/fa.po index 9805321e50..a6e1f0dc9f 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: 2025-11-30 09:34+0000\n" -"PO-Revision-Date: 2025-12-02 15:00\n" +"PO-Revision-Date: 2025-12-06 16:40\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Persian\n" "MIME-Version: 1.0\n" @@ -1660,7 +1660,7 @@ msgstr "به API Indexing Access اجازه دهید" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Allow Auto Repeat" -msgstr "تکرار خودکار مجاز است" +msgstr "اجازه تکرار خودکار" #. Label of the allow_bulk_edit (Check) field in DocType 'DocField' #. Label of the allow_bulk_edit (Check) field in DocType 'Customize Form Field' @@ -1743,7 +1743,7 @@ msgstr "اجازه دادن به پیوندهای نمای وب قدیمی (نا #. Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Allow Print for Cancelled" -msgstr "چاپ برای لغو مجاز است" +msgstr "اجازه چاپ برای لغو شده" #. Label of the allow_print_for_draft (Check) field in DocType 'Print Settings' #: frappe/automation/doctype/auto_repeat/auto_repeat.py:438 @@ -6756,7 +6756,7 @@ msgstr "وضعیت ها و قوانین گردش کار را برای یک سن #. Option for the 'Delivery Status' (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Delayed" -msgstr "" +msgstr "با تاخیر" #. Label of the delete (Check) field in DocType 'Custom DocPerm' #. Label of the delete (Check) field in DocType 'DocPerm' @@ -6949,7 +6949,7 @@ msgstr "جداکننده باید یک کاراکتر واحد باشد" #. Label of the delivery_status (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Delivery Status" -msgstr "" +msgstr "وضعیت تحویل" #. Option for the 'Sign ups' (Select) field in DocType 'Social Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json @@ -6960,7 +6960,7 @@ msgstr "انکار" #. Label of the department (Data) field in DocType 'Contact' #: frappe/contacts/doctype/contact/contact.json msgid "Department" -msgstr "" +msgstr "دپارتمان" #. Label of the dependencies (Data) field in DocType 'Workspace Link' #: frappe/desk/doctype/workspace_link/workspace_link.json @@ -15693,7 +15693,7 @@ msgstr "استفاده از حافظه" #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.py:63 msgid "Memory Usage in MB" -msgstr "" +msgstr "میزان استفاده از حافظه برحسب مگابایت" #. Option for the 'Type' (Select) field in DocType 'Notification Log' #: frappe/desk/doctype/notification_log/notification_log.json @@ -18464,7 +18464,7 @@ msgstr "تولید PDF در حال انجام است" #. Label of the pdf_generator (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "PDF Generator" -msgstr "" +msgstr "سازنده PDF" #. Label of the pdf_page_height (Float) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json @@ -19087,7 +19087,7 @@ msgstr "نوع مجوز" #: frappe/core/doctype/permission_type/permission_type.py:40 msgid "Permission Type '{0}' is reserved. Please choose another name." -msgstr "" +msgstr "نوع مجوز '{0}' رزرو شده است. لطفاً نام دیگری انتخاب کنید." #. Label of the section_break_4 (Section Break) field in DocType 'Custom #. DocPerm' @@ -19325,7 +19325,7 @@ msgstr "" #: frappe/core/doctype/data_import/data_import.js:164 msgid "Please click on 'Export Errored Rows', fix the errors and import again." -msgstr "" +msgstr "لطفاً روی «برون‌بُرد ردیف‌های دارای خطا» کلیک کنید، خطاها را برطرف کرده و دوباره درون‌بُرد کنید." #: frappe/twofactor.py:286 msgid "Please click on the following link and follow the instructions on the page. {0}" @@ -19648,7 +19648,7 @@ msgstr "لطفاً از یک فیلتر جستجوی معتبر LDAP استفا #: frappe/templates/emails/file_backup_notification.html:4 msgid "Please use following links to download file backup." -msgstr "" +msgstr "لطفا برای دانلود فایل پشتیبان از لینک‌های زیر استفاده کنید." #: frappe/utils/password.py:217 msgid "Please visit https://frappecloud.com/docs/sites/migrate-an-existing-site#encryption-key for more information." @@ -24281,7 +24281,7 @@ msgstr "نمایش ردیابی" #. Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Show Values over Chart" -msgstr "" +msgstr "نمایش مقادیر روی نمودار" #: frappe/public/js/frappe/data_import/import_preview.js:204 msgid "Show Warnings" @@ -24524,7 +24524,7 @@ msgstr "حجم (مگابایت)" #: frappe/public/js/frappe/file_uploader/FileUploader.vue:629 msgid "Size exceeds the maximum allowed file size." -msgstr "" +msgstr "حجم فایل از حداکثر حجم مجاز بیشتر است." #: frappe/public/js/frappe/widgets/onboarding_widget.js:82 #: frappe/public/js/onboarding_tours/onboarding_tours.js:18 @@ -25348,7 +25348,7 @@ msgstr "پاسخ دیگری را ثبت کنید" #. Label of the button_label (Data) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Submit button label" -msgstr "" +msgstr "برچسب دکمه ارسال" #. Label of the submit_on_creation (Check) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json @@ -26610,7 +26610,7 @@ msgstr "این سند پس از ارسال ایمیل اصلاح شده است." #: frappe/public/js/frappe/form/form.js:1317 msgid "This document has unsaved changes which might not appear in final PDF.
Consider saving the document before printing." -msgstr "" +msgstr "این سند دارای تغییرات ذخیره‌نشده است که ممکن است در فایل PDF نهایی نمایش داده نشوند.
قبل از چاپ، سند را ذخیره کنید." #: frappe/public/js/frappe/form/form.js:1105 msgid "This document is already amended, you cannot ammend it again" @@ -26649,7 +26649,7 @@ msgstr "این فایل به یک سند محافظت شده پیوست شده #: frappe/public/js/frappe/file_uploader/FilePreview.vue:76 msgid "This file is public and can be accessed by anyone, even without logging in. Mark it private to limit access." -msgstr "" +msgstr "این فایل عمومی است و هر کسی می‌تواند به آن دسترسی داشته باشد، حتی بدون ورود به سیستم. برای محدود کردن دسترسی، آن را خصوصی علامت‌گذاری کنید." #: frappe/core/doctype/file/file.js:20 msgid "This file is public. It can be accessed without authentication." @@ -26754,7 +26754,7 @@ msgstr "این سایت در حالت توسعه دهنده در حال اجرا #: frappe/www/attribution.html:11 msgid "This software is built on top of many open source packages." -msgstr "" +msgstr "این نرم‌افزار بر پایه بسیاری از بسته‌های نرم‌افزاری متن‌باز ساخته شده است." #: frappe/website/doctype/web_page/web_page.js:71 msgid "This title will be used as the title of the webpage as well as in meta tags" @@ -30107,7 +30107,7 @@ msgstr "همچنین می‌توانید این {0} را در مرورگر خو #: frappe/templates/emails/user_invitation_expired.html:8 msgid "You can ask your team to resend the invitation if you'd still like to join." -msgstr "" +msgstr "اگر هنوز مایل به عضویت هستید، می‌توانید از تیم خود بخواهید که دعوت‌نامه را دوباره ارسال کند." #: frappe/core/page/permission_manager/permission_manager_help.html:17 msgid "You can change Submitted documents by cancelling them and then, amending them." @@ -30250,7 +30250,7 @@ msgstr "" #: frappe/database/query.py:810 msgid "You do not have permission to access field: {0}" -msgstr "" +msgstr "شما اجازه دسترسی به فیلد را ندارید: {0}" #: frappe/desk/query_report.py:934 msgid "You do not have permission to access {0}: {1}." @@ -30459,15 +30459,15 @@ msgstr "شما هدایت خواهید شد به:" #: frappe/core/doctype/user_invitation/user_invitation.py:113 msgid "You've been invited to join {0}" -msgstr "" +msgstr "از شما دعوت شده است تا به {0} بپیوندید" #: frappe/templates/emails/user_invitation.html:5 msgid "You've been invited to join {0}." -msgstr "" +msgstr "از شما دعوت شده است تا به {0} بپیوندید." #: frappe/public/js/frappe/desk.js:547 msgid "You've logged in as another user from another tab. Refresh this page to continue using system." -msgstr "" +msgstr "شما به عنوان یک کاربر دیگر از یک تب دیگر وارد سیستم شده‌اید. برای ادامه استفاده از سیستم، این صفحه را رفرش کنید." #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "YouTube" @@ -30536,11 +30536,11 @@ msgstr "فرم شما با موفقیت به روز شد" #: frappe/templates/emails/user_invitation_cancelled.html:5 msgid "Your invitation to join {0} has been cancelled by the site administrator." -msgstr "" +msgstr "دعوت شما برای عضویت {0} توسط مدیر سایت لغو شده است." #: frappe/templates/emails/user_invitation_expired.html:5 msgid "Your invitation to join {0} has expired." -msgstr "" +msgstr "دعوت شما برای عضویت {0} منقضی شده است." #: frappe/templates/emails/new_user.html:6 msgid "Your login id is" @@ -30566,7 +30566,7 @@ msgstr "پرسمان شما دریافت شد. ما به زودی پاسخ خو #: frappe/desk/query_report.py:342 frappe/desk/reportview.py:402 msgid "Your report is being generated in the background. You will receive an email on {0} with a download link once it is ready." -msgstr "" +msgstr "گزارش شما در پس‌زمینه در حال تولید است. به محض آماده شدن، ایمیلی حاوی لینک دانلود در {0} دریافت خواهید کرد." #: frappe/app.py:377 msgid "Your session has expired, please login again to continue." @@ -31858,7 +31858,7 @@ msgstr "{0} رکورد برون‌بُرد خواهد شد" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:313 msgid "{0} removed 1 row from {1}" -msgstr "" +msgstr "{0} ۱ ردیف از {1} حذف کرد" #: frappe/public/js/frappe/form/footer/form_timeline.js:420 msgctxt "Form timeline" @@ -31871,7 +31871,7 @@ msgstr "{0} تخصیص خود را حذف کرد." #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:291 msgid "{0} removed {1} rows from {2}" -msgstr "" +msgstr "{0} {1} ردیف از {2} حذف کرد" #: frappe/public/js/frappe/roles_editor.js:64 msgid "{0} role does not have permission on any doctype" diff --git a/frappe/locale/hu.po b/frappe/locale/hu.po index 18dc942c50..d200ee5d7b 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: 2025-11-30 09:34+0000\n" -"PO-Revision-Date: 2025-12-03 15:03\n" +"PO-Revision-Date: 2025-12-08 17:07\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Hungarian\n" "MIME-Version: 1.0\n" @@ -8067,14 +8067,14 @@ msgstr "" #. Label of the documentation (Data) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Documentation Link" -msgstr "" +msgstr "Dokumentáció Link" #. Label of the documentation_url (Data) field in DocType 'DocField' #. Label of the documentation_url (Data) field in DocType 'Module Onboarding' #: frappe/core/doctype/docfield/docfield.json #: frappe/desk/doctype/module_onboarding/module_onboarding.json msgid "Documentation URL" -msgstr "" +msgstr "Dokumentáció URL" #: frappe/public/js/frappe/form/templates/form_dashboard.html:17 msgid "Documents" @@ -8105,7 +8105,7 @@ msgstr "" #. Label of the domain_name (Data) field in DocType 'Email Domain' #: frappe/email/doctype/email_domain/email_domain.json msgid "Domain Name" -msgstr "" +msgstr "Domén Név" #. Name of a DocType #: frappe/core/doctype/domain_settings/domain_settings.json @@ -8115,13 +8115,13 @@ msgstr "" #. Label of the domains_html (HTML) field in DocType 'Domain Settings' #: frappe/core/doctype/domain_settings/domain_settings.json msgid "Domains HTML" -msgstr "" +msgstr "Domének HTML-je" #. Description of the 'Ignore XSS Filter' (Check) field in DocType 'Custom #. Field' #: frappe/custom/doctype/custom_field/custom_field.json msgid "Don't HTML Encode HTML tags like <script> or just characters like < or >, as they could be intentionally used in this field" -msgstr "" +msgstr "Ne kódoljon olyan HTML címkéket, mint a <script> vagy csak olyan karaktereket, mint a < vagy a >, mivel ezeket szándékosan használhatják ebben a mezőben" #: frappe/public/js/frappe/data_import/import_preview.js:272 msgid "Don't Import" @@ -8133,12 +8133,12 @@ msgstr "" #: frappe/workflow/doctype/workflow/workflow.json #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Don't Override Status" -msgstr "" +msgstr "Ne Írja Fellül az Állapotot" #. Label of the mute_emails (Check) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Don't Send Emails" -msgstr "" +msgstr "Ne Küldjön E-maileket" #. Description of the 'Ignore XSS Filter' (Check) field in DocType 'DocField' #. Description of the 'Ignore XSS Filter' (Check) field in DocType 'Customize @@ -8146,7 +8146,7 @@ msgstr "" #: frappe/core/doctype/docfield/docfield.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Don't encode HTML tags like <script> or just characters like < or >, as they could be intentionally used in this field" -msgstr "" +msgstr "Ne kódoljon olyan HTML címkéket, mint a <script> vagy csak olyan karaktereket, mint a < vagy a >, mivel ezeket szándékosan használhatják ebben a mezőben" #: frappe/www/login.html:139 frappe/www/login.html:155 #: frappe/www/update-password.html:70 @@ -8164,7 +8164,7 @@ msgstr "" #. Option for the 'Type' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Donut" -msgstr "" +msgstr "Fánk" #: frappe/public/js/form_builder/components/EditableInput.vue:43 msgid "Double click to edit label" @@ -8230,7 +8230,7 @@ msgstr "" #: frappe/desk/page/setup_wizard/install_fixtures.py:46 msgid "Dr" -msgstr "" +msgstr "Dr." #: frappe/public/js/frappe/model/indicator.js:73 #: frappe/public/js/frappe/ui/filters/filter.js:538 @@ -8595,7 +8595,7 @@ msgstr "" #. Settings' #: frappe/core/doctype/sms_settings/sms_settings.json msgid "Eg. smsgateway.com/api/send_sms.cgi" -msgstr "" +msgstr "Pl. smsgateway.com/api/send_sms.cgi" #: frappe/rate_limiter.py:152 msgid "Either key or IP flag is required." @@ -8604,7 +8604,7 @@ msgstr "" #. Label of the element_selector (Data) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Element Selector" -msgstr "" +msgstr "Elemválasztó" #. Option for the 'Type' (Select) field in DocType 'Communication' #. Label of the email (Check) field in DocType 'Custom DocPerm' @@ -8669,7 +8669,7 @@ msgstr "" #. Label of the email_account_name (Data) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Email Account Name" -msgstr "" +msgstr "E-mail Fiók Neve" #: frappe/core/doctype/user/user.py:787 msgid "Email Account added multiple times" @@ -8700,7 +8700,7 @@ msgstr "" #. Description of the 'Email Address' (Data) field in DocType 'Google Contacts' #: frappe/integrations/doctype/google_contacts/google_contacts.json msgid "Email Address whose Google Contacts are to be synced." -msgstr "" +msgstr "E-mail Cím, amelynek Google Névjegyeit szinkronizálni kell." #: frappe/email/doctype/email_group/email_group.js:43 msgid "Email Addresses" @@ -8720,7 +8720,7 @@ msgstr "" #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Email Footer Address" -msgstr "" +msgstr "E-mail Lábléc Cím" #. Name of a DocType #. Label of the email_group (Link) field in DocType 'Email Group Member' @@ -8752,7 +8752,7 @@ msgstr "" #. Label of the email_ids (Table) field in DocType 'Contact' #: frappe/contacts/doctype/contact/contact.json msgid "Email IDs" -msgstr "" +msgstr "E-mail Azonosítók" #. Label of the email_id (Data) field in DocType 'Contact Us Settings' #: frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.py:48 @@ -8763,7 +8763,7 @@ msgstr "" #. Label of the email_inbox (Section Break) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Email Inbox" -msgstr "" +msgstr "E-mail Postafiók" #. Name of a DocType #: frappe/email/doctype/email_queue/email_queue.json @@ -8787,12 +8787,12 @@ msgstr "" #. Label of the email_reply_help (HTML) field in DocType 'Email Template' #: frappe/email/doctype/email_template/email_template.json msgid "Email Reply Help" -msgstr "" +msgstr "E-mail Válasz Súgó" #. Label of the email_retry_limit (Int) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Email Retry Limit" -msgstr "" +msgstr "E-mail Újrapróbálkozási Limit" #. Name of a DocType #: frappe/email/doctype/email_rule/email_rule.json @@ -8802,7 +8802,7 @@ msgstr "" #. Label of the email_sent_at (Datetime) field in DocType 'User Invitation' #: frappe/core/doctype/user_invitation/user_invitation.json msgid "Email Sent At" -msgstr "" +msgstr "E-mail Elküldve ekkor" #. Label of the email_settings_sb (Section Break) field in DocType 'DocType' #. Label of the email_settings_section (Section Break) field in DocType @@ -8816,22 +8816,22 @@ msgstr "" #: frappe/desk/doctype/notification_settings/notification_settings.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Email Settings" -msgstr "" +msgstr "E-mail Beállítások" #. Label of the email_signature (Text Editor) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Email Signature" -msgstr "" +msgstr "E-mail Aláírás" #. Label of the email_status (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Email Status" -msgstr "" +msgstr "E-mail Állapot" #. Label of the email_sync_option (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Email Sync Option" -msgstr "" +msgstr "E-mail Szinkronizálás Lehetőség" #. Label of the email_template (Link) field in DocType 'Communication' #. Name of a DocType @@ -8845,12 +8845,12 @@ msgstr "" #. DocType 'Notification Settings' #: frappe/desk/doctype/notification_settings/notification_settings.json msgid "Email Threads on Assigned Document" -msgstr "" +msgstr "E-mail Szálak a Hozzárendelt Dokumentumhoz" #. Label of the email_to (Small Text) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Email To" -msgstr "" +msgstr "E-mail Címzett" #. Name of a DocType #: frappe/email/doctype/email_unsubscribe/email_unsubscribe.json @@ -9185,7 +9185,7 @@ msgstr "" #. Label of the end_date_field (Select) field in DocType 'Calendar View' #: frappe/desk/doctype/calendar_view/calendar_view.json msgid "End Date Field" -msgstr "" +msgstr "Befejezés Dátuma Mező" #: frappe/website/doctype/web_page/web_page.py:208 msgid "End Date cannot be before Start Date!" @@ -9200,28 +9200,28 @@ msgstr "" #: frappe/core/doctype/rq_job/rq_job.json #: frappe/core/doctype/submission_queue/submission_queue.json msgid "Ended At" -msgstr "" +msgstr "Véget ért ekkor" #. Label of the sb_endpoints_section (Section Break) field in DocType #. 'Connected App' #: frappe/integrations/doctype/connected_app/connected_app.json msgid "Endpoints" -msgstr "" +msgstr "Végpontok" #. Label of the ends_on (Datetime) field in DocType 'Event' #: frappe/desk/doctype/event/event.json msgid "Ends on" -msgstr "" +msgstr "Véget ér ekkor" #. Option for the 'Type' (Select) field in DocType 'Notification Log' #: frappe/desk/doctype/notification_log/notification_log.json msgid "Energy Point" -msgstr "" +msgstr "Energiapont" #. Label of the enqueued_by (Data) field in DocType 'Submission Queue' #: frappe/core/doctype/submission_queue/submission_queue.json msgid "Enqueued By" -msgstr "" +msgstr "Hozzáadta a Várólistához" #: frappe/core/doctype/recorder/recorder.py:125 msgid "Enqueued creation of indexes" @@ -9246,7 +9246,7 @@ msgstr "" #. Label of the doc_type (Link) field in DocType 'Customize Form' #: frappe/custom/doctype/customize_form/customize_form.json msgid "Enter Form Type" -msgstr "" +msgstr "Űrlaptípus Megadása" #: frappe/public/js/frappe/ui/messages.js:94 msgctxt "Title of prompt dialog" @@ -9260,7 +9260,7 @@ msgstr "" #. Description of the 'User Defaults' (Table) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Enter default value fields (keys) and values. If you add multiple values for a field, the first one will be picked. These defaults are also used to set \"match\" permission rules. To see list of fields, go to \"Customize Form\"." -msgstr "" +msgstr "Adja meg az alapértelmezett értékmezőket (kulcsokat) és értékeket. Ha egy mezőhöz több értéket ad meg, az első értéket választja ki a rendszer. Ezek az alapértelmezett értékek az \"egyezés\" engedélyezési szabályok beállításához is használhatók. A mezők listáját a \"Formanyomtatvány testreszabása\" menüpontban tekintheti meg." #: frappe/public/js/frappe/views/file/file_view.js:111 msgid "Enter folder name" @@ -9270,19 +9270,19 @@ msgstr "" #. Settings' #: frappe/core/doctype/sms_settings/sms_settings.json msgid "Enter static url parameters here (Eg. sender=ERPNext, username=ERPNext, password=1234 etc.)" -msgstr "" +msgstr "Írja be a statikus url paramétereket itt (Pl. sender=ERPNext, username=ERPNext, password=1234 stb.)" #. Description of the 'Message Parameter' (Data) field in DocType 'SMS #. Settings' #: frappe/core/doctype/sms_settings/sms_settings.json msgid "Enter url parameter for message" -msgstr "" +msgstr "Adjon url paramétert az üzenethez" #. Description of the 'Receiver Parameter' (Data) field in DocType 'SMS #. Settings' #: frappe/core/doctype/sms_settings/sms_settings.json msgid "Enter url parameter for receiver nos" -msgstr "" +msgstr "Adjon url paramétert a fogadó számaihoz" #: frappe/public/js/frappe/ui/messages.js:341 msgid "Enter your password" @@ -9951,12 +9951,12 @@ msgstr "" #. Label of the favicon (Attach) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "FavIcon" -msgstr "" +msgstr "Weboldal ikon" #. 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:33 msgid "Feedback" @@ -9964,7 +9964,7 @@ msgstr "" #: frappe/desk/page/setup_wizard/install_fixtures.py:29 msgid "Female" -msgstr "" +msgstr "Nő" #. Label of the fetch_from (Small Text) field in DocType 'DocField' #. Label of the fetch_from (Small Text) field in DocType 'Custom Field' @@ -9975,7 +9975,7 @@ msgstr "" #: frappe/public/js/form_builder/components/controls/FetchFromControl.vue:29 #: frappe/public/js/form_builder/components/controls/FetchFromControl.vue:34 msgid "Fetch From" -msgstr "" +msgstr "Lekérés Innen" #: frappe/website/doctype/website_slideshow/website_slideshow.js:15 msgid "Fetch Images" @@ -9992,7 +9992,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Fetch on Save if Empty" -msgstr "" +msgstr "Lekérés mentéskor, ha üres" #: frappe/desk/doctype/global_search_settings/global_search_settings.py:61 msgid "Fetching default Global Search documents." @@ -10040,7 +10040,7 @@ msgstr "" #. Label of the description (Text) field in DocType 'Custom Field' #: frappe/custom/doctype/custom_field/custom_field.json msgid "Field Description" -msgstr "" +msgstr "Mező Leírása" #: frappe/core/doctype/doctype/doctype.py:1078 msgid "Field Missing" @@ -10079,7 +10079,7 @@ msgstr "" #. Description of the 'Workflow State Field' (Data) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "Field that represents the Workflow State of the transaction (if field is not present, a new hidden Custom Field will be created)" -msgstr "" +msgstr "A tranzakció munkafolyamat állapotát jelző mező (ha a mező nincs jelen, egy új, rejtett egyéni mező jön létre)" #. Label of the track_field (Select) field in DocType 'Milestone Tracker' #: frappe/automation/doctype/milestone_tracker/milestone_tracker.json @@ -10429,12 +10429,12 @@ msgstr "" #. Label of the filters_config (Code) field in DocType 'Number Card' #: frappe/desk/doctype/number_card/number_card.json msgid "Filters Configuration" -msgstr "" +msgstr "Szűrők Konfigurálása" #. Label of the filters_display (HTML) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Filters Display" -msgstr "" +msgstr "Szűrők Megjelenítése" #. Label of the filters_editor (HTML) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json @@ -10446,12 +10446,12 @@ msgstr "" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/desk/doctype/number_card/number_card.json msgid "Filters JSON" -msgstr "" +msgstr "JSON Szűrők" #. Label of the filters_section (Section Break) field in DocType 'Number Card' #: frappe/desk/doctype/number_card/number_card.json msgid "Filters Section" -msgstr "" +msgstr "Szűrők Szakasz" #: frappe/public/js/frappe/form/controls/link.js:526 msgid "Filters applied for {0}" @@ -10468,7 +10468,7 @@ msgstr "" #: frappe/public/js/frappe/ui/filters/filter_list.js:133 msgid "Filters {0}" -msgstr "" +msgstr "Szűrők: {0}" #: frappe/public/js/frappe/views/reports/report_view.js:1429 msgid "Filters:" @@ -10488,12 +10488,12 @@ msgstr "" #. Option for the 'Status' (Select) field in DocType 'Submission Queue' #: frappe/core/doctype/submission_queue/submission_queue.json msgid "Finished" -msgstr "" +msgstr "Kész" #. Label of the report_end_time (Datetime) field in DocType 'Prepared Report' #: frappe/core/doctype/prepared_report/prepared_report.json msgid "Finished At" -msgstr "" +msgstr "Befejezve ekkor" #. Label of the first_day_of_the_week (Select) field in DocType 'Language' #. Label of the first_day_of_the_week (Select) field in DocType 'System @@ -10501,7 +10501,7 @@ msgstr "" #: frappe/core/doctype/language/language.json #: frappe/core/doctype/system_settings/system_settings.json msgid "First Day of the Week" -msgstr "" +msgstr "Hét Első Napja" #. Label of the first_name (Data) field in DocType 'Contact' #. Label of the first_name (Data) field in DocType 'User' @@ -10517,7 +10517,7 @@ msgstr "" #. Label of the first_success_message (Data) field in DocType 'Success Action' #: frappe/core/doctype/success_action/success_action.json msgid "First Success Message" -msgstr "" +msgstr "Első Sikeres Üzenet" #: frappe/core/doctype/data_export/exporter.py:185 msgid "First data column must be blank." @@ -10534,7 +10534,7 @@ msgstr "" #. Label of the flag (Data) field in DocType 'Language' #: frappe/core/doctype/language/language.json msgid "Flag" -msgstr "" +msgstr "Zászló" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Fieldtype' (Select) field in DocType 'Report Column' @@ -10549,12 +10549,12 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Float" -msgstr "" +msgstr "Lebegőpontos" #. Label of the float_precision (Select) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Float Precision" -msgstr "" +msgstr "Lebegőpontos Pontossága" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Fieldtype' (Select) field in DocType 'Report Column' @@ -10567,7 +10567,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Fold" -msgstr "" +msgstr "Becsuk" #: frappe/core/doctype/doctype/doctype.py:1451 msgid "Fold can not be at the end of the form" @@ -10582,12 +10582,12 @@ msgstr "" #: frappe/core/doctype/file/file.json #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Folder" -msgstr "" +msgstr "Mappa" #. Label of the folder_name (Data) field in DocType 'IMAP Folder' #: frappe/email/doctype/imap_folder/imap_folder.json msgid "Folder Name" -msgstr "" +msgstr "Mappanév" #: frappe/public/js/frappe/views/file/file_view.js:100 msgid "Folder name should not include '/' (slash)" @@ -10600,7 +10600,7 @@ msgstr "" #. 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:106 #: frappe/public/js/frappe/form/toolbar.js:912 @@ -10638,12 +10638,12 @@ msgstr "" #. Label of the font (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Font" -msgstr "" +msgstr "Betűtípus" #. Label of the font_properties (Data) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "Font Properties" -msgstr "" +msgstr "Betűkészlet Tulajdonságai" #. Label of the font_size (Int) field in DocType 'Print Format' #. Label of the font_size (Float) field in DocType 'Print Settings' @@ -10653,13 +10653,13 @@ msgstr "" #: frappe/public/js/print_format_builder/PrintFormatControls.vue:45 #: frappe/website/doctype/website_theme/website_theme.json msgid "Font Size" -msgstr "" +msgstr "Betűméret" #. Label of the section_break_8 (Section Break) field in DocType 'Print #. Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Fonts" -msgstr "" +msgstr "Betűtípusok" #. Label of the set_footer (Section Break) field in DocType 'Email Account' #. Label of the footer_section (Section Break) field in DocType 'Letter Head' @@ -10672,28 +10672,28 @@ msgstr "" #: frappe/website/doctype/web_template/web_template.json #: frappe/website/doctype/website_settings/website_settings.json msgid "Footer" -msgstr "" +msgstr "Lábléc" #. Label of the footer_powered (Small Text) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Footer \"Powered By\"" -msgstr "" +msgstr "Lábléc „Készítette:”" #. Label of the footer_source (Select) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Footer Based On" -msgstr "" +msgstr "Lábléc Alapján" #. Label of the footer (Text Editor) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Footer Content" -msgstr "" +msgstr "Lábléc Tartalom" #. Label of the footer_details_section (Section Break) field in DocType #. 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Footer Details" -msgstr "" +msgstr "Lábléc Részletek" #. Label of the footer (HTML Editor) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json @@ -10977,12 +10977,12 @@ msgstr "" #. Label of the fraction (Data) field in DocType 'Currency' #: frappe/geo/doctype/currency/currency.json msgid "Fraction" -msgstr "" +msgstr "Törtrész" #. Label of the fraction_units (Int) field in DocType 'Currency' #: frappe/geo/doctype/currency/currency.json msgid "Fraction Units" -msgstr "" +msgstr "Törtrész Egységei" #. Option for the 'Social Login Provider' (Select) field in DocType 'Social #. Login Key' @@ -11092,7 +11092,7 @@ msgstr "" #. Label of the from_date_field (Select) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "From Date Field" -msgstr "" +msgstr "Dátum Mezőtől" #: frappe/public/js/frappe/views/reports/query_report.js:1865 msgid "From Document Type" @@ -11106,7 +11106,7 @@ msgstr "" #. Label of the sender_full_name (Data) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "From Full Name" -msgstr "" +msgstr "Teljes Nevéből" #. Label of the from_user (Link) field in DocType 'Notification Log' #: frappe/desk/doctype/notification_log/notification_log.json @@ -11120,7 +11120,7 @@ msgstr "" #. Option for the 'Width' (Select) field in DocType 'Dashboard Chart Link' #: frappe/desk/doctype/dashboard_chart_link/dashboard_chart_link.json msgid "Full" -msgstr "" +msgstr "Tele" #. Label of the full_name (Data) field in DocType 'Contact' #. Label of the full_name (Data) field in DocType 'Activity Log' @@ -11143,7 +11143,7 @@ msgstr "" #. Label of the full_width (Check) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Full Width" -msgstr "" +msgstr "Teljes Szélesség" #. Label of the function (Select) field in DocType 'Number Card' #. Label of the report_function (Select) field in DocType 'Number Card' @@ -11176,22 +11176,22 @@ msgstr "" #. Option for the 'Method' (Select) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json msgid "GET" -msgstr "" +msgstr "GET" #. 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 msgid "GNU Affero General Public License" -msgstr "" +msgstr "GNU Affero General Public License" #. Option for the 'License Type' (Select) field in DocType 'Package' #: frappe/core/doctype/package/package.json msgid "GNU General Public License" -msgstr "" +msgstr "GNU General Public License" #. Option for the 'Select List View' (Select) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json @@ -11215,7 +11215,7 @@ msgstr "" #: frappe/desk/page/setup_wizard/install_fixtures.py:32 msgid "Genderqueer" -msgstr "" +msgstr "Genderqueer" #: frappe/www/contact.html:29 msgid "General" @@ -11224,7 +11224,7 @@ msgstr "" #. Label of the generate_keys (Button) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Generate Keys" -msgstr "" +msgstr "Kulcsok Generálása" #: frappe/public/js/frappe/views/reports/query_report.js:880 msgid "Generate New Report" @@ -11257,7 +11257,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Geolocation" -msgstr "" +msgstr "Helymeghatározás" #. Name of a DocType #: frappe/integrations/doctype/geolocation_settings/geolocation_settings.json @@ -11275,7 +11275,7 @@ msgstr "" #. Label of the get_contacts (Button) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json msgid "Get Contacts" -msgstr "" +msgstr "Kapcsolattartók Lekérése" #: frappe/website/doctype/web_form/web_form.js:93 msgid "Get Fields" @@ -11301,7 +11301,7 @@ msgstr "" #. Naming Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Get a preview of generated names with a series." -msgstr "" +msgstr "A generált nevek előnézete egy sorozattal." #: frappe/public/js/frappe/list/list_sidebar.js:309 msgid "Get more insights with" @@ -11311,23 +11311,23 @@ msgstr "" #. DocType 'Notification Settings' #: frappe/desk/doctype/notification_settings/notification_settings.json msgid "Get notified when an email is received on any of the documents assigned to you." -msgstr "" +msgstr "Értesítést kap, ha az Önhöz rendelt dokumentumok bármelyikéről e-mail érkezik." #. Description of the 'User Image' (Attach Image) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Get your globally recognized avatar from Gravatar.com" -msgstr "" +msgstr "Kérje le a világszerte elismert avatarját a Gravatar.com-ról" #. Label of the git_branch (Data) field in DocType 'Installed Application' #: frappe/core/doctype/installed_application/installed_application.json msgid "Git Branch" -msgstr "" +msgstr "Git Branch" #. Option for the 'Social Login Provider' (Select) field in DocType 'Social #. 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" @@ -11372,7 +11372,7 @@ msgstr "" #. Option for the 'Action' (Select) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Go to Page" -msgstr "" +msgstr "Ugrás az Oldalra" #: frappe/public/js/workflow_builder/workflow_builder.bundle.js:41 msgid "Go to Workflow" @@ -11397,7 +11397,7 @@ msgstr "" #. Description of the 'Success URL' (Data) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Go to this URL after completing the form" -msgstr "" +msgstr "Az űrlap kitöltése után látogasson el az URL-re" #: frappe/core/doctype/doctype/doctype.js:54 #: frappe/custom/doctype/client_script/client_script.js:12 @@ -11424,18 +11424,18 @@ msgstr "" #. 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 msgid "Google Analytics ID" -msgstr "" +msgstr "Google Analytics Azonosító" #. Label of the google_analytics_anonymize_ip (Check) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Google Analytics anonymise IP" -msgstr "" +msgstr "Google Analytics anonimizálja az IP-címet" #. Label of the sb_00 (Section Break) field in DocType 'Event' #. Label of the google_calendar (Link) field in DocType 'Event' @@ -11462,7 +11462,7 @@ msgstr "" #: frappe/integrations/doctype/google_calendar/google_calendar.py:252 msgid "Google Calendar - Could not find Calendar for {0}, error code {1}." -msgstr "" +msgstr "Google Naptár - Nem található a naptár a következőhöz: {0}, hibakód: {1}." #: frappe/integrations/doctype/google_contacts/google_contacts.py:232 msgid "Google Calendar - Could not insert contact in Google Contacts {0}, error code {1}." @@ -11479,14 +11479,14 @@ msgstr "" #. Label of the google_calendar_event_id (Data) field in DocType 'Event' #: frappe/desk/doctype/event/event.json msgid "Google Calendar Event ID" -msgstr "" +msgstr "Google Naptár Esemény Azonosító" #. Label of the google_calendar_id (Data) field in DocType 'Event' #. Label of the google_calendar_id (Data) field in DocType 'Google Calendar' #: frappe/desk/doctype/event/event.json #: frappe/integrations/doctype/google_calendar/google_calendar.json msgid "Google Calendar ID" -msgstr "" +msgstr "Google Naptár Azonosító" #: frappe/integrations/doctype/google_calendar/google_calendar.py:181 msgid "Google Calendar has been configured." @@ -11514,7 +11514,7 @@ msgstr "" #. Label of the google_contacts_id (Data) field in DocType 'Contact' #: frappe/contacts/doctype/contact/contact.json msgid "Google Contacts Id" -msgstr "" +msgstr "Google Névjegy Azonosító" #: frappe/public/js/frappe/file_uploader/FileUploader.vue:164 msgid "Google Drive" @@ -11524,13 +11524,13 @@ msgstr "" #. Settings' #: frappe/integrations/doctype/google_settings/google_settings.json msgid "Google Drive Picker" -msgstr "" +msgstr "Google Drive választó" #. Label of the google_drive_picker_enabled (Check) field in DocType 'Google #. Settings' #: frappe/integrations/doctype/google_settings/google_settings.json msgid "Google Drive Picker Enabled" -msgstr "" +msgstr "Google Drive választó engedélyezve" #. Label of the font (Data) field in DocType 'Print Format' #. Label of the google_font (Data) field in DocType 'Website Theme' @@ -11538,12 +11538,12 @@ msgstr "" #: frappe/public/js/print_format_builder/PrintFormatControls.vue:28 #: frappe/website/doctype/website_theme/website_theme.json msgid "Google Font" -msgstr "" +msgstr "Google Betűtípus" #. Label of the google_meet_link (Small Text) field in DocType 'Event' #: frappe/desk/doctype/event/event.json msgid "Google Meet Link" -msgstr "" +msgstr "Google Meet Link" #. Label of a Card Break in the Integrations Workspace #: frappe/integrations/workspace/integrations/integrations.json @@ -11569,7 +11569,7 @@ msgstr "" #. Label of the grant_type (Select) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Grant Type" -msgstr "" +msgstr "Hozzáférés Típusa" #: frappe/public/js/frappe/form/dashboard.js:34 #: frappe/public/js/frappe/form/templates/form_dashboard.html:10 @@ -11581,7 +11581,7 @@ msgstr "" #: frappe/core/doctype/doctype_state/doctype_state.json #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Gray" -msgstr "" +msgstr "Szürke" #: frappe/public/js/frappe/ui/filters/filter.js:23 msgid "Greater Than" @@ -11596,7 +11596,7 @@ msgstr "" #: frappe/core/doctype/doctype_state/doctype_state.json #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Green" -msgstr "" +msgstr "Zöld" #: frappe/public/js/form_builder/components/controls/TableControl.vue:53 msgid "Grid Empty State" @@ -11918,12 +11918,12 @@ msgstr "" #. Label of the help_html (HTML) field in DocType 'Document Naming Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Help HTML" -msgstr "" +msgstr "Súgó HTML" #. Description of the 'Content' (Text Editor) field in DocType 'Note' #: frappe/desk/doctype/note/note.json msgid "Help: To link to another record in the system, use \"/app/note/[Note Name]\" as the Link URL. (don't use \"http://\")" -msgstr "" +msgstr "Segítség: A rendszer egy másik rekordjára való hivatkozáshoz használja a \"/app/note/[jegyzet neve]\" URL-címet a hivatkozás URL-jeként. (ne használja a \"http://\" előtagot)" #. Label of the helpful (Int) field in DocType 'Help Article' #: frappe/website/doctype/help_article/help_article.json @@ -11933,12 +11933,12 @@ msgstr "" #. Option for the 'Font' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Helvetica" -msgstr "" +msgstr "Helvetica" #. 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:1870 msgid "Here's your tracking URL" @@ -11974,7 +11974,7 @@ msgstr "" #. Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Hidden Fields" -msgstr "" +msgstr "Rejtett Mezők" #: frappe/public/js/frappe/views/reports/query_report.js:1667 msgid "Hidden columns include: {0}" @@ -11993,7 +11993,7 @@ msgstr "" #. Label of the hide_block (Check) field in DocType 'Web Page Block' #: frappe/website/doctype/web_page_block/web_page_block.json msgid "Hide Block" -msgstr "" +msgstr "Blokk Elrejtése" #. Label of the hide_border (Check) field in DocType 'DocField' #. Label of the hide_border (Check) field in DocType 'Custom Field' @@ -12002,19 +12002,19 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Hide Border" -msgstr "" +msgstr "Szegély Elrejtése" #. Label of the hide_buttons (Check) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Hide Buttons" -msgstr "" +msgstr "Gombok Elrejtése" #. Label of the allow_copy (Check) field in DocType 'DocType' #. Label of the allow_copy (Check) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Hide Copy" -msgstr "" +msgstr "Másolat Rejtése" #. Label of the hide_custom (Check) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json @@ -12028,7 +12028,7 @@ msgstr "Az egyedi DocType-ok és Jelentések elrejtése" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Hide Days" -msgstr "" +msgstr "Napok Rejtése" #. Label of the hide_descendants (Check) field in DocType 'User Permission' #: frappe/core/doctype/user_permission/user_permission.json @@ -12053,7 +12053,7 @@ msgstr "" #. Label of the hide_login (Check) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Hide Login" -msgstr "" +msgstr "Bejelentkezés Elrejtése" #: frappe/public/js/form_builder/form_builder.bundle.js:43 #: frappe/public/js/print_format_builder/print_format_builder.bundle.js:54 @@ -12063,7 +12063,7 @@ msgstr "" #. Description of the 'Hide Buttons' (Check) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Hide Previous, Next and Close button on highlight dialog." -msgstr "" +msgstr "Előző, Következő és Bezárás gomb elrejtése a kiemelési párbeszédpanelen." #: frappe/public/js/frappe/list/list_filter.js:94 msgid "Hide Saved" @@ -12076,17 +12076,17 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Hide Seconds" -msgstr "" +msgstr "Másodpercek Elrejtése" #. Label of the hide_toolbar (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Hide Sidebar, Menu, and Comments" -msgstr "" +msgstr "Oldalsáv, menü és megjegyzések elrejtése" #. Label of the hide_standard_menu (Check) field in DocType 'Portal Settings' #: frappe/website/doctype/portal_settings/portal_settings.json msgid "Hide Standard Menu" -msgstr "" +msgstr "Alapértelmezett Menü Elrejtése" #: frappe/public/js/frappe/list/list_view.js:1858 msgid "Hide Tags" @@ -12115,12 +12115,12 @@ msgstr "" #. 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Hide footer in auto email reports" -msgstr "" +msgstr "Lábléc elrejtése az automatikus e-mail jelentésekben" #. Label of the hide_footer_signup (Check) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Hide footer signup" -msgstr "" +msgstr "Regisztráció elrejtése a láblécben" #. Label of the hide_navbar (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json @@ -12136,12 +12136,12 @@ msgstr "" #. Description of the 'Priority' (Int) field in DocType 'Assignment Rule' #: frappe/automation/doctype/assignment_rule/assignment_rule.json msgid "Higher priority rule will be applied first" -msgstr "" +msgstr "A magasabb prioritású szabály kerül először alkalmazásra" #. Label of the highlight (Text) field in DocType 'Company History' #: frappe/website/doctype/company_history/company_history.json msgid "Highlight" -msgstr "" +msgstr "Fontos események" #: frappe/www/update-password.html:301 msgid "Hint: Include symbols, numbers and capital letters in the password" @@ -12165,12 +12165,12 @@ msgstr "" #: frappe/core/doctype/role/role.json #: frappe/website/doctype/website_settings/website_settings.json msgid "Home Page" -msgstr "" +msgstr "Kezdőlap" #. Label of the home_settings (Code) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Home Settings" -msgstr "" +msgstr "Kezdőlap Beállítások" #: frappe/core/doctype/file/test_file.py:321 #: frappe/core/doctype/file/test_file.py:323 @@ -12193,14 +12193,14 @@ msgstr "" #: frappe/core/doctype/server_script/server_script.json #: frappe/core/doctype/user/user.json msgid "Hourly" -msgstr "" +msgstr "Óránként" #. Option for the 'Frequency' (Select) field in DocType 'Scheduled Job Type' #. Option for the 'Event Frequency' (Select) field in DocType 'Server Script' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json #: frappe/core/doctype/server_script/server_script.json msgid "Hourly Long" -msgstr "" +msgstr "Óránként Hosszú" #. Option for the 'Frequency' (Select) field in DocType 'Scheduled Job Type' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json @@ -12211,7 +12211,7 @@ msgstr "" #. DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Hourly rate limit for generating password reset links" -msgstr "" +msgstr "Jelszó-visszaállítási linkek generálásának óránkénti limite" #: frappe/public/js/frappe/form/controls/duration.js:29 msgctxt "Duration" @@ -12221,7 +12221,7 @@ msgstr "" #. Description of the 'Number Format' (Select) field in DocType 'Currency' #: frappe/geo/doctype/currency/currency.json msgid "How should this currency be formatted? If not set, will use system defaults" -msgstr "" +msgstr "Hogyan kell ezt a pénznemet formázni? Ha nincs beállítva, akkor használja a rendszer alapértelmezettet" #. Description of the 'Resource Name' (Data) field in DocType 'OAuth Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json @@ -12231,7 +12231,7 @@ msgstr "" #. Paragraph text in the Welcome Workspace Workspace #: frappe/core/workspace/welcome_workspace/welcome_workspace.json msgid "I guess you don't have access to any workspace yet, but you can create one just for yourself. Click on the Create Workspace button to create one.
" -msgstr "" +msgstr "Úgy tűnik, nincs hozzáférése semmilyen munkaterülethez, de létrehozhat egyet magának. Kattintson a Munkatér létrehozása gombra, ha szeretne létrehozni egyet.
" #. Label of the id (Data) field in DocType 'User Session Display' #: frappe/core/doctype/data_import/importer.py:1174 @@ -12630,25 +12630,25 @@ msgstr "" #: frappe/website/doctype/web_page/web_page.json #: frappe/website/doctype/website_slideshow_item/website_slideshow_item.json msgid "Image" -msgstr "" +msgstr "Kép" #. Label of the image_field (Data) field in DocType 'DocType' #. Label of the image_field (Data) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Image Field" -msgstr "" +msgstr "Képmező" #. Label of the image_height (Float) field in DocType 'Letter Head' #. Label of the footer_image_height (Float) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Image Height" -msgstr "" +msgstr "Kép Magasság" #. Label of the image_link (Attach) field in DocType 'About Us Team Member' #: frappe/website/doctype/about_us_team_member/about_us_team_member.json msgid "Image Link" -msgstr "" +msgstr "Képhivatkozás" #: frappe/public/js/frappe/list/base_list.js:208 msgid "Image View" @@ -12658,7 +12658,7 @@ msgstr "" #. Label of the footer_image_width (Float) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Image Width" -msgstr "" +msgstr "Kép Szélesség" #: frappe/core/doctype/doctype/doctype.py:1507 msgid "Image field must be a valid fieldname" @@ -12969,7 +12969,7 @@ msgstr "" #. Account' #: frappe/email/doctype/email_account/email_account.json msgid "Incoming (POP/IMAP) Settings" -msgstr "" +msgstr "Bejövő (POP/IMAP) Beállítások" #. Label of the incoming_emails_last_7_days_column (Column Break) field in #. DocType 'System Health Report' @@ -12982,13 +12982,13 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "Incoming Server" -msgstr "" +msgstr "Bejövő Szerver" #. Label of the mailbox_settings (Section Break) field in DocType 'Email #. Domain' #: frappe/email/doctype/email_domain/email_domain.json msgid "Incoming Settings" -msgstr "" +msgstr "Bejövő E-mail Beállítások" #: frappe/email/doctype/email_domain/email_domain.py:32 msgid "Incoming email account not correct" @@ -13020,11 +13020,11 @@ msgstr "" #: frappe/model/document.py:1584 msgid "Incorrect value in row {0}:" -msgstr "" +msgstr "Helytelen érték a {0} sorban:" #: frappe/model/document.py:1586 msgid "Incorrect value:" -msgstr "" +msgstr "Helytelen érték:" #. Label of the indent (Check) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json @@ -13046,7 +13046,7 @@ msgstr "" #. Label of the index_web_pages_for_search (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Index Web Pages for Search" -msgstr "" +msgstr "Weboldalak Indexelése a Kereséshez" #: frappe/core/doctype/recorder/recorder.py:132 msgid "Index created successfully on column {0} of doctype {1}" @@ -13062,17 +13062,17 @@ msgstr "Hitelesítési kód indexelése" #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Indexing refresh token" -msgstr "" +msgstr "Frissítési token indexelése" #. Label of the indicator (Select) field in DocType 'Kanban Board Column' #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Indicator" -msgstr "" +msgstr "Indikátor" #. Label of the indicator_color (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "Indicator Color" -msgstr "" +msgstr "Jelzőszín" #: frappe/public/js/frappe/views/workspace/workspace.js:486 msgid "Indicator color" @@ -13083,7 +13083,7 @@ msgstr "" #: frappe/core/doctype/comment/comment.json #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Info" -msgstr "" +msgstr "Infó" #: frappe/core/doctype/data_export/exporter.py:144 msgid "Info:" @@ -13092,12 +13092,12 @@ msgstr "" #. Label of the initial_sync_count (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Initial Sync Count" -msgstr "" +msgstr "Kezdeti Szinkronizálási Számláló" #. 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 @@ -13141,12 +13141,12 @@ msgstr "" #. Option for the 'Import Type' (Select) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Insert New Records" -msgstr "" +msgstr "Új Rekordok Beszúrása" #. Label of the insert_style (Check) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Insert Style" -msgstr "" +msgstr "Stílus Beszúrása" #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Instagram" @@ -13177,7 +13177,7 @@ msgstr "" #. Label of the instructions (HTML) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Instructions" -msgstr "" +msgstr "Utasítások" #: frappe/templates/includes/login/login.js:261 msgid "Instructions Emailed" @@ -13218,7 +13218,7 @@ msgstr "" #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Int" -msgstr "" +msgstr "Int" #. Name of a DocType #: frappe/integrations/doctype/integration_request/integration_request.json @@ -13238,12 +13238,12 @@ msgstr "" #. 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Integrations can use this field to set email delivery status" -msgstr "" +msgstr "Integrációk használhatják ezt a mezőt az e-mail kézbesítés állapotának beállításához" #. Option for the 'Font' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Inter" -msgstr "" +msgstr "Inter" #. Label of the interest (Small Text) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -13748,7 +13748,7 @@ msgstr "" #. Label of the is_completed (Check) field in DocType 'Email Flag Queue' #: frappe/email/doctype/email_flag_queue/email_flag_queue.json msgid "Is Completed" -msgstr "" +msgstr "Teljesítve" #. Label of the is_current (Check) field in DocType 'User Session Display' #: frappe/core/doctype/user_session_display/user_session_display.json @@ -13765,7 +13765,7 @@ msgstr "Egyedi" #. Label of the is_custom_field (Check) field in DocType 'Customize Form Field' #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Is Custom Field" -msgstr "" +msgstr "Egyedi Mező" #. Label of the is_default (Check) field in DocType 'Address Template' #. Label of the is_default (Check) field in DocType 'User Permission' @@ -13785,7 +13785,7 @@ msgstr "Dinamikus URL?" #. Label of the is_folder (Check) field in DocType 'File' #: frappe/core/doctype/file/file.json msgid "Is Folder" -msgstr "" +msgstr "Mappa" #: frappe/public/js/frappe/list/list_filter.js:43 msgid "Is Global" @@ -13803,23 +13803,23 @@ msgstr "Rejtett" #. Label of the is_home_folder (Check) field in DocType 'File' #: frappe/core/doctype/file/file.json msgid "Is Home Folder" -msgstr "" +msgstr "Saját Mappa" #. Label of the reqd (Check) field in DocType 'Custom Field' #: frappe/custom/doctype/custom_field/custom_field.json msgid "Is Mandatory Field" -msgstr "" +msgstr "Kötelező Mező" #. Label of the is_optional_state (Check) field in DocType 'Workflow Document #. State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Is Optional State" -msgstr "" +msgstr "Opcionális Állapot" #. Label of the is_primary (Check) field in DocType 'Contact Email' #: frappe/contacts/doctype/contact_email/contact_email.json msgid "Is Primary" -msgstr "" +msgstr "Elsődleges" #: frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.py:43 msgid "Is Primary Address" @@ -13829,34 +13829,34 @@ msgstr "" #: frappe/contacts/doctype/contact/contact.json #: frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.py:49 msgid "Is Primary Contact" -msgstr "" +msgstr "Elsődleges Kapcsolat" #. Label of the is_primary_mobile_no (Check) field in DocType 'Contact Phone' #: frappe/contacts/doctype/contact_phone/contact_phone.json msgid "Is Primary Mobile" -msgstr "" +msgstr "Elsődleges Mobilszám" #. Label of the is_primary_phone (Check) field in DocType 'Contact Phone' #: frappe/contacts/doctype/contact_phone/contact_phone.json msgid "Is Primary Phone" -msgstr "" +msgstr "Elsődleges Telefonszám" #. Label of the is_private (Check) field in DocType 'File' #: frappe/core/doctype/file/file.json msgid "Is Private" -msgstr "" +msgstr "Privát" #. Label of the is_public (Check) field in DocType 'Dashboard Chart' #. Label of the is_public (Check) field in DocType 'Number Card' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/desk/doctype/number_card/number_card.json msgid "Is Public" -msgstr "" +msgstr "Nyilvános" #. Label of the is_published_field (Data) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Is Published Field" -msgstr "" +msgstr "Közzétéve Mező" #: frappe/core/doctype/doctype/doctype.py:1516 msgid "Is Published Field must be a valid fieldname" @@ -13891,12 +13891,12 @@ msgstr "" #. Label of the is_skipped (Check) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Is Skipped" -msgstr "" +msgstr "Átugrott" #. Label of the is_spam (Check) field in DocType 'Email Rule' #: frappe/email/doctype/email_rule/email_rule.json msgid "Is Spam" -msgstr "" +msgstr "Levélszemét" #. Label of the is_standard (Check) field in DocType 'Navbar Item' #. Label of the is_standard (Select) field in DocType 'Report' @@ -13915,7 +13915,7 @@ msgstr "" #: frappe/desk/doctype/number_card/number_card.json #: frappe/email/doctype/notification/notification.json msgid "Is Standard" -msgstr "" +msgstr "Szabványos" #. Label of the is_submittable (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -13936,7 +13936,7 @@ msgstr "Rendszer Által Generált" #. Label of the istable (Check) field in DocType 'Customize Form' #: frappe/custom/doctype/customize_form/customize_form.json msgid "Is Table" -msgstr "" +msgstr "Táblázat" #. Label of the is_table_field (Check) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json @@ -13946,12 +13946,12 @@ msgstr "Tábla Mező" #. Label of the is_tree (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Is Tree" -msgstr "" +msgstr "Fa" #. Label of the is_unique (Data) field in DocType 'Web Page View' #: frappe/website/doctype/web_page_view/web_page_view.json msgid "Is Unique" -msgstr "" +msgstr "Egyedi" #. Label of the is_virtual (Check) field in DocType 'DocType' #. Label of the is_virtual (Check) field in DocType 'Custom Field' @@ -13960,7 +13960,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Is Virtual" -msgstr "" +msgstr "Virtuális" #. Label of the is_standard (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json @@ -13974,12 +13974,12 @@ msgstr "" #. Label of the item_label (Data) field in DocType 'Navbar Item' #: frappe/core/doctype/navbar_item/navbar_item.json msgid "Item Label" -msgstr "" +msgstr "Tétel címke" #. Label of the item_type (Select) field in DocType 'Navbar Item' #: frappe/core/doctype/navbar_item/navbar_item.json msgid "Item Type" -msgstr "" +msgstr "Tétel Típusa" #: frappe/utils/nestedset.py:229 msgid "Item cannot be added to its own descendants" @@ -13993,12 +13993,12 @@ msgstr "" #. Option for the 'Print Format Type' (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "JS" -msgstr "" +msgstr "JS" #. Label of the js_message (HTML) field in DocType 'Custom HTML Block' #: frappe/desk/doctype/custom_html_block/custom_html_block.json msgid "JS Message" -msgstr "" +msgstr "JS Üzenet" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Label of the json (Code) field in DocType 'Report' @@ -14011,12 +14011,12 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/integrations/doctype/webhook/webhook.json msgid "JSON" -msgstr "" +msgstr "JSON" #. Label of the webhook_json (Code) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "JSON Request Body" -msgstr "" +msgstr "JSON Kérési Törzse" #: frappe/templates/signup.html:5 msgid "Jane Doe" @@ -14025,12 +14025,12 @@ msgstr "" #. Label of the js (Code) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "JavaScript" -msgstr "" +msgstr "JavaScript" #. Description of the 'Javascript' (Code) field in DocType 'Report' #: frappe/core/doctype/report/report.json msgid "JavaScript Format: frappe.query_reports['REPORTNAME'] = {}" -msgstr "" +msgstr "JavaScript Formátum: frappe.query_reports ['JELENTÉSNÉV'] = {}" #. Label of the javascript (Code) field in DocType 'Report' #. Label of the javascript_section (Section Break) field in DocType 'Custom @@ -14042,7 +14042,7 @@ msgstr "" #: frappe/website/doctype/web_page/web_page.json #: frappe/website/doctype/website_script/website_script.json msgid "Javascript" -msgstr "" +msgstr "Javascript" #: frappe/www/login.html:74 msgid "Javascript is disabled on your browser" @@ -14051,7 +14051,7 @@ msgstr "" #. Option for the 'Print Format Type' (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Jinja" -msgstr "" +msgstr "Jinja" #. Label of the job_id (Data) field in DocType 'Prepared Report' #. Label of the job_id (Data) field in DocType 'RQ Job' @@ -14180,7 +14180,7 @@ msgstr "" #: frappe/integrations/doctype/webhook_header/webhook_header.json #: frappe/website/doctype/website_meta_tag/website_meta_tag.json msgid "Key" -msgstr "" +msgstr "Kulcs" #. Label of a standard help item #. Type: Action @@ -14645,7 +14645,7 @@ msgstr "" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Ledger" -msgstr "" +msgstr "Főkönyv" #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #. Option for the 'Align' (Select) field in DocType 'Letter Head' diff --git a/frappe/locale/sl.po b/frappe/locale/sl.po index 3654cf066b..2f6b835a1b 100644 --- a/frappe/locale/sl.po +++ b/frappe/locale/sl.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" "POT-Creation-Date: 2025-11-30 09:34+0000\n" -"PO-Revision-Date: 2025-12-03 15:04\n" +"PO-Revision-Date: 2025-12-07 17:11\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Slovenian\n" "MIME-Version: 1.0\n" @@ -775,40 +775,42 @@ msgstr "Polje z imenom {0} že obstaja v {1}" #: frappe/core/doctype/file/file.py:269 msgid "A file with same name {} already exists" -msgstr "" +msgstr "Datoteka z istim imenom {} že obstaja" #. Description of the 'Scopes' (Text) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "A list of resources which the Client App will have access to after the user allows it.
e.g. project" -msgstr "" +msgstr "Seznam virov, do katerih bo imela odjemalska aplikacija dostop, ko uporabnik to dovoli.
npr. projekt" #: frappe/templates/emails/new_user.html:5 msgid "A new account has been created for you at {0}" -msgstr "" +msgstr "Za vas je bil ustvarjen nov račun na {0}" #: frappe/automation/doctype/auto_repeat/auto_repeat.py:431 msgid "A recurring {0} {1} has been created for you via Auto Repeat {2}." -msgstr "" +msgstr "Ponavljajoči se {0} {1} je bil za vas ustvarjen prek storitve Samodejno ponavljanje {2}." #. Description of the 'Symbol' (Data) field in DocType 'Currency' #: frappe/geo/doctype/currency/currency.json msgid "A symbol for this currency. For e.g. $" -msgstr "" +msgstr "Simbol za to valuto. Npr. $" #: frappe/printing/doctype/print_format_field_template/print_format_field_template.py:49 msgid "A template already exists for field {0} of {1}" -msgstr "" +msgstr "Predloga za polje {0} od {1} že obstaja" #. Description of the 'Software Version' (Data) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "A version identifier string for the client software.\n" "
\n" "The value of the should change on any update of the client software with the same Software ID." -msgstr "" +msgstr "Niz identifikatorja različice za odjemalsko programsko opremo.\n" +"
\n" +"Vrednost se mora spremeniti ob vsaki posodobitvi odjemalske programske opreme z istim identifikatorjem programske opreme." #: frappe/utils/password_strength.py:169 msgid "A word by itself is easy to guess." -msgstr "" +msgstr "Besedo samo po sebi je enostavno uganiti." #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json @@ -883,7 +885,7 @@ msgstr "Končna točka API" #. Label of the api_endpoint_args (Code) field in DocType 'Social Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "API Endpoint Args" -msgstr "" +msgstr "Končne točke API Args" #: frappe/integrations/doctype/social_login_key/social_login_key.py:102 msgid "API Endpoint Args should be valid JSON" @@ -1579,7 +1581,7 @@ msgstr "" #: frappe/contacts/doctype/address/address.py:205 msgid "Addresses" -msgstr "" +msgstr "Naslovi" #. Name of a report #: frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.json @@ -2005,7 +2007,7 @@ msgstr "" #. Label of the allow_events_in_timeline (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Allow events in timeline" -msgstr "" +msgstr "Dovoli dogodke na časovnici" #. Label of the allow_in_quick_entry (Check) field in DocType 'DocField' #. Label of the allow_in_quick_entry (Check) field in DocType 'Custom Field' @@ -2020,12 +2022,12 @@ msgstr "Dovoli v Hitrem Vnosu" #. Label of the allow_incomplete (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Allow incomplete forms" -msgstr "" +msgstr "Dovoli nepopolne obrazce" #. Label of the allow_multiple (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Allow multiple responses" -msgstr "" +msgstr "Dovoli več odgovorov" #. Label of the allow_on_submit (Check) field in DocType 'DocField' #. Label of the allow_on_submit (Check) field in DocType 'Custom Field' @@ -2040,13 +2042,13 @@ msgstr "Dovoli ob Oddaji" #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Allow only one session per user" -msgstr "" +msgstr "Dovoli samo eno sejo na uporabnika" #. Label of the allow_page_break_inside_tables (Check) field in DocType 'Print #. Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Allow page break inside tables" -msgstr "" +msgstr "Dovoli prelom strani znotraj tabel" #. Label of the allow_print (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json @@ -2055,27 +2057,27 @@ msgstr "Dovoli Tiskanje" #: frappe/desk/page/setup_wizard/setup_wizard.js:431 msgid "Allow recording my first session to improve user experience" -msgstr "" +msgstr "Dovoli snemanje moje prve seje za izboljšanje uporabniške izkušnje" #. Description of the 'Allow incomplete forms' (Check) field in DocType 'Web #. Form' #: frappe/website/doctype/web_form/web_form.json msgid "Allow saving if mandatory fields are not filled" -msgstr "" +msgstr "Dovoli shranjevanje, če obvezna polja niso izpolnjena" #: frappe/desk/page/setup_wizard/setup_wizard.js:424 msgid "Allow sending usage data for improving applications" -msgstr "" +msgstr "Dovoli pošiljanje podatkov o uporabi za izboljšanje aplikacij" #. Description of the 'Login After' (Int) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Allow user to login only after this hour (0-24)" -msgstr "" +msgstr "Dovoli uporabniku prijavo šele po tej uri (0–24)" #. Description of the 'Login Before' (Int) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Allow user to login only before this hour (0-24)" -msgstr "" +msgstr "Dovoli uporabniku prijavo samo pred to uro (0–24)" #. Description of the 'Login with email link' (Check) field in DocType 'System #. Settings' @@ -2408,11 +2410,11 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/imap_folder/imap_folder.json msgid "Append To" -msgstr "" +msgstr "Dodaj k" #: frappe/email/doctype/email_account/email_account.py:202 msgid "Append To can be one of {0}" -msgstr "" +msgstr "Dodaj k je lahko eden od {0}" #. Description of the 'Append To' (Link) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json @@ -2633,7 +2635,7 @@ msgstr "" #: frappe/core/doctype/document_naming_rule/document_naming_rule.js:16 #: frappe/core/doctype/user_permission/user_permission_list.js:165 msgid "Are you sure?" -msgstr "" +msgstr "Ste prepričani?" #. Label of the arguments (Code) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json @@ -2960,7 +2962,7 @@ msgstr "" #. Name of a DocType #: frappe/core/doctype/audit_trail/audit_trail.json msgid "Audit Trail" -msgstr "" +msgstr "Revizijska sled" #. Label of the auth_url_data (Code) field in DocType 'Social Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json @@ -3054,7 +3056,7 @@ msgstr "" #. Label of the authorize_url (Data) field in DocType 'Social Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Authorize URL" -msgstr "" +msgstr "Avtoriziraj URL" #. Option for the 'Status' (Select) field in DocType 'Integration Request' #: frappe/integrations/doctype/integration_request/integration_request.json @@ -3096,7 +3098,7 @@ msgstr "Samodejno Ponavljanje" #. Name of a DocType #: frappe/automation/doctype/auto_repeat_day/auto_repeat_day.json msgid "Auto Repeat Day" -msgstr "" +msgstr "Dan samodejnega ponavljanja" #: frappe/automation/doctype/auto_repeat/auto_repeat.py:173 msgid "Auto Repeat Day{0} {1} has been repeated." @@ -3190,13 +3192,13 @@ msgstr "" #. 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Automated Message" -msgstr "" +msgstr "Samodejno sporočilo" #. Option for the 'Desk Theme' (Select) field in DocType 'User' #: frappe/core/doctype/user/user.json #: frappe/public/js/frappe/ui/theme_switcher.js:69 msgid "Automatic" -msgstr "" +msgstr "Samodejno" #: frappe/email/doctype/email_account/email_account.py:772 msgid "Automatic Linking can be activated only for one Email Account." @@ -3275,7 +3277,7 @@ msgstr "Odlično, zdaj pa poskusite sami ustvariti vnos" #. Option for the 'Navbar Style' (Select) field in DocType 'Desktop Settings' #: frappe/desk/doctype/desktop_settings/desktop_settings.json msgid "Awesomebar" -msgstr "" +msgstr "Awesomebar" #: frappe/public/js/frappe/utils/number_systems.js:9 msgctxt "Number system" @@ -3385,7 +3387,7 @@ msgstr "Slika Ozadja" #. Label of a chart in the System Workspace #: frappe/core/workspace/system/system.json msgid "Background Job Activity" -msgstr "" +msgstr "Dejavnost opravila v ozadju" #. Label of a Link in the Build Workspace #. Label of the background_jobs_section (Section Break) field in DocType @@ -3400,16 +3402,16 @@ msgstr "Ozadna Dela" #. Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Background Jobs Check" -msgstr "" +msgstr "Preverjanje delovnih mest v ozadju" #. Label of the background_jobs_queue (Autocomplete) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "Background Jobs Queue" -msgstr "" +msgstr "Čakalna vrsta opravil v ozadju" #: frappe/public/js/frappe/list/bulk_operations.js:87 msgid "Background Print (required for >25 documents)" -msgstr "" +msgstr "Tisk v ozadju (potrebno za >25 dokumentov)" #. Label of the background_workers (Section Break) field in DocType 'System #. Settings' @@ -3418,7 +3420,7 @@ msgstr "" #: frappe/core/doctype/system_settings/system_settings.json #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Background Workers" -msgstr "" +msgstr "Delavci v ozadju" #: frappe/desk/page/backups/backups.js:28 msgid "Backup Encryption Key" @@ -3578,26 +3580,26 @@ msgstr "" #. Option for the 'DocType Event' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "Before Submit" -msgstr "" +msgstr "Pred Oddajo" #. Option for the 'DocType Event' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "Before Validate" -msgstr "" +msgstr "Pred Potrditvijo" #. Option for the 'Level' (Select) field in DocType 'Help Article' #: frappe/website/doctype/help_article/help_article.json msgid "Beginner" -msgstr "" +msgstr "Začetnik" #: frappe/public/js/frappe/form/link_selector.js:29 msgid "Beginning with" -msgstr "" +msgstr "Začenši z" #. Label of the beta (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Beta" -msgstr "" +msgstr "Beta" #: frappe/utils/password_strength.py:73 msgid "Better add a few more letters or another word" @@ -3605,7 +3607,7 @@ msgstr "" #: frappe/public/js/frappe/ui/filters/filter.js:27 msgid "Between" -msgstr "" +msgstr "Med" #. Option for the 'Address Type' (Select) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json @@ -3781,7 +3783,7 @@ msgstr "" #. Name of a Workspace #: frappe/core/workspace/build/build.json msgid "Build" -msgstr "" +msgstr "Zgradi" #. Description of a Card Break in the Build Workspace #: frappe/core/workspace/build/build.json @@ -3790,45 +3792,45 @@ msgstr "" #: frappe/workflow/doctype/workflow/workflow_list.js:18 msgid "Build {0}" -msgstr "" +msgstr "+ {0}" #: frappe/templates/includes/footer/footer_powered.html:1 msgid "Built on {0}" -msgstr "" +msgstr "Zgrajeno na {0}" #. Label of the bulk_actions (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Bulk Actions" -msgstr "" +msgstr "Množična dejanja" #: frappe/core/doctype/user_permission/user_permission_list.js:142 msgid "Bulk Delete" -msgstr "" +msgstr "Množično brisanje" #: frappe/public/js/frappe/list/bulk_operations.js:321 msgid "Bulk Edit" -msgstr "" +msgstr "Množično urejanje" #: frappe/public/js/frappe/form/grid.js:1211 msgid "Bulk Edit {0}" -msgstr "" +msgstr "Množično urejanje {0}" #: frappe/desk/reportview.py:643 msgid "Bulk Operation Failed" -msgstr "" +msgstr "Množična operacija ni uspela" #: frappe/desk/reportview.py:647 msgid "Bulk Operation Successful" -msgstr "" +msgstr "Množična operacija je uspešna" #: frappe/public/js/frappe/list/bulk_operations.js:131 msgid "Bulk PDF Export" -msgstr "" +msgstr "Množično izvažanje PDF" #. Name of a DocType #: frappe/desk/doctype/bulk_update/bulk_update.json msgid "Bulk Update" -msgstr "" +msgstr "Množična posodobitev" #: frappe/model/workflow.py:310 msgid "Bulk approval only support up to 500 documents." @@ -3853,17 +3855,17 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Button" -msgstr "" +msgstr "Gumb" #. Label of the button_gradients (Check) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "Button Gradients" -msgstr "" +msgstr "Gradienti gumbov" #. Label of the button_rounded_corners (Check) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "Button Rounded Corners" -msgstr "" +msgstr "Zaobljeni vogali gumba" #. Label of the button_shadows (Check) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json @@ -3921,7 +3923,7 @@ msgstr "" #: frappe/templates/print_formats/standard_macros.html:220 msgid "CANCELLED" -msgstr "" +msgstr "ODKLICANO" #. Label of the cc (Code) field in DocType 'Communication' #. Label of the cc (Code) field in DocType 'Notification Recipient' @@ -4129,7 +4131,7 @@ msgstr "" #: frappe/public/js/frappe/model/indicator.js:78 #: frappe/public/js/frappe/ui/filters/filter.js:540 msgid "Cancelled" -msgstr "" +msgstr "Preklicano" #: frappe/core/doctype/deleted_document/deleted_document.py:52 msgid "Cancelled Document restored as Draft" @@ -4392,24 +4394,24 @@ msgstr "Kartice" #: frappe/public/js/frappe/views/interaction.js:72 #: frappe/website/doctype/help_article/help_article.json msgid "Category" -msgstr "" +msgstr "Kategorija" #. Label of the category_description (Text) field in DocType 'Help Category' #: frappe/website/doctype/help_category/help_category.json msgid "Category Description" -msgstr "" +msgstr "Opis Kategorije" #. Label of the category_name (Data) field in DocType 'Help Category' #: frappe/website/doctype/help_category/help_category.json msgid "Category Name" -msgstr "" +msgstr "Ime Kategorije" #. Option for the 'Align' (Select) field in DocType 'Letter Head' #. Option for the 'Text Align' (Select) field in DocType 'Web Page' #: frappe/printing/doctype/letter_head/letter_head.json #: frappe/website/doctype/web_page/web_page.json msgid "Center" -msgstr "" +msgstr "Center" #: frappe/core/page/permission_manager/permission_manager_help.html:16 msgid "Certain documents, like an Invoice, should not be changed once final. The final state for such documents is called Submitted. You can restrict which roles can Submit." @@ -4458,7 +4460,7 @@ msgstr "" #. Label of the changed_at (Datetime) field in DocType 'Permission Log' #: frappe/core/doctype/permission_log/permission_log.json msgid "Changed at" -msgstr "" +msgstr "Spremenjeno" #. Label of the changed_by (Link) field in DocType 'Permission Log' #: frappe/core/doctype/permission_log/permission_log.json @@ -4473,7 +4475,7 @@ msgstr "" #. Label of the changed_values (HTML) field in DocType 'Permission Log' #: frappe/core/doctype/permission_log/permission_log.json msgid "Changes" -msgstr "" +msgstr "Spremembe" #: frappe/email/doctype/email_domain/email_domain.js:5 msgid "Changing any setting will reflect on all the email accounts associated with this domain." @@ -4518,25 +4520,25 @@ msgstr "" #. Label of the source (Link) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Chart Source" -msgstr "" +msgstr "Vir Grafikona" #. Label of the chart_type (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/public/js/frappe/views/reports/report_view.js:510 msgid "Chart Type" -msgstr "" +msgstr "Tip Grafikona" #. Label of the charts (Table) field in DocType 'Dashboard' #. Label of the charts (Table) field in DocType 'Workspace' #: frappe/desk/doctype/dashboard/dashboard.json #: frappe/desk/doctype/workspace/workspace.json msgid "Charts" -msgstr "" +msgstr "Grafikoni" #. Option for the 'Type' (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Chat" -msgstr "" +msgstr "Klepet" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Fieldtype' (Select) field in DocType 'Report Column' @@ -4553,7 +4555,7 @@ msgstr "" #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Check" -msgstr "" +msgstr "Preveri" #: frappe/integrations/doctype/webhook/webhook.py:99 msgid "Check Request URL" @@ -4611,12 +4613,12 @@ msgstr "" #. Label of the child_doctype (Data) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Child Doctype" -msgstr "" +msgstr "Podrejeni Doctype" #. Label of the child (Check) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Child Item" -msgstr "" +msgstr "Podrejeni Artikel" #: frappe/core/doctype/doctype/doctype.py:1647 msgid "Child Table {0} for field {1} must be virtual" @@ -4664,34 +4666,34 @@ 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 "Mesto" #. Label of the city (Data) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "City/Town" -msgstr "" +msgstr "Mesto/Kraj" #: frappe/core/doctype/recorder/recorder_list.js:12 #: frappe/public/js/frappe/form/controls/attach.js:16 msgid "Clear" -msgstr "" +msgstr "Počisti" #: frappe/public/js/frappe/views/communication.js:429 msgid "Clear & Add Template" -msgstr "" +msgstr "Počisti & Dodaj Predlogo" #: frappe/public/js/frappe/views/communication.js:105 msgid "Clear & Add template" -msgstr "" +msgstr "Počisti & Dodaj Predlogo" #: frappe/public/js/frappe/form/controls/multiselect_list.js:6 msgid "Clear All" -msgstr "" +msgstr "Počisti vse" #: frappe/public/js/frappe/list/list_view.js:2122 msgctxt "Button in list view actions menu" msgid "Clear Assignment" -msgstr "" +msgstr "Počisti dodelitev" #: frappe/public/js/frappe/ui/keyboard.js:287 msgid "Clear Cache and Reload" @@ -4732,7 +4734,7 @@ msgstr "" #: frappe/website/doctype/web_form/templates/web_form.html:154 msgid "Click here" -msgstr "" +msgstr "Klikni tukaj" #: frappe/public/js/frappe/file_uploader/FileUploader.vue:539 msgid "Click on a file to select it." @@ -4892,7 +4894,7 @@ msgstr "" #: frappe/public/js/frappe/ui/messages.js:251 #: frappe/website/js/bootstrap-4.js:24 msgid "Close" -msgstr "" +msgstr "Zapri" #. Label of the close_condition (Code) field in DocType 'Assignment Rule' #: frappe/automation/doctype/assignment_rule/assignment_rule.json @@ -4911,7 +4913,7 @@ msgstr "" #: frappe/core/doctype/communication/communication.json #: frappe/desk/doctype/event/event.json frappe/desk/doctype/todo/todo.json msgid "Closed" -msgstr "" +msgstr "Zaprto" #: frappe/templates/discussions/comment_box.html:25 #: frappe/templates/discussions/reply_section.html:53 @@ -4930,7 +4932,7 @@ msgstr "" #: frappe/geo/doctype/country/country.json #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Code" -msgstr "" +msgstr "Koda" #. Label of the code_challenge (Data) field in DocType 'OAuth Authorization #. Code' @@ -5024,7 +5026,7 @@ msgstr "" #: frappe/website/doctype/social_link_settings/social_link_settings.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Color" -msgstr "" +msgstr "Barva" #. Label of the column (Data) field in DocType 'Recorder Suggested Index' #: frappe/core/doctype/recorder_suggested_index/recorder_suggested_index.json @@ -5032,19 +5034,19 @@ msgstr "" #: frappe/public/js/form_builder/components/Section.vue:270 #: frappe/public/js/print_format_builder/ConfigureColumns.vue:8 msgid "Column" -msgstr "" +msgstr "Stolpec" #: frappe/core/doctype/report/boilerplate/controller.py:28 msgid "Column 1" -msgstr "" +msgstr "Stolpec 1" #: frappe/core/doctype/report/boilerplate/controller.py:33 msgid "Column 2" -msgstr "" +msgstr "Stolpec 2" #: frappe/desk/doctype/kanban_board/kanban_board.py:84 msgid "Column {0} already exist." -msgstr "" +msgstr "Stolpec {0} že obstaja." #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -5057,17 +5059,17 @@ msgstr "" #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Column Break" -msgstr "" +msgstr "Prelom Stolpca" #: frappe/core/doctype/data_export/exporter.py:140 msgid "Column Labels:" -msgstr "" +msgstr "Oznake Stolpcev:" #. Label of the column_name (Data) field in DocType 'Kanban Board Column' #: frappe/core/doctype/data_export/exporter.py:25 #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Column Name" -msgstr "" +msgstr "Ime Stolpca" #: frappe/desk/doctype/kanban_board/kanban_board.py:45 msgid "Column Name cannot be empty" @@ -5115,7 +5117,7 @@ msgstr "" #. 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' @@ -5125,7 +5127,7 @@ msgstr "" #: frappe/public/js/frappe/form/sidebar/assign_to.js:237 #: frappe/templates/includes/comments/comments.html:34 msgid "Comment" -msgstr "" +msgstr "Komentar" #. Label of the comment_by (Data) field in DocType 'Comment' #: frappe/core/doctype/comment/comment.json @@ -8426,7 +8428,7 @@ msgstr "" #: frappe/public/js/frappe/form/grid_row_form.js:42 msgid "ESC" -msgstr "" +msgstr "ESC" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #: frappe/core/doctype/comment/comment.json diff --git a/frappe/locale/sv.po b/frappe/locale/sv.po index b74153a2d3..fa02339b10 100644 --- a/frappe/locale/sv.po +++ b/frappe/locale/sv.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" "POT-Creation-Date: 2025-11-30 09:34+0000\n" -"PO-Revision-Date: 2025-12-02 14:59\n" +"PO-Revision-Date: 2025-12-07 17:11\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Swedish\n" "MIME-Version: 1.0\n" @@ -3796,7 +3796,7 @@ msgstr "Skapa {0}" #: frappe/templates/includes/footer/footer_powered.html:1 msgid "Built on {0}" -msgstr "Skapad av{0}" +msgstr "Skapad av {0}" #. Label of the bulk_actions (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json From 104824dc916ec304c29ce4fe564dedb9549f4c2a Mon Sep 17 00:00:00 2001 From: sokumon Date: Tue, 9 Dec 2025 18:11:09 +0530 Subject: [PATCH 13/14] chore: move code to the correct file --- frappe/boot.py | 2 +- .../workspace_sidebar/workspace_sidebar.py | 132 +++++++++++++++++ frappe/utils/install.py | 133 ------------------ 3 files changed, 133 insertions(+), 134 deletions(-) diff --git a/frappe/boot.py b/frappe/boot.py index dc8c99199e..8fa5a2595e 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -528,7 +528,7 @@ def get_sentry_dsn(): def get_sidebar_items(): - from frappe.utils.install import auto_generate_sidebar_from_module + from frappe.desk.doctype.workspace_sidebar.workspace_sidebar import auto_generate_sidebar_from_module sidebars = frappe.get_all( "Workspace Sidebar", fields=["name", "header_icon"], filters={"name": ["not like", "%My Workspaces%"]} diff --git a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py index 444673c7b2..9811a3fbe7 100644 --- a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py +++ b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py @@ -12,6 +12,7 @@ from frappe.boot import get_allowed_pages, get_allowed_reports from frappe.model.document import Document from frappe.modules.export_file import strip_default_fields from frappe.modules.utils import create_directory_on_app_path +from frappe.utils.caching import site_cache class WorkspaceSidebar(Document): @@ -240,3 +241,134 @@ def add_to_my_workspace(workspace): except Exception as e: frappe.log_error(title="Error in Adding Private Workspaces", message=e) + + +@site_cache() +def auto_generate_sidebar_from_module(): + """Auto generate sidebar from module""" + sidebars = [] + for module in frappe.get_all("Module Def", pluck="name"): + if not ( + frappe.db.exists("Workspace Sidebar", {"module": module}) + or frappe.db.exists("Workspace Sidebar", {"name": module}) + ): + module_info = get_module_info(module) + sidebar_items = create_sidebar_items(module_info) + sidebar = frappe.new_doc("Workspace Sidebar") + sidebar.title = module + sidebar.items = sidebar_items + sidebar.module = module + sidebar.header_icon = "hammer" + sidebar.app = frappe.local.module_app.get(frappe.scrub(module), None) + sidebars.append(sidebar) + return sidebars + + +def get_module_info(module_name): + entities = ["Workspace", "Dashboard", "DocType", "Report", "Page"] + module_info = {} + + for entity in entities: + module_info[entity] = {} + filters = [{"module": module_name}] + pluck = "name" + fieldnames = ["name"] + if entity.lower() == "doctype": + filters.append({"istable": 0}) + if entity.lower() == "page": + fieldnames.append("title") + pluck = None + module_info[entity] = frappe.get_all( + entity, filters=filters, fields=fieldnames, pluck=pluck, order_by="creation asc" + ) + + # if module info has no workspaces, then move doctypes to the front + if not module_info.get("Workspace"): + module_info = { + "DocType": module_info.get("DocType"), + "Workspace": module_info.get("Workspace"), + "Report": module_info.get("Report"), + "Dashboard": module_info.get("Dashboard"), + "Page": module_info.get("Page"), + } + top_doctypes = choose_top_doctypes(module_info.get("DocType")) + if top_doctypes: + module_info["DocType"] = choose_top_doctypes(module_info.get("DocType")) + return module_info + + +def choose_top_doctypes(doctype_names): + doctype_limit = 3 + if len(doctype_names) > doctype_limit: + try: + doctype_count_map = {} + for doctype in doctype_names: + doctype_count_map[doctype] = frappe.db.count(doctype) + top_doctypes = [ + name + for name, count in sorted(doctype_count_map.items(), key=lambda x: x[1], reverse=True)[ + :doctype_limit + ] + ] + return top_doctypes + except frappe.db.ProgrammingError: + # catches table not found errors + return None + + +def create_sidebar_items(module_info): + sidebar_items = [] + idx = 1 + + section_entities = {"report": "Reports", "dashboard": "Dashboards", "page": "Pages"} + + for entity, items in module_info.items(): + section_break_added = False + entity_lower = entity.lower() + + if entity_lower in section_entities: + if entity_lower == "report": + section_break = add_section_breaks("Reports", idx) + elif entity_lower in ("dashboard", "page") and len(items) > 1: + section_break = add_section_breaks(section_entities[entity_lower], idx) + section_break_added = True + sidebar_items.append(section_break) + idx += 1 + + for item in items: + item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item, "idx": idx} + + if entity_lower == "report": + item_info["child"] = 1 + item_info["icon"] = "table" + + if entity_lower == "page": + item_info["label"] = item.get("title") + item_info["link_to"] = item.get("name") + + if entity_lower == "workspace": + item_info["icon"] = "home" + item_info["icon"] = "wallpaper" + + if entity_lower == "page": + item_info["icon"] = "panel-top" + + if entity_lower == "doctype" and "settings" in item.lower(): + item_info["icon"] = "settings" + + if section_break_added: + item_info["child"] = 1 + + sidebar_item = frappe.new_doc("Workspace Sidebar Item") + sidebar_item.update(item_info) + sidebar_items.append(sidebar_item) + + idx += 1 + + return sidebar_items + + +def add_section_breaks(label, idx): + section_break = frappe.new_doc("Workspace Sidebar Item") + section_break.update({"label": label, "type": "Section Break", "idx": idx}) + return section_break diff --git a/frappe/utils/install.py b/frappe/utils/install.py index 2f885370c8..60a393882e 100644 --- a/frappe/utils/install.py +++ b/frappe/utils/install.py @@ -5,7 +5,6 @@ import getpass import frappe from frappe.geo.doctype.country.country import import_country_and_currency from frappe.utils import cint -from frappe.utils.caching import site_cache from frappe.utils.password import update_password @@ -222,135 +221,3 @@ def delete_desktop_icon_and_sidebar(app_name, dry_run=False): if dry_run: # Delete icons and sidebars frappe.db.commit() # nosemgrep - - -@site_cache() -def auto_generate_sidebar_from_module(): - """Auto generate sidebar from module""" - sidebars = [] - for module in frappe.get_all("Module Def", pluck="name"): - if not ( - frappe.db.exists("Workspace Sidebar", {"module": module}) - or frappe.db.exists("Workspace Sidebar", {"name": module}) - ): - module_info = get_module_info(module) - sidebar_items = create_sidebar_items(module_info) - sidebar = frappe.new_doc("Workspace Sidebar") - sidebar.title = module - sidebar.items = sidebar_items - sidebar.module = module - sidebar.header_icon = "hammer" - sidebar.app = frappe.local.module_app.get(frappe.scrub(module), None) - sidebars.append(sidebar) - return sidebars - - -def get_module_info(module_name): - entities = ["Workspace", "Dashboard", "DocType", "Report", "Page"] - module_info = {} - - for entity in entities: - module_info[entity] = {} - filters = [{"module": module_name}] - pluck = "name" - fieldnames = ["name"] - if entity.lower() == "doctype": - filters.append({"istable": 0}) - if entity.lower() == "page": - fieldnames.append("title") - pluck = None - module_info[entity] = frappe.get_all( - entity, filters=filters, fields=fieldnames, pluck=pluck, order_by="creation asc" - ) - - # if module info has no workspaces, then move doctypes to the front - if not module_info.get("Workspace"): - module_info = { - "DocType": module_info.get("DocType"), - "Workspace": module_info.get("Workspace"), - "Report": module_info.get("Report"), - "Dashboard": module_info.get("Dashboard"), - "Page": module_info.get("Page"), - } - top_doctypes = choose_top_doctypes(module_info.get("DocType")) - if top_doctypes: - module_info["DocType"] = choose_top_doctypes(module_info.get("DocType")) - return module_info - - -def choose_top_doctypes(doctype_names): - doctype_limit = 3 - if len(doctype_names) > doctype_limit: - try: - doctype_count_map = {} - for doctype in doctype_names: - doctype_count_map[doctype] = frappe.db.count(doctype) - top_doctypes = [ - name - for name, count in sorted(doctype_count_map.items(), key=lambda x: x[1], reverse=True)[ - :doctype_limit - ] - ] - return top_doctypes - except frappe.db.ProgrammingError: - # catches table not found errors - return None - - -def create_sidebar_items(module_info): - sidebar_items = [] - idx = 1 - - section_entities = {"report": "Reports", "dashboard": "Dashboards", "page": "Pages"} - - for entity, items in module_info.items(): - section_break_added = False - entity_lower = entity.lower() - - if entity_lower in section_entities: - if entity_lower == "report": - section_break = add_section_breaks("Reports", idx) - elif entity_lower in ("dashboard", "page") and len(items) > 1: - section_break = add_section_breaks(section_entities[entity_lower], idx) - section_break_added = True - sidebar_items.append(section_break) - idx += 1 - - for item in items: - print(entity, item) - item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item, "idx": idx} - - if entity_lower == "report": - item_info["child"] = 1 - item_info["icon"] = "table" - - if entity_lower == "page": - item_info["label"] = item.get("title") - item_info["link_to"] = item.get("name") - - if entity_lower == "workspace": - item_info["icon"] = "home" - item_info["icon"] = "wallpaper" - - if entity_lower == "page": - item_info["icon"] = "panel-top" - - if entity_lower == "doctype" and "settings" in item.lower(): - item_info["icon"] = "settings" - - if section_break_added: - item_info["child"] = 1 - - sidebar_item = frappe.new_doc("Workspace Sidebar Item") - sidebar_item.update(item_info) - sidebar_items.append(sidebar_item) - - idx += 1 - - return sidebar_items - - -def add_section_breaks(label, idx): - section_break = frappe.new_doc("Workspace Sidebar Item") - section_break.update({"label": label, "type": "Section Break", "idx": idx}) - return section_break From dfd956f23692f5b0a72703e0297dff3fca92de17 Mon Sep 17 00:00:00 2001 From: Rahul Agrawal <12agrawalrahul@gmail.com> Date: Tue, 9 Dec 2025 19:00:01 +0530 Subject: [PATCH 14/14] fix: allow same filter multiple times in workspace shortcut (#35133) * fix: populate multiple filters of same type in URL * test: increase wait time for jump to field --- cypress/integration/form.js | 2 +- frappe/public/js/frappe/utils/utils.js | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/cypress/integration/form.js b/cypress/integration/form.js index d83c304c71..c1b8f6126a 100644 --- a/cypress/integration/form.js +++ b/cypress/integration/form.js @@ -3,7 +3,7 @@ const jump_to_field = (field_label) => { .type("{esc}") // lose focus if any .type("{ctrl+j}") // jump to field .type(field_label) - .wait(500) + .wait(1000) .type("{enter}") .wait(200) .findByRole("button", { name: "Go" }) diff --git a/frappe/public/js/frappe/utils/utils.js b/frappe/public/js/frappe/utils/utils.js index 01636c32bc..2facd65c3b 100644 --- a/frappe/public/js/frappe/utils/utils.js +++ b/frappe/public/js/frappe/utils/utils.js @@ -1754,10 +1754,19 @@ Object.assign(frappe.utils, { // don't remove unless patch is created to convert all existing filters from object to array // backward compatibility if (Array.isArray(filters_json)) { - let filter = {}; - filters_json.forEach((arr) => { - filter[arr[1]] = [arr[2], arr[3]]; - }); + let filter = filters_json.reduce((acc, filter) => { + const field = filter[1]; + const value = [filter[2], filter[3]]; + + // if we have multiple filters for the same field, + // we convert it into an array + if (acc[field]) { + acc[field].push(value); + } else { + acc[field] = [value]; + } + return acc; + }, {}); return filter || []; } return filters_json || [];