diff --git a/.github/helper/roulette.py b/.github/helper/roulette.py index 5b966f82f4..8d13a9543e 100644 --- a/.github/helper/roulette.py +++ b/.github/helper/roulette.py @@ -182,10 +182,7 @@ if __name__ == "__main__": only_frontend_code_changed = len(list(filter(is_frontend_code, files_list))) == len(files_list) updated_py_file_count = len(list(filter(is_server_side_code, files_list))) only_py_changed = updated_py_file_count == len(files_list) - run_postgres = ( - has_label(pr_number, "postgres", repo) or - matches_postgres_filenames(files_list) - ) + run_postgres = has_label(pr_number, "postgres", repo) # Check for Skip CI label and other conditions if has_skip_ci_label(pr_number, repo): diff --git a/babel_extractors.csv b/babel_extractors.csv index b7bf582783..8c9e475277 100644 --- a/babel_extractors.csv +++ b/babel_extractors.csv @@ -1,5 +1,7 @@ **/hooks.py,frappe.gettext.extractors.navbar.extract **/doctype/*/*.json,frappe.gettext.extractors.doctype.extract +**/desktop_icon/*.json,frappe.gettext.extractors.desktop_icon.extract +**/workspace_sidebar/*.json,frappe.gettext.extractors.workspace_sidebar.extract **/workspace/*/*.json,frappe.gettext.extractors.workspace.extract **/web_form/*/*.json,frappe.gettext.extractors.web_form.extract **/onboarding_step/*/*.json,frappe.gettext.extractors.onboarding_step.extract diff --git a/frappe/__init__.py b/frappe/__init__.py index 9f38c7cbbc..8996a7fbe3 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -16,6 +16,7 @@ import importlib import inspect import json import os +import re import sys import threading import warnings @@ -76,6 +77,7 @@ local = Local() cache: "RedisWrapper" | None = None client_cache: "ClientCache" | None = None STANDARD_USERS = ("Guest", "Administrator") +SITE_NAME_PATTERN = re.compile(r"^[a-zA-Z0-9._-]+$") # this global may be subsequently changed by frappe.tests.utils.toggle_test_mode() in_test = False @@ -144,6 +146,9 @@ def init(site: str, sites_path: str = ".", new_site: bool = False, force: bool = if getattr(local, "initialised", None) and not force: return + if site and not SITE_NAME_PATTERN.match(site): + raise ValueError(f"Invalid site name `{site}`") + local.error_log = [] local.message_log = [] local.debug_log = [] @@ -1472,25 +1477,23 @@ def logger( def get_desk_link(doctype, name, show_title_with_name=False, open_in_new_tab=False): - from urllib.parse import quote + from frappe.desk.utils import slug + from frappe.utils.data import quoted meta = get_meta(doctype) title = get_value(doctype, name, meta.get_title_field()) target_attr = ' target="_blank"' if open_in_new_tab else "" - # encode for href - encoded_name = quote(name) - if show_title_with_name and name != title: - html = '{doctype_local} {name}: {title_local}' + html = '{doctype_local} {name}: {title_local}' else: - html = '{doctype_local} {title_local}' + html = '{doctype_local} {title_local}' return html.format( - doctype=doctype, + doctype=quoted(slug(doctype)), name=name, - encoded_name=encoded_name, + encoded_name=quoted(name), doctype_local=_(doctype), title_local=_(title), target=target_attr, diff --git a/frappe/apps.py b/frappe/apps.py index dfb6e83c20..0dd30b4340 100644 --- a/frappe/apps.py +++ b/frappe/apps.py @@ -88,7 +88,7 @@ def get_default_path(): @frappe.whitelist() -def set_app_as_default(app_name): +def set_app_as_default(app_name: str): if frappe.db.get_value("User", frappe.session.user, "default_app") == app_name: frappe.db.set_value("User", frappe.session.user, "default_app", "") else: @@ -96,7 +96,7 @@ def set_app_as_default(app_name): @frappe.whitelist() -def get_incomplete_setup_route(current_app, app_route): +def get_incomplete_setup_route(current_app: str, app_route: str): pending_apps = get_apps_with_incomplete_dependencies(current_app) if not pending_apps: diff --git a/frappe/auth.py b/frappe/auth.py index b88f2ff88f..5a447a99af 100644 --- a/frappe/auth.py +++ b/frappe/auth.py @@ -127,7 +127,7 @@ class LoginManager: self.full_name = None self.user_type = None - if frappe.local.form_dict.get("cmd") == "login" or frappe.local.request.path == "/api/method/login": + if frappe.local.request.path == "/api/method/login": if self.login() is False: return self.resume = False @@ -176,9 +176,12 @@ class LoginManager: self.set_user_info() def get_user_info(self): - self.info = frappe.get_cached_value( + result = frappe.get_cached_value( "User", self.user, ["user_type", "first_name", "last_name", "user_image"], as_dict=1 ) + if result is None: + frappe.throw(_("User does not exist"), frappe.DoesNotExistError) + self.info = result self.user_type = self.info.user_type def setup_boot_cache(self): @@ -201,7 +204,7 @@ class LoginManager: frappe.local.cookie_manager.set_cookie("system_user", "yes", deduplicate=True) if not resume: frappe.local.response["message"] = "Logged In" - frappe.local.response["home_page"] = get_default_path() or "/desk" + frappe.local.response["home_page"] = get_home_page() or "/desk" if not resume: frappe.response["full_name"] = self.full_name diff --git a/frappe/automation/doctype/assignment_rule/assignment_rule.py b/frappe/automation/doctype/assignment_rule/assignment_rule.py index aa7b3551b5..0d785fc853 100644 --- a/frappe/automation/doctype/assignment_rule/assignment_rule.py +++ b/frappe/automation/doctype/assignment_rule/assignment_rule.py @@ -199,7 +199,7 @@ def get_assignments(doc) -> list[dict]: @frappe.whitelist() -def bulk_apply(doctype, docnames): +def bulk_apply(doctype: str, docnames: str | list[str]): docnames = frappe.parse_json(docnames) background = len(docnames) > 5 diff --git a/frappe/automation/doctype/auto_repeat/auto_repeat.py b/frappe/automation/doctype/auto_repeat/auto_repeat.py index a9dda1e6e8..db268b3e07 100644 --- a/frappe/automation/doctype/auto_repeat/auto_repeat.py +++ b/frappe/automation/doctype/auto_repeat/auto_repeat.py @@ -1,7 +1,7 @@ # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors # License: MIT. See LICENSE -from datetime import timedelta +from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta @@ -556,7 +556,13 @@ def get_auto_repeat_entries(date=None): @frappe.whitelist() -def make_auto_repeat(doctype, docname, frequency="Daily", start_date=None, end_date=None): +def make_auto_repeat( + doctype: str, + docname: str | int, + frequency: str = "Daily", + start_date: str | datetime | None = None, + end_date: str | datetime | None = None, +): if not start_date: start_date = getdate(today()) doc = frappe.new_doc("Auto Repeat") @@ -573,7 +579,9 @@ def make_auto_repeat(doctype, docname, frequency="Daily", start_date=None, end_d # method for reference_doctype filter @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def get_auto_repeat_doctypes(doctype, txt, searchfield, start, page_len, filters): +def get_auto_repeat_doctypes( + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: str | dict | list +): res = frappe.get_all( "Property Setter", { diff --git a/frappe/boot.py b/frappe/boot.py index da2ffae73b..3eeb7a868a 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -19,7 +19,7 @@ from frappe.desk.doctype.form_tour.form_tour import get_onboarding_ui_tours from frappe.desk.doctype.route_history.route_history import frequently_visited_links from frappe.desk.form.load import get_meta_bundle from frappe.email.inbox import get_email_accounts -from frappe.integrations.frappe_providers.frappecloud_billing import is_fc_site +from frappe.integrations.frappe_providers.frappecloud_billing import current_site_info, is_fc_site from frappe.model.base_document import get_controller from frappe.permissions import has_permission from frappe.query_builder import DocType @@ -125,6 +125,8 @@ def get_bootinfo(): bootinfo.setup_wizard_completed_apps = get_setup_wizard_completed_apps() or [] bootinfo.desktop_icon_urls = get_desktop_icon_urls() bootinfo.desktop_icon_style = get_icon_style() or "Subtle" + if bootinfo.is_fc_site: + bootinfo.site_info = current_site_info() return bootinfo @@ -537,51 +539,52 @@ def get_sidebar_items(allowed_workspaces): from frappe import _ from frappe.desk.doctype.workspace_sidebar.workspace_sidebar import auto_generate_sidebar_from_module - sidebars = frappe.get_all("Workspace Sidebar", fields=["name", "header_icon"]) + workspace_sidebars = frappe.get_all("Workspace Sidebar", fields=["name", "header_icon"]) module_sidebars = auto_generate_sidebar_from_module() - sidebars.extend(module_sidebars) + workspace_sidebars.extend(module_sidebars) sidebar_items = {} - for s in sidebars: - sidebar_title = s.get("name") + for sidebar in workspace_sidebars: + sidebar_title = sidebar.get("name") + sidebar_doc = None if sidebar_title: - w = frappe.get_doc("Workspace Sidebar", sidebar_title) + sidebar_doc = frappe.get_doc("Workspace Sidebar", sidebar_title) else: - sidebar_title = s.title - w = s + sidebar_title = sidebar.title + sidebar_doc = sidebar if ( frappe.session.user == "Administrator" - or w.module in w.user.permitted_modules + or sidebar_doc.module in sidebar_doc.user.allow_modules or sidebar_title == "My Workspaces" ): sidebar_items[sidebar_title.lower()] = { "label": sidebar_title, "items": [], - "header_icon": s.get("header_icon"), - "module": w.module, - "app": w.app, + "header_icon": sidebar.get("header_icon"), + "module": sidebar_doc.module, + "app": sidebar_doc.app, } - for si in w.items: + for item in sidebar_doc.items: workspace_sidebar = { - "label": _(si.label), - "link_to": si.link_to, - "link_type": si.link_type, - "type": si.type, - "icon": si.icon, - "child": si.child, - "collapsible": si.collapsible, - "indent": si.indent, - "keep_closed": si.keep_closed, - "display_depends_on": si.display_depends_on, - "url": si.url, - "show_arrow": si.show_arrow, - "filters": si.filters, - "route_options": si.route_options, - "tab": si.navigate_to_tab, + "label": _(item.label), + "link_to": item.link_to, + "link_type": item.link_type, + "type": item.type, + "icon": item.icon, + "child": item.child, + "collapsible": item.collapsible, + "indent": item.indent, + "keep_closed": item.keep_closed, + "display_depends_on": item.display_depends_on, + "url": item.url, + "show_arrow": item.show_arrow, + "filters": item.filters, + "route_options": item.route_options, + "tab": item.navigate_to_tab, } - if si.link_type == "Report" and si.link_to and frappe.db.exists("Report", si.link_to): + if item.link_type == "Report" and item.link_to and frappe.db.exists("Report", item.link_to): report_type, ref_doctype = frappe.db.get_value( - "Report", si.link_to, ["report_type", "ref_doctype"] + "Report", item.link_to, ["report_type", "ref_doctype"] ) workspace_sidebar["report"] = { "report_type": report_type, @@ -589,8 +592,8 @@ def get_sidebar_items(allowed_workspaces): } if ( "My Workspaces" in sidebar_title - or si.type == "Section Break" - or w.is_item_allowed(si.link_to, si.link_type, allowed_workspaces) + or item.type == "Section Break" + or sidebar_doc.is_item_allowed(item.link_to, item.link_type, allowed_workspaces) ): sidebar_items[sidebar_title.lower()]["items"].append(workspace_sidebar) add_user_specific_sidebar(sidebar_items) diff --git a/frappe/client.py b/frappe/client.py index 548a86fb94..0019e844eb 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -2,7 +2,7 @@ # License: MIT. See LICENSE import json import os -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Any import frappe import frappe.model @@ -25,18 +25,18 @@ Requests via FrappeClient are also handled here. @frappe.whitelist() def get_list( - doctype, - fields=None, - filters=None, - group_by=None, - order_by=None, - limit_start=None, - limit_page_length=20, - parent=None, - debug: bool = False, - as_dict: bool = True, - or_filters=None, - expand=None, + doctype: str, + fields: str | list[str | dict[str, Any]] | None = None, + filters: str | list | dict[str, Any] | None = None, + group_by: str | list[str] | None = None, + order_by: str | list[str] | None = None, + limit_start: int | str | None = None, + limit_page_length: int | str = 20, + parent: str | None = None, + debug: bool | int = False, + as_dict: bool | int = True, + or_filters: str | list[list] | dict[str, Any] | None = None, + expand: str | list[str] | None = None, ): """Return a list of records by filters, fields, ordering and limit. @@ -76,7 +76,12 @@ def get_list( @frappe.whitelist() -def get_count(doctype, filters=None, debug=False, cache=False): +def get_count( + doctype: str, + filters: str | list | dict[str, Any] | None = None, + debug: int | bool = False, + cache: int | bool = False, +): from frappe.desk.reportview import get_count frappe.form_dict.doctype = doctype @@ -87,7 +92,12 @@ def get_count(doctype, filters=None, debug=False, cache=False): @frappe.whitelist() -def get(doctype, name=None, filters=None, parent=None): +def get( + doctype: str, + name: str | int | None = None, + filters: str | list | dict[str, Any] | None = None, + parent: str | None = None, +): """Return a document by name or filters. :param doctype: DocType of the document to be returned @@ -108,7 +118,14 @@ def get(doctype, name=None, filters=None, parent=None): @frappe.whitelist() -def get_value(doctype, fieldname, filters=None, as_dict=True, debug=False, parent=None): +def get_value( + doctype: str, + fieldname: str | list[str] | dict[str, Any], + filters: str | list | dict[str, Any] | None = None, + as_dict: int | bool = True, + debug: int | bool = False, + parent: str | None = None, +): """Return a value from a document. :param doctype: DocType to be queried @@ -156,7 +173,7 @@ def get_value(doctype, fieldname, filters=None, as_dict=True, debug=False, paren @frappe.whitelist() -def get_single_value(doctype, field): +def get_single_value(doctype: str, field: str): if not frappe.has_permission(doctype): frappe.throw(_("No permission for {0}").format(_(doctype)), frappe.PermissionError) @@ -164,7 +181,7 @@ def get_single_value(doctype, field): @frappe.whitelist(methods=["POST", "PUT"]) -def set_value(doctype, name, fieldname, value=None): +def set_value(doctype: str, name: str | int, fieldname: str | dict[str, Any], value: Any | None = None): """Set a value using get_doc, group of values :param doctype: DocType of the document @@ -201,7 +218,7 @@ def set_value(doctype, name, fieldname, value=None): @frappe.whitelist(methods=["POST", "PUT"]) -def insert(doc=None): +def insert(doc: str | dict[str, Any] | None = None): """Insert a document :param doc: JSON or dict object to be inserted""" @@ -212,7 +229,7 @@ def insert(doc=None): @frappe.whitelist(methods=["POST", "PUT"]) -def insert_many(docs=None): +def insert_many(docs: str | list[dict[str, Any]] | None = None): """Insert multiple documents :param docs: JSON or list of dict objects to be inserted in one request""" @@ -226,7 +243,7 @@ def insert_many(docs=None): @frappe.whitelist(methods=["POST", "PUT"]) -def save(doc): +def save(doc: str | dict[str, Any]): """Update (save) an existing document :param doc: JSON or dict object with the properties of the document to be updated""" @@ -240,7 +257,7 @@ def save(doc): @frappe.whitelist(methods=["POST", "PUT"]) -def rename_doc(doctype, old_name, new_name, merge=False): +def rename_doc(doctype: str, old_name: str | int, new_name: str | int, merge: bool = False): """Rename document :param doctype: DocType of the document to be renamed @@ -251,7 +268,7 @@ def rename_doc(doctype, old_name, new_name, merge=False): @frappe.whitelist(methods=["POST", "PUT"]) -def submit(doc): +def submit(doc: str | dict[str, Any]): """Submit a document :param doc: JSON or dict object to be submitted remotely""" @@ -265,7 +282,7 @@ def submit(doc): @frappe.whitelist(methods=["POST", "PUT"]) -def cancel(doctype, name): +def cancel(doctype: str, name: str | int): """Cancel a document :param doctype: DocType of the document to be cancelled @@ -277,7 +294,7 @@ def cancel(doctype, name): @frappe.whitelist(methods=["DELETE", "POST"]) -def delete(doctype, name): +def delete(doctype: str, name: str | int): """Delete a remote document :param doctype: DocType of the document to be deleted @@ -286,7 +303,7 @@ def delete(doctype, name): @frappe.whitelist(methods=["POST", "PUT"]) -def bulk_update(docs): +def bulk_update(docs: str): """Bulk update documents :param docs: JSON list of documents to be updated remotely. Each document must have `docname` property""" @@ -305,7 +322,7 @@ def bulk_update(docs): @frappe.whitelist() -def has_permission(doctype: str, docname: str, perm_type: str = "read"): +def has_permission(doctype: str, docname: str | int, perm_type: str = "read"): """Return a JSON with data whether the document has the requested permission. :param doctype: DocType of the document to be checked @@ -316,7 +333,7 @@ def has_permission(doctype: str, docname: str, perm_type: str = "read"): @frappe.whitelist() -def get_doc_permissions(doctype: str, docname: str): +def get_doc_permissions(doctype: str, docname: str | int): """Return an evaluated document permissions dict like `{"read":1, "write":1}`. :param doctype: DocType of the document to be evaluated @@ -327,7 +344,7 @@ def get_doc_permissions(doctype: str, docname: str): @frappe.whitelist() -def get_password(doctype: str, name: str, fieldname: str): +def get_password(doctype: str, name: str | int, fieldname: str): """Return a password type property. Only applicable for System Managers :param doctype: DocType of the document that holds the password @@ -351,14 +368,14 @@ def get_time_zone(): @frappe.whitelist(methods=["POST", "PUT"]) def attach_file( - filename=None, - filedata=None, - doctype=None, - docname=None, - folder=None, - decode_base64=False, - is_private=None, - docfield=None, + filename: str | None = None, + filedata: str | None = None, + doctype: str | None = None, + docname: str | int | None = None, + folder: str | None = None, + decode_base64: int | bool = False, + is_private: int | bool | None = None, + docfield: str | None = None, ): """Attach a file to Document @@ -396,7 +413,7 @@ def attach_file( @frappe.whitelist() @http_cache(max_age=10 * 60) -def is_document_amended(doctype: str, docname: str): +def is_document_amended(doctype: str, docname: str | int): if frappe.permissions.has_permission(doctype): try: return frappe.db.exists(doctype, {"amended_from": docname}) @@ -409,7 +426,7 @@ def is_document_amended(doctype: str, docname: str): @frappe.whitelist(methods=["GET", "POST"]) def validate_link_and_fetch( doctype: str, - docname: str, + docname: str | int, fields_to_fetch: list[str] | str | None = None, # search_widget parameters query: str | None = None, diff --git a/frappe/commands/execute.py b/frappe/commands/execute.py new file mode 100644 index 0000000000..f07f235a94 --- /dev/null +++ b/frappe/commands/execute.py @@ -0,0 +1,103 @@ +import json + +import frappe +from frappe.exceptions import SiteNotSpecifiedError +from frappe.utils.bench_helper import CliCtxObj + + +def _execute(context: CliCtxObj, method, args=None, kwargs=None, profile=False, extra_args=None): + for site in context.sites: + ret = "" + try: + frappe.init(site) + frappe.connect() + + if args: + try: + fn_args = eval(args) + except NameError: + fn_args = [args] + else: + fn_args = () + + if kwargs: + fn_kwargs = eval(kwargs) + else: + fn_kwargs = {} + + if extra_args: + # parse extra_args + # if it starts with --, it is a kwarg + # otherwise it is an arg + # if it is a kwarg, the next argument is the value + # if the next argument starts with --, the value is True + # if there is no next argument, the value is True + + # examples: + # bench execute method arg1 arg2 -> args=[arg1, arg2] + # bench execute method --a 1 --b 2 -> kwargs={a: 1, b: 2} + # bench execute method arg1 --a 1 -> args=[arg1], kwargs={a: 1} + + # we need to convert values to python objects if possible + def parse_value(value): + try: + return json.loads(value) + except Exception: + return value + + extra_args = list(extra_args) + while extra_args: + arg = extra_args.pop(0) + if arg.startswith("--"): + key = arg[2:] + if extra_args and not extra_args[0].startswith("--"): + value = parse_value(extra_args.pop(0)) + else: + value = True + fn_kwargs[key] = value + else: + fn_args += (parse_value(arg),) + + pr = None + if profile: + import cProfile + + pr = cProfile.Profile() + pr.enable() + + try: + fn = frappe.get_attr(method) + except Exception: + fn = None + + if fn: + ret = fn(*fn_args, **fn_kwargs) + else: + # eval is safe here because input is from console + code = compile(method, "", "eval") + ret = eval(code, globals(), locals()) # nosemgrep + if callable(ret): + suffix = "(*fn_args, **fn_kwargs)" + code = compile(method + suffix, "", "eval") + ret = eval(code, globals(), locals()) # nosemgrep + + if profile and pr: + import pstats + from io import StringIO + + pr.disable() + s = StringIO() + pstats.Stats(pr, stream=s).sort_stats("cumulative").print_stats(0.5) + print(s.getvalue()) + + if frappe.db: + frappe.db.commit() + finally: + frappe.destroy() + if ret: + from frappe.utils.response import json_handler + + print(json.dumps(ret, default=json_handler).strip('"')) + + if not context.sites: + raise SiteNotSpecifiedError diff --git a/frappe/commands/test_commands.py b/frappe/commands/test_commands.py index d588e3c8e6..bd9697d599 100644 --- a/frappe/commands/test_commands.py +++ b/frappe/commands/test_commands.py @@ -244,6 +244,26 @@ class TestCommands(BaseTestCommands): self.assertEqual(self.returncode, 0) self.assertEqual(self.stdout, frappe.bold(text="DocType")) + # test 5: execute a command with extra args + self.execute("bench --site {site} execute frappe.bold DocType") + self.assertEqual(self.returncode, 0) + self.assertEqual(self.stdout, frappe.bold(text="DocType")) + + # test 6: execute a command with extra kwargs + self.execute("bench --site {site} execute frappe.bold --text DocType") + self.assertEqual(self.returncode, 0) + self.assertEqual(self.stdout, frappe.bold(text="DocType")) + + # test 7: execute a command with extra args and kwargs + self.execute("bench --site {site} execute frappe.utils.add_to_date '2024-01-01' --days 1") + self.assertEqual(self.returncode, 0) + self.assertEqual(self.stdout, "2024-01-02") + + # test 8: execute a command with extra args and kwargs with types + self.execute("bench --site {site} execute frappe.utils.add_to_date --date '2024-01-01' --days 1") + self.assertEqual(self.returncode, 0) + self.assertEqual(self.stdout, "2024-01-02") + @skipIf( frappe.conf.db_type == "sqlite", "Not for SQLite for now", diff --git a/frappe/commands/utils.py b/frappe/commands/utils.py index faafcdc5d3..60607fd11f 100644 --- a/frappe/commands/utils.py +++ b/frappe/commands/utils.py @@ -247,70 +247,18 @@ def reset_perms(context: CliCtxObj): raise SiteNotSpecifiedError -@click.command("execute") +@click.command("execute", context_settings=EXTRA_ARGS_CTX) @click.argument("method") @click.option("--args") @click.option("--kwargs") @click.option("--profile", is_flag=True, default=False) +@click.argument("extra_args", nargs=-1) @pass_context -def execute(context: CliCtxObj, method, args=None, kwargs=None, profile=False): +def execute(context: CliCtxObj, method, args=None, kwargs=None, profile=False, extra_args=None): "Execute a function" - for site in context.sites: - ret = "" - try: - frappe.init(site) - frappe.connect() + from frappe.commands.execute import _execute - if args: - try: - fn_args = eval(args) - except NameError: - fn_args = [args] - else: - fn_args = () - - if kwargs: - fn_kwargs = eval(kwargs) - else: - fn_kwargs = {} - - if profile: - import cProfile - - pr = cProfile.Profile() - pr.enable() - - try: - ret = frappe.get_attr(method)(*fn_args, **fn_kwargs) - except Exception: - # eval is safe here because input is from console - code = compile(method, "", "eval") - ret = eval(code, globals(), locals()) # nosemgrep - if callable(ret): - suffix = "(*fn_args, **fn_kwargs)" - code = compile(method + suffix, "", "eval") - ret = eval(code, globals(), locals()) # nosemgrep - - if profile: - import pstats - from io import StringIO - - pr.disable() - s = StringIO() - pstats.Stats(pr, stream=s).sort_stats("cumulative").print_stats(0.5) - print(s.getvalue()) - - if frappe.db: - frappe.db.commit() - finally: - frappe.destroy() - if ret: - from frappe.utils.response import json_handler - - print(json.dumps(ret, default=json_handler).strip('"')) - - if not context.sites: - raise SiteNotSpecifiedError + _execute(context, method, args, kwargs, profile, extra_args) @click.command("add-to-email-queue") diff --git a/frappe/contacts/address_and_contact.py b/frappe/contacts/address_and_contact.py index ae712f7c5a..95796e2098 100644 --- a/frappe/contacts/address_and_contact.py +++ b/frappe/contacts/address_and_contact.py @@ -1,6 +1,8 @@ # Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors # License: MIT. See LICENSE +from typing import Any + import frappe from frappe import _ @@ -110,7 +112,7 @@ def delete_contact_and_address(doctype: str, docname: str) -> None: @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs def filter_dynamic_link_doctypes( - doctype, txt: str, searchfield, start, page_len, filters: dict + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: dict[str, Any] ) -> list[list[str]]: from frappe.permissions import get_doctypes_with_read diff --git a/frappe/contacts/doctype/address/address.py b/frappe/contacts/doctype/address/address.py index 93bbcc6431..7670aa237a 100644 --- a/frappe/contacts/doctype/address/address.py +++ b/frappe/contacts/doctype/address/address.py @@ -1,6 +1,8 @@ # Copyright (c) 2015, Frappe Technologies and contributors # License: MIT. See LICENSE +from typing import Any + from jinja2 import TemplateSyntaxError import frappe @@ -262,7 +264,9 @@ def get_company_address(company): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def address_query(doctype, txt, searchfield, start, page_len, filters): +def address_query( + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: dict[str, Any] +): from frappe.desk.search import search_widget _filters = [] diff --git a/frappe/contacts/doctype/contact/contact.py b/frappe/contacts/doctype/contact/contact.py index 5859746f1e..f84a205fc6 100644 --- a/frappe/contacts/doctype/contact/contact.py +++ b/frappe/contacts/doctype/contact/contact.py @@ -1,5 +1,7 @@ # Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors # License: MIT. See LICENSE +from typing import Any + import frappe from frappe import _ from frappe.contacts.address_and_contact import set_link_title @@ -312,7 +314,7 @@ def invite_user(contact: str): @frappe.whitelist() -def get_contact_details(contact): +def get_contact_details(contact: str): contact = frappe.get_doc("Contact", contact) contact.check_permission() @@ -341,7 +343,9 @@ def update_contact(doc, method): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def contact_query(doctype, txt, searchfield, start, page_len, filters): +def contact_query( + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: dict[str, Any] +): from frappe.desk.reportview import get_match_cond doctype = "Contact" @@ -379,7 +383,7 @@ def contact_query(doctype, txt, searchfield, start, page_len, filters): @frappe.whitelist() -def address_query(links): +def address_query(links: str): import json links = [ diff --git a/frappe/core/doctype/access_log/access_log.py b/frappe/core/doctype/access_log/access_log.py index 19082c96b7..2f89a22408 100644 --- a/frappe/core/doctype/access_log/access_log.py +++ b/frappe/core/doctype/access_log/access_log.py @@ -1,5 +1,7 @@ # Copyright (c) 2021, Frappe Technologies and contributors # License: MIT. See LICENSE +from typing import Any + from tenacity import retry, retry_if_exception_type, stop_after_attempt import frappe @@ -45,14 +47,14 @@ class AccessLog(Document): reraise=True, ) def make_access_log( - doctype=None, - document=None, - method=None, - file_type=None, - report_name=None, - filters=None, - page=None, - columns=None, + doctype: str | None = None, + document: str | int | None = None, + method: str | None = None, + file_type: str | None = None, + report_name: str | None = None, + filters: str | list | dict[str, Any] | None = None, + page: str | None = None, + columns: str | None = None, ): access_log = frappe.get_doc( { diff --git a/frappe/core/doctype/activity_log/test_activity_log.py b/frappe/core/doctype/activity_log/test_activity_log.py index 330b1bd8c7..a46c1d45f9 100644 --- a/frappe/core/doctype/activity_log/test_activity_log.py +++ b/frappe/core/doctype/activity_log/test_activity_log.py @@ -5,6 +5,7 @@ import time import frappe from frappe.auth import CookieManager, LoginManager from frappe.tests import IntegrationTestCase +from frappe.utils import set_request class TestActivityLog(IntegrationTestCase): @@ -15,12 +16,12 @@ class TestActivityLog(IntegrationTestCase): # test user login log frappe.local.form_dict = frappe._dict( { - "cmd": "login", "sid": "Guest", "pwd": self.ADMIN_PASSWORD or "admin", "usr": "Administrator", } ) + set_request(method="POST", path="/api/method/login") frappe.local.request_ip = "127.0.0.1" frappe.local.cookie_manager = CookieManager() @@ -60,8 +61,9 @@ class TestActivityLog(IntegrationTestCase): update_system_settings({"allow_consecutive_login_attempts": 3, "allow_login_after_fail": 5}) frappe.local.form_dict = frappe._dict( - {"cmd": "login", "sid": "Guest", "pwd": self.ADMIN_PASSWORD, "usr": "Administrator"} + {"sid": "Guest", "pwd": self.ADMIN_PASSWORD, "usr": "Administrator"} ) + set_request(method="POST", path="/api/method/login") frappe.local.request_ip = "127.0.0.1" frappe.local.cookie_manager = CookieManager() diff --git a/frappe/core/doctype/communication/email.py b/frappe/core/doctype/communication/email.py index acbc27b2be..62e7873c79 100755 --- a/frappe/core/doctype/communication/email.py +++ b/frappe/core/doctype/communication/email.py @@ -3,7 +3,8 @@ import json from collections.abc import Iterable -from typing import TYPE_CHECKING +from datetime import datetime +from typing import TYPE_CHECKING, Any import frappe import frappe.email.smtp @@ -27,31 +28,32 @@ if TYPE_CHECKING: @frappe.whitelist() def make( - doctype=None, - name=None, - content=None, - subject=None, - sent_or_received="Sent", - sender=None, - sender_full_name=None, - recipients=None, - communication_medium="Email", - send_email=False, - print_html=None, - print_format=None, - attachments=None, - send_me_a_copy=False, - cc=None, - bcc=None, - read_receipt=None, - print_letterhead=True, - email_template=None, - communication_type=None, - send_after=None, - print_language=None, - now=False, - raw_html=False, - add_css=True, + doctype: str | None = None, + name: str | int | None = None, + content: str | None = None, + subject: str | None = None, + sent_or_received: str = "Sent", + sender: str | None = None, + sender_full_name: str | None = None, + recipients: str | list[str] | None = None, + communication_medium: str = "Email", + send_email: str | bool | int = False, + print_html: str | None = None, + print_format: str | None = None, + attachments: str | list[str | dict[str, Any]] | None = None, + send_me_a_copy: str | int | bool = False, + cc: str | list[str] | None = None, + bcc: str | list[str] | None = None, + read_receipt: str | int | bool | None = None, + print_letterhead: int | bool = True, + email_template: str | None = None, + communication_type: str | None = None, + send_after: str | datetime | None = None, + print_language: str | None = None, + now: int | bool = False, + raw_html: int | bool = False, + add_css: int | bool = True, + in_reply_to: str | None = None, **kwargs, ) -> dict[str, str]: """Make a new communication. Checks for email permissions for specified Document. @@ -73,6 +75,7 @@ def make( :param send_after: Send after the given datetime. :param raw_html: Whether to use html version of email template :param add_css: Add default CSS from hooks/email_css to the email template (default **True**) + :param in_reply_to: Name of the Communication document to which this communication is a reply. """ from frappe.utils.commands import warn @@ -86,10 +89,8 @@ def make( if doctype and name: frappe.has_permission(doctype, doc=name, ptype="email", throw=True) - if ( - raw_html - and email_template - and not frappe.get_cached_value("Email Template", email_template, "use_html") + if raw_html and not ( + email_template and frappe.get_cached_value("Email Template", email_template, "use_html") ): warn( _( @@ -127,6 +128,7 @@ def make( now=now, raw_html=raw_html, add_css=add_css, + in_reply_to=in_reply_to, ) @@ -157,6 +159,7 @@ def _make( now=False, raw_html=False, add_css=True, + in_reply_to=None, ) -> dict[str, str]: """Internal method to make a new communication that ignores Permission checks.""" @@ -185,10 +188,11 @@ def _make( "has_attachment": 1 if attachments else 0, "communication_type": communication_type, "send_after": send_after, + "in_reply_to": in_reply_to, } ) comm.flags.skip_add_signature = not add_signature or ( - raw_html and frappe.get_cached_value("Email Template", email_template, "use_html") + raw_html and email_template and frappe.get_cached_value("Email Template", email_template, "use_html") ) comm.insert(ignore_permissions=True) diff --git a/frappe/core/doctype/communication/mixins.py b/frappe/core/doctype/communication/mixins.py index edf14baca5..b2aaeb3979 100644 --- a/frappe/core/doctype/communication/mixins.py +++ b/frappe/core/doctype/communication/mixins.py @@ -311,6 +311,7 @@ class CommunicationEmailMixin: "send_after": self.send_after, "raw_html": raw_html, "add_css": add_css, + "in_reply_to": self.in_reply_to, } def send_email( diff --git a/frappe/core/doctype/data_export/exporter.py b/frappe/core/doctype/data_export/exporter.py index a0e2f934da..575659928e 100644 --- a/frappe/core/doctype/data_export/exporter.py +++ b/frappe/core/doctype/data_export/exporter.py @@ -4,6 +4,7 @@ import csv import os import re +from typing import Any import frappe import frappe.permissions @@ -30,15 +31,15 @@ def get_data_keys(): @frappe.whitelist() def export_data( - doctype=None, - parent_doctype=None, - all_doctypes=True, - with_data=False, - select_columns=None, - file_type="CSV", - template=False, - filters=None, - export_without_column_meta=False, + doctype: str | list[str | dict[str, Any]] | None = None, + parent_doctype: str | None = None, + all_doctypes: bool | int | str = True, + with_data: bool | int | str = False, + select_columns: str | dict[str, list[str]] | None = None, + file_type: str = "CSV", + template: bool | str = False, + filters: str | dict[str, Any] | list | None = None, + export_without_column_meta: bool | str = False, ): _doctype = doctype if isinstance(_doctype, list): diff --git a/frappe/core/doctype/data_import/data_import.py b/frappe/core/doctype/data_import/data_import.py index c6bfe0b66d..6861b5f6b1 100644 --- a/frappe/core/doctype/data_import/data_import.py +++ b/frappe/core/doctype/data_import/data_import.py @@ -2,6 +2,7 @@ # License: MIT. See LICENSE import os +from typing import Any from rq.command import send_stop_job_command from rq.exceptions import InvalidJobOperation @@ -102,7 +103,7 @@ class DataImport(Document): self.payload_count = len(payloads) @frappe.whitelist() - def get_preview_from_template(self, import_file=None, google_sheets_url=None): + def get_preview_from_template(self, import_file: str | None = None, google_sheets_url: str | None = None): if import_file: self.import_file = import_file self.set_delimiters_flag() @@ -203,7 +204,13 @@ def start_import(data_import): @frappe.whitelist() -def download_template(doctype, export_fields=None, export_records=None, export_filters=None, file_type="CSV"): +def download_template( + doctype: str, + export_fields: str | dict[str, list[str]] | None = None, + export_records: str | None = None, + export_filters: str | dict[str, Any] | list[list[Any]] | None = None, + file_type: str = "CSV", +): """ Download template from Exporter :param doctype: Document Type diff --git a/frappe/core/doctype/data_import/importer.py b/frappe/core/doctype/data_import/importer.py index f74022a5f6..3ddc070fc5 100644 --- a/frappe/core/doctype/data_import/importer.py +++ b/frappe/core/doctype/data_import/importer.py @@ -93,15 +93,19 @@ class Importer: return # setup import log - import_log = ( - frappe.get_all( - "Data Import Log", - fields=["row_indexes", "success", "log_index"], - filters={"data_import": self.data_import.name}, - order_by="log_index", + # Only use import log for retry/resume when Data Import is persisted in DB. + # For bench data-import (CLI), the doc is never inserted, so we must not reuse logs + import_log = [] + if self.data_import.name and frappe.db.exists("Data Import", self.data_import.name): + import_log = ( + frappe.get_all( + "Data Import Log", + fields=["row_indexes", "success", "log_index"], + filters={"data_import": self.data_import.name}, + order_by="log_index", + ) + or [] ) - or [] - ) log_index = 0 diff --git a/frappe/core/doctype/deleted_document/deleted_document.py b/frappe/core/doctype/deleted_document/deleted_document.py index ef4578f9c9..59a6102336 100644 --- a/frappe/core/doctype/deleted_document/deleted_document.py +++ b/frappe/core/doctype/deleted_document/deleted_document.py @@ -38,7 +38,7 @@ class DeletedDocument(Document): @frappe.whitelist() -def restore(name, alert=True): +def restore(name: str | int, alert: bool = True): deleted = frappe.get_doc("Deleted Document", name) if deleted.restored: @@ -69,7 +69,7 @@ def restore(name, alert=True): @frappe.whitelist() -def bulk_restore(docnames): +def bulk_restore(docnames: str | list[str]): docnames = frappe.parse_json(docnames) message = _("Restoring Deleted Document") restored, invalid, failed = [], [], [] diff --git a/frappe/core/doctype/doctype/boilerplate/controller_calendar.js b/frappe/core/doctype/doctype/boilerplate/controller_calendar.js index c9a4d37756..efe6a7e6df 100644 --- a/frappe/core/doctype/doctype/boilerplate/controller_calendar.js +++ b/frappe/core/doctype/doctype/boilerplate/controller_calendar.js @@ -2,4 +2,9 @@ // For license information, please see license.txt frappe.views.calendar["{doctype}"] = {{ + // field_map: {{ + // start: "start_date", + // end: "end_date", + // }}, + // gantt: true }}; \ No newline at end of file diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index bee4a3ee2e..0b5557202e 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -680,7 +680,7 @@ class DocType(Document): where doctype=%s and field='name' and value = %s""", (new, new, old), ) - else: + elif not self.is_virtual: frappe.db.rename_table(old, new) frappe.db.commit() diff --git a/frappe/core/doctype/document_naming_settings/document_naming_settings.py b/frappe/core/doctype/document_naming_settings/document_naming_settings.py index 4266b8dba5..7eb0aeeb2c 100644 --- a/frappe/core/doctype/document_naming_settings/document_naming_settings.py +++ b/frappe/core/doctype/document_naming_settings/document_naming_settings.py @@ -174,7 +174,7 @@ class DocumentNamingSettings(Document): NamingSeries(series).validate() @frappe.whitelist() - def get_options(self, doctype=None): + def get_options(self, doctype: str | None = None): doctype = doctype or self.transaction_type if not doctype: return diff --git a/frappe/core/doctype/file/file.js b/frappe/core/doctype/file/file.js index c8122ee0af..f3f1380855 100644 --- a/frappe/core/doctype/file/file.js +++ b/frappe/core/doctype/file/file.js @@ -3,7 +3,9 @@ frappe.ui.form.on("File", { if (frm.doc.file_url) { frm.add_custom_button(__("View File"), () => { if (!frappe.utils.is_url(frm.doc.file_url)) { - window.open(window.location.origin + frm.doc.file_url); + window.open( + window.location.origin + frm.doc.file_url + "?fid=" + frm.doc.name + ); } else { window.open(frm.doc.file_url); } @@ -90,7 +92,7 @@ frappe.ui.form.on("File", { }, download: function (frm) { - let file_url = frm.doc.file_url; + let file_url = frm.doc.file_url + "?fid=" + frm.doc.name; if (frm.doc.file_name) { file_url = file_url.replace(/#/g, "%23"); } diff --git a/frappe/core/doctype/file/file.py b/frappe/core/doctype/file/file.py index 927e4c6a70..3b0514d594 100755 --- a/frappe/core/doctype/file/file.py +++ b/frappe/core/doctype/file/file.py @@ -767,7 +767,7 @@ class File(Document): max_file_size = get_max_file_size() file_size = len(self._content or b"") - if file_size > max_file_size: + if not self.flags.skip_file_size_check and file_size > max_file_size: msg = _("File size exceeded the maximum allowed size of {0} MB").format(max_file_size / 1048576) if frappe.has_permission("System Settings", "write"): msg += ".
" + _("You can increase the limit from System Settings.") diff --git a/frappe/core/doctype/log_settings/log_settings.py b/frappe/core/doctype/log_settings/log_settings.py index 8501be7b64..b1a6bb36be 100644 --- a/frappe/core/doctype/log_settings/log_settings.py +++ b/frappe/core/doctype/log_settings/log_settings.py @@ -130,7 +130,7 @@ def has_unseen_error_log(): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def get_log_doctypes(doctype, txt, searchfield, start, page_len, filters): +def get_log_doctypes(doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: list): filters = filters or [] filters.extend( diff --git a/frappe/core/doctype/module_def/module_def.py b/frappe/core/doctype/module_def/module_def.py index e00fb853d5..11586aa0b5 100644 --- a/frappe/core/doctype/module_def/module_def.py +++ b/frappe/core/doctype/module_def/module_def.py @@ -6,6 +6,7 @@ import os from pathlib import Path import frappe +from frappe import _ from frappe.model.document import Document from frappe.modules.export_file import delete_folder @@ -89,6 +90,10 @@ class ModuleDef(Document): frappe.clear_cache() frappe.setup_module_map() + def before_rename(self, old, new, merge=False): + if not self.custom: + frappe.throw(_("Only Custom Modules can be renamed.")) + @frappe.whitelist() def get_installed_apps(): diff --git a/frappe/core/doctype/prepared_report/prepared_report.py b/frappe/core/doctype/prepared_report/prepared_report.py index c221c1c321..54eb7dd749 100644 --- a/frappe/core/doctype/prepared_report/prepared_report.py +++ b/frappe/core/doctype/prepared_report/prepared_report.py @@ -165,7 +165,7 @@ def update_job_id(prepared_report): @frappe.whitelist() -def make_prepared_report(report_name, filters=None): +def make_prepared_report(report_name: str, filters: dict[str, Any] | str | list | None = None): """run reports in background""" prepared_report = frappe.get_doc( { @@ -212,7 +212,7 @@ def process_filters_for_prepared_report(filters: dict[str, Any] | str) -> str: @frappe.whitelist() -def get_reports_in_queued_state(report_name, filters): +def get_reports_in_queued_state(report_name: str, filters: dict[str, Any] | str | list): return frappe.get_all( "Prepared Report", filters={ @@ -252,7 +252,7 @@ def expire_stalled_report(): @frappe.whitelist() -def delete_prepared_reports(reports): +def delete_prepared_reports(reports: str | list[dict[str, Any]]): reports = frappe.parse_json(reports) for report in reports: prepared_report = frappe.get_doc("Prepared Report", report["name"]) @@ -284,7 +284,7 @@ def create_json_gz_file(data, dt, dn, report_name): @frappe.whitelist() -def download_attachment(dn): +def download_attachment(dn: str): pr = frappe.get_doc("Prepared Report", dn) if not pr.has_permission("read"): frappe.throw(frappe._("Cannot Download Report due to insufficient permissions")) @@ -330,7 +330,7 @@ def has_permission(doc, user): @frappe.whitelist() -def enqueue_json_to_csv_conversion(prepared_report_name): +def enqueue_json_to_csv_conversion(prepared_report_name: str): """Call this to enqueue the conversion in background.""" enqueue(method=convert_json_to_csv, queue="long", prepared_report_name=prepared_report_name) diff --git a/frappe/core/doctype/recorder/recorder.py b/frappe/core/doctype/recorder/recorder.py index 6102d8c736..a212910fdc 100644 --- a/frappe/core/doctype/recorder/recorder.py +++ b/frappe/core/doctype/recorder/recorder.py @@ -116,7 +116,7 @@ def serialize_request(request): @frappe.whitelist() -def add_indexes(indexes): +def add_indexes(indexes: str): frappe.only_for("Administrator") indexes = json.loads(indexes) diff --git a/frappe/core/doctype/role/role.py b/frappe/core/doctype/role/role.py index 3bf470493c..5a161f1b97 100644 --- a/frappe/core/doctype/role/role.py +++ b/frappe/core/doctype/role/role.py @@ -120,7 +120,9 @@ def get_users(role): # searches for active employees @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def role_query(doctype, txt, searchfield, start, page_len, filters): +def role_query( + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: list | dict | str +): return frappe.get_all( "Role", limit_start=start, diff --git a/frappe/core/doctype/rq_job/rq_job.py b/frappe/core/doctype/rq_job/rq_job.py index 02375da8bc..98ff58b84b 100644 --- a/frappe/core/doctype/rq_job/rq_job.py +++ b/frappe/core/doctype/rq_job/rq_job.py @@ -241,7 +241,7 @@ def get_all_queued_jobs(): @frappe.whitelist() -def stop_job(job_id): +def stop_job(job_id: str): frappe.get_doc("RQ Job", job_id).stop_job() diff --git a/frappe/core/doctype/server_script/server_script.py b/frappe/core/doctype/server_script/server_script.py index be03d17bd3..35277ba2ef 100644 --- a/frappe/core/doctype/server_script/server_script.py +++ b/frappe/core/doctype/server_script/server_script.py @@ -211,16 +211,21 @@ class ServerScript(Document): safe_exec(self.script, script_filename=self.name) - def get_permission_query_conditions(self, user: str) -> list[str]: + def get_permission_query_conditions(self, user: str, active_child_tables=None) -> list[str]: """Specific to Permission Query Server Scripts. Args: user (str): Take user email to execute script and return list of conditions. + active_child_tables (list, optional): A list of child table names involved in the current SQL query. Return: list: Return list of conditions defined by rules in self.script. """ - locals = {"user": user, "conditions": ""} + locals = { + "user": user, + "conditions": "", + "active_child_tables": active_child_tables or [], + } safe_exec(self.script, None, locals, script_filename=self.name) if locals["conditions"]: return locals["conditions"] diff --git a/frappe/core/doctype/session_default_settings/session_default_settings.py b/frappe/core/doctype/session_default_settings/session_default_settings.py index 8d9b15eb74..01e1c4234c 100644 --- a/frappe/core/doctype/session_default_settings/session_default_settings.py +++ b/frappe/core/doctype/session_default_settings/session_default_settings.py @@ -2,6 +2,7 @@ # License: MIT. See LICENSE import json +from typing import Any import frappe from frappe import _ @@ -43,7 +44,7 @@ def get_session_default_values(): @frappe.whitelist() -def set_session_default_values(default_values): +def set_session_default_values(default_values: str | dict[str, Any]): default_values = frappe.parse_json(default_values) for entry in default_values: try: diff --git a/frappe/core/doctype/sms_settings/sms_settings.py b/frappe/core/doctype/sms_settings/sms_settings.py index 6d9207db88..f33ea63397 100644 --- a/frappe/core/doctype/sms_settings/sms_settings.py +++ b/frappe/core/doctype/sms_settings/sms_settings.py @@ -46,7 +46,7 @@ def validate_receiver_nos(receiver_list): @frappe.whitelist() -def get_contact_number(contact_name, ref_doctype, ref_name): +def get_contact_number(contact_name: str, ref_doctype: str, ref_name: str): "Return mobile number of the given contact." number = frappe.db.sql( """select mobile_no, phone from tabContact @@ -62,7 +62,7 @@ def get_contact_number(contact_name, ref_doctype, ref_name): @frappe.whitelist() -def send_sms(receiver_list, msg, sender_name="", success_msg=True): +def send_sms(receiver_list: str | list[str], msg: str, sender_name: str = "", success_msg: bool = True): send_sms_hook_methods = frappe.get_hooks("send_sms") if send_sms_hook_methods: return frappe.get_attr(send_sms_hook_methods[-1])(receiver_list, msg, sender_name, success_msg) diff --git a/frappe/core/doctype/submission_queue/submission_queue.py b/frappe/core/doctype/submission_queue/submission_queue.py index e61a9fda29..dc0cbba962 100644 --- a/frappe/core/doctype/submission_queue/submission_queue.py +++ b/frappe/core/doctype/submission_queue/submission_queue.py @@ -192,7 +192,7 @@ def queue_submission(doc: Document, action: str, alert: bool = True): @frappe.whitelist() -def get_latest_submissions(doctype, docname): +def get_latest_submissions(doctype: str, docname: str | int): # NOTE: not used creation as orderby intentianlly as we have used update_modified=False everywhere # hence assuming modified will be equal to creation for submission queue documents diff --git a/frappe/core/doctype/user/user.js b/frappe/core/doctype/user/user.js index eed6827c6f..4be1cfadec 100644 --- a/frappe/core/doctype/user/user.js +++ b/frappe/core/doctype/user/user.js @@ -440,9 +440,6 @@ frappe.ui.form.on("User Role Profile", { frm.roles_editor.show(); } }); - if (frm.roles_editor) { - $(".deselect-all, .select-all").prop("disabled", true); - } } }, role_profiles_remove: function (frm) { @@ -450,7 +447,6 @@ frappe.ui.form.on("User Role Profile", { if (frm.roles_editor) { frm.roles_editor.disable = 0; frm.roles_editor.show(); - $(".deselect-all, .select-all").prop("disabled", false); } } }, diff --git a/frappe/core/doctype/user/user.json b/frappe/core/doctype/user/user.json index d6f9c13cbe..8dcb413e78 100644 --- a/frappe/core/doctype/user/user.json +++ b/frappe/core/doctype/user/user.json @@ -49,7 +49,6 @@ "mute_sounds", "desk_theme", "code_editor_type", - "banner_image", "navigation_settings_section", "search_bar", "notifications", @@ -298,11 +297,6 @@ "label": "Location", "no_copy": 1 }, - { - "fieldname": "banner_image", - "fieldtype": "Attach Image", - "label": "Banner Image" - }, { "fieldname": "column_break_22", "fieldtype": "Column Break" diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index 37abbcca91..cebd245531 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -4,6 +4,7 @@ from collections.abc import Iterable from datetime import timedelta from functools import cached_property +from typing import Any import frappe import frappe.defaults @@ -74,7 +75,6 @@ class User(Document): allowed_in_mentions: DF.Check api_key: DF.Data | None api_secret: DF.Password | None - banner_image: DF.AttachImage | None bio: DF.SmallText | None birth_date: DF.Date | None block_modules: DF.Table[BlockModule] @@ -899,13 +899,7 @@ def get_all_roles(): @frappe.whitelist() -def get_roles(arg=None): - """get roles for a user""" - return frappe.get_roles(frappe.form_dict.get("uid", frappe.session.user)) - - -@frappe.whitelist() -def get_perm_info(role): +def get_perm_info(role: str): """get permission info""" from frappe.permissions import get_all_perms @@ -966,7 +960,9 @@ def update_password( @frappe.whitelist(allow_guest=True) -def test_password_strength(new_password: str, key=None, old_password=None, user_data: tuple | None = None): +def test_password_strength( + new_password: str, key: str | None = None, old_password: str | None = None, user_data: tuple | None = None +): from frappe.utils.password_strength import test_password_strength as _test_password_strength if key is not None or old_password is not None: @@ -1008,7 +1004,7 @@ def has_email_account(email: str): @frappe.whitelist(allow_guest=False) -def get_email_awaiting(user): +def get_email_awaiting(user: str): return frappe.get_all( "User Email", fields=["email_account", "email_id"], @@ -1069,7 +1065,7 @@ def reset_user_data(user): @frappe.whitelist(methods=["POST"]) -def verify_password(password): +def verify_password(password: str): frappe.local.login_manager.check_password(frappe.session.user, password) @@ -1151,7 +1147,7 @@ def reset_password(user: str) -> str: @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def user_query(doctype, txt, searchfield, start, page_len, filters): +def user_query(doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: dict[str, Any]): doctype = "User" list_filters = { @@ -1426,7 +1422,7 @@ def generate_keys(user: str): @frappe.whitelist() -def switch_theme(theme): +def switch_theme(theme: str): if theme in ["Dark", "Light", "Automatic"]: frappe.db.set_value("User", frappe.session.user, "desk_theme", theme) @@ -1441,7 +1437,7 @@ def get_enabled_users(): @frappe.whitelist(methods=["POST"]) def impersonate(user: str, reason: str): - frappe.has_permission("User", "impersonate") + frappe.has_permission("User", "impersonate", throw=True) impersonator = frappe.session.user frappe.get_doc( @@ -1463,16 +1459,18 @@ def impersonate(user: str, reason: str): notification.set("type", "Alert") notification.insert(ignore_permissions=True) # notify user via email too - user_email = frappe.db.get_value("User", user, "email") - email_message = _( - "User {0} has started an impersonation session as you.

Reason provided: {1}" - ).format(escape_html(impersonator), escape_html(reason)) + outgoing_email_exists = frappe.db.exists("Email Account", {"default_outgoing": 1, "awaiting_password": 0}) + if outgoing_email_exists: + user_email = frappe.db.get_value("User", user, "email") + email_message = _( + "User {0} has started an impersonation session as you.

Reason provided: {1}" + ).format(escape_html(impersonator), escape_html(reason)) - frappe.sendmail( - recipients=[user_email], - subject=_("Security Alert: Your account is being impersonated"), - content=email_message, - ) + frappe.sendmail( + recipients=[user_email], + subject=_("Security Alert: Your account is being impersonated"), + content=email_message, + ) frappe.local.login_manager.impersonate(user) diff --git a/frappe/core/doctype/user_permission/user_permission.py b/frappe/core/doctype/user_permission/user_permission.py index 9001b2893d..380d432833 100644 --- a/frappe/core/doctype/user_permission/user_permission.py +++ b/frappe/core/doctype/user_permission/user_permission.py @@ -2,6 +2,7 @@ # License: MIT. See LICENSE import json +from typing import Any import frappe from frappe import _ @@ -85,7 +86,7 @@ def send_user_permissions(bootinfo): @frappe.whitelist() -def get_user_permissions(user=None): +def get_user_permissions(user: str | None = None): """Get all users permissions for the user as a dict of doctype""" # if this is called from client-side, # user can access only his/her user permissions @@ -160,7 +161,9 @@ def user_permission_exists(user, allow, for_value, applicable_for=None): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def get_applicable_for_doctype_list(doctype, txt, searchfield, start, page_len, filters): +def get_applicable_for_doctype_list( + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: dict[str, Any] +): actual_doctype = filters.get("doctype") linked_doctypes_map = get_linked_doctypes(actual_doctype, True) @@ -192,7 +195,7 @@ def get_permitted_documents(doctype): @frappe.whitelist() -def check_applicable_doc_perm(user, doctype, docname): +def check_applicable_doc_perm(user: str, doctype: str, docname: str | int): frappe.only_for("System Manager") applicable = [] doc_exists = frappe.get_all( @@ -224,7 +227,7 @@ def check_applicable_doc_perm(user, doctype, docname): @frappe.whitelist() -def clear_user_permissions(user, for_doctype): +def clear_user_permissions(user: str, for_doctype: str): frappe.only_for("System Manager") total = frappe.db.count("User Permission", {"user": user, "allow": for_doctype}) @@ -242,7 +245,7 @@ def clear_user_permissions(user, for_doctype): @frappe.whitelist() -def add_user_permissions(data): +def add_user_permissions(data: str | dict[str, Any]): """Add and update the user permissions""" frappe.only_for("System Manager") if isinstance(data, str): diff --git a/frappe/core/doctype/user_type/user_type.py b/frappe/core/doctype/user_type/user_type.py index 046e3203f9..be839e7fcb 100644 --- a/frappe/core/doctype/user_type/user_type.py +++ b/frappe/core/doctype/user_type/user_type.py @@ -84,13 +84,14 @@ class UserType(Document): title=_("Permission Error"), ) - if not limit: - frappe.throw( + if limit is None: + frappe.msgprint( _("The limit has not set for the user type {0} in the site config file.").format( frappe.bold(self.name) ), title=_("Set Limit"), ) + return if self.user_doctypes and len(self.user_doctypes) > limit: frappe.throw( @@ -218,7 +219,9 @@ def get_non_standard_user_types(): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def get_user_linked_doctypes(doctype, txt, searchfield, start, page_len, filters): +def get_user_linked_doctypes( + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: dict | list | str +): modules = [d.get("module_name") for d in get_modules_from_app("frappe")] filters = [ @@ -254,7 +257,7 @@ def get_user_linked_doctypes(doctype, txt, searchfield, start, page_len, filters @frappe.whitelist() -def get_user_id(parent): +def get_user_id(parent: str): data = ( frappe.get_all( "DocField", diff --git a/frappe/core/page/permission_manager/permission_manager.py b/frappe/core/page/permission_manager/permission_manager.py index 68a1fd8e3c..0e5f2c828c 100644 --- a/frappe/core/page/permission_manager/permission_manager.py +++ b/frappe/core/page/permission_manager/permission_manager.py @@ -113,13 +113,20 @@ def get_permissions(doctype: str | None = None, role: str | None = None): @frappe.whitelist() -def add(parent, role, permlevel): +def add(parent: str, role: str, permlevel: int): frappe.only_for("System Manager") add_permission(parent, role, permlevel) @frappe.whitelist() -def update(doctype: str, role: str, permlevel: int, ptype: str, value=None, if_owner=0) -> str | None: +def update( + doctype: str, + role: str, + permlevel: int, + ptype: str, + value: str | int | None = None, + if_owner: str | int = 0, +) -> str | None: """Update role permission params. Args: @@ -152,7 +159,7 @@ def update(doctype: str, role: str, permlevel: int, ptype: str, value=None, if_o @frappe.whitelist() -def remove(doctype, role, permlevel, if_owner=0): +def remove(doctype: str, role: str, permlevel: int, if_owner: str | int = 0): frappe.only_for("System Manager") setup_custom_perms(doctype) @@ -169,20 +176,20 @@ def remove(doctype, role, permlevel, if_owner=0): @frappe.whitelist() -def reset(doctype): +def reset(doctype: str): frappe.only_for("System Manager") reset_perms(doctype) clear_permissions_cache(doctype) @frappe.whitelist() -def get_users_with_role(role): +def get_users_with_role(role: str): frappe.only_for("System Manager") return _get_user_with_role(role) @frappe.whitelist() -def get_standard_permissions(doctype): +def get_standard_permissions(doctype: str): frappe.only_for("System Manager") meta = frappe.get_meta(doctype) if meta.custom: diff --git a/frappe/core/report/permitted_documents_for_user/permitted_documents_for_user.py b/frappe/core/report/permitted_documents_for_user/permitted_documents_for_user.py index ddde4ee833..de8dc94f28 100644 --- a/frappe/core/report/permitted_documents_for_user/permitted_documents_for_user.py +++ b/frappe/core/report/permitted_documents_for_user/permitted_documents_for_user.py @@ -1,6 +1,8 @@ # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors # License: MIT. See LICENSE +from typing import Any + import frappe import frappe.utils.user from frappe.model import data_fieldtypes @@ -44,7 +46,9 @@ def get_columns_and_fields(doctype): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def query_doctypes(doctype, txt, searchfield, start, page_len, filters): +def query_doctypes( + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: dict[str, Any] +): user = filters.get("user") user_perms = frappe.utils.user.UserPermissions(user) user_perms.build_permissions() diff --git a/frappe/custom/doctype/custom_field/custom_field.py b/frappe/custom/doctype/custom_field/custom_field.py index 02bd0d368c..1ad9b98d60 100644 --- a/frappe/custom/doctype/custom_field/custom_field.py +++ b/frappe/custom/doctype/custom_field/custom_field.py @@ -269,7 +269,7 @@ class CustomField(Document): @frappe.whitelist() -def get_fields_label(doctype=None): +def get_fields_label(doctype: str | None = None): meta = frappe.get_meta(doctype) if doctype in core_doctypes_list: diff --git a/frappe/custom/doctype/customize_form/customize_form.py b/frappe/custom/doctype/customize_form/customize_form.py index dc49394630..a207080a7d 100644 --- a/frappe/custom/doctype/customize_form/customize_form.py +++ b/frappe/custom/doctype/customize_form/customize_form.py @@ -710,7 +710,7 @@ def is_standard_or_system_generated_field(df): @frappe.whitelist() -def get_link_filters_from_doc_without_customisations(doctype, fieldname): +def get_link_filters_from_doc_without_customisations(doctype: str, fieldname: str): """Get the filters of a link field from a doc without customisations In backend the customisations are not applied. Customisations are applied in the client side. diff --git a/frappe/database/database.py b/frappe/database/database.py index e69c871b13..2b3e43422f 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -275,9 +275,11 @@ class Database: frappe.log(f"Syntax error in query:\n{query} {values or ''}") elif self.is_deadlocked(e): + self.db_type == "mariadb" and frappe.log_error("Query deadlocked", defer_insert=True) raise frappe.QueryDeadlockError(e) from e elif self.is_timedout(e): + self.db_type == "mariadb" and frappe.log_error("Query timed out", defer_insert=True) raise frappe.QueryTimeoutError(e) from e elif self.is_read_only_mode_error(e): @@ -632,6 +634,9 @@ class Database: from frappe.model.utils import is_single_doctype out = None + if isinstance(fieldname, list): + fieldname = tuple(fieldname) + if cache and isinstance(filters, str) and fieldname in self.value_cache[doctype][filters]: return self.value_cache[doctype][filters][fieldname] diff --git a/frappe/database/mariadb/schema.py b/frappe/database/mariadb/schema.py index 736a6f9f41..9039ff3356 100644 --- a/frappe/database/mariadb/schema.py +++ b/frappe/database/mariadb/schema.py @@ -2,7 +2,7 @@ from pymysql.constants.ER import DUP_ENTRY import frappe from frappe import _ -from frappe.database.schema import DBTable +from frappe.database.schema import DbColumn, DBTable from frappe.utils.defaults import get_not_null_defaults @@ -96,6 +96,37 @@ class MariaDBTable(DBTable): ): add_index_query.append("ADD INDEX `modified`(`modified`)") + # logic to drop unique constraint for fields deleted from a doctype + meta_columns = set(self.columns.keys()) + db_columns = set(self.current_columns.keys()) + + for col in db_columns: + if ( + col not in meta_columns + and col not in frappe.db.DEFAULT_COLUMNS + and col not in frappe.db.OPTIONAL_COLUMNS + ): + has_unique = frappe.db.get_column_index(self.table_name, col, unique=True) + + if not has_unique: + continue + + current_col = self.current_columns.get(col) + + deleted_col = DbColumn( + table=self, + fieldname=current_col.name, + fieldtype=current_col.type, + length=None, + default=None, + set_index=current_col.index, + options=None, + unique=False, + precision=None, + not_nullable=current_col.not_nullable, + ) + self.drop_unique.append(deleted_col) + drop_index_query = [] for col in {*self.drop_index, *self.drop_unique}: diff --git a/frappe/database/postgres/schema.py b/frappe/database/postgres/schema.py index aca6a778f3..37025550bd 100644 --- a/frappe/database/postgres/schema.py +++ b/frappe/database/postgres/schema.py @@ -1,6 +1,6 @@ import frappe from frappe import _ -from frappe.database.schema import DBTable, get_definition +from frappe.database.schema import DbColumn, DBTable, get_definition from frappe.utils import cint, flt from frappe.utils.defaults import get_not_null_defaults @@ -131,6 +131,50 @@ class PostgresTable(DBTable): index_name=col.fieldname, table_name=self.table_name, field=col.fieldname ) + # logic to drop unique constraint for fields deleted from a doctype + meta_columns = set(self.columns.keys()) + db_columns = set(self.current_columns.keys()) + + for col in db_columns: + if ( + col not in meta_columns + and col not in frappe.db.DEFAULT_COLUMNS + and col not in frappe.db.OPTIONAL_COLUMNS + ): + has_unique_index = frappe.db.sql( + """ + SELECT 1 + FROM pg_indexes + WHERE tablename = %s + AND indexname IN (%s, %s) + LIMIT 1 + """, + ( + self.table_name, + f"{self.table_name}_{col}_key", + f"unique_{col}", + ), + ) + + if not has_unique_index: + continue + + current_col = self.current_columns.get(col) + + deleted_col = DbColumn( + table=self, + fieldname=current_col.name, + fieldtype=current_col.type, + length=None, + default=None, + set_index=current_col.index, + options=None, + unique=False, + precision=None, + not_nullable=current_col.not_nullable, + ) + self.drop_unique.append(deleted_col) + drop_contraint_query = "" for col in self.drop_index: # primary key @@ -141,8 +185,35 @@ class PostgresTable(DBTable): for col in self.drop_unique: # primary key if col.fieldname != "name": - # if index key exists - drop_contraint_query += f'DROP INDEX IF EXISTS "unique_{col.fieldname}" ;' + # drop unique constraint first if exists which automatically drops the underlying index also + unique_constraint_exists = frappe.db.sql( + """ + SELECT 1 + FROM pg_constraint + WHERE conname = %s + """, + (f"{self.table_name}_{col.fieldname}_key",), + ) + + if unique_constraint_exists: + drop_contraint_query += f'ALTER TABLE "{self.table_name}" DROP CONSTRAINT IF EXISTS "{self.table_name}_{col.fieldname}_key" ;' + + # drop the unique index backed by no constraint directly + unique_index_exists = frappe.db.sql( + """ + SELECT 1 + FROM pg_indexes + WHERE tablename = %s + AND indexname = %s + """, + ( + self.table_name, + f"unique_{col.fieldname}", + ), + ) + + if unique_index_exists: + drop_contraint_query += f'DROP INDEX IF EXISTS "unique_{col.fieldname}" ;' change_nullability = [] for col in self.change_nullability: diff --git a/frappe/database/query.py b/frappe/database/query.py index 232cf47e92..1945ee64d7 100644 --- a/frappe/database/query.py +++ b/frappe/database/query.py @@ -134,10 +134,6 @@ TAB_PATTERN = re.compile("^tab") WORDS_PATTERN = re.compile(r"\w+") COMMA_PATTERN = re.compile(r",\s*(?![^()]*\))") -# less restrictive version of frappe.core.doctype.doctype.doctype.START_WITH_LETTERS_PATTERN -# to allow table names like __Auth -TABLE_NAME_PATTERN = re.compile(r"^[\w -]*$", flags=re.ASCII) - # Pattern for validating simple field names (alphanumeric + underscore) SIMPLE_FIELD_PATTERN = re.compile(r"^\w+$", flags=re.ASCII) @@ -266,13 +262,14 @@ class Engine: self.field_aliases = set() self.db_query_compat = db_query_compat self.permitted_fields_cache = {} # Cache for get_permitted_fields results + self.is_aggregate_query = False + self._grouped_queries = set() if isinstance(table, Table): self.table = table self.doctype = get_doctype_name(table.get_sql()) else: self.doctype = table - self.validate_doctype() self.table = qb.DocType(table) if self.apply_permissions: @@ -313,19 +310,24 @@ class Engine: if for_update: self.query = self.query.for_update(skip_locked=skip_locked, nowait=not wait) + if any(isinstance(f, functions.AggregateFunction) for f in getattr(self, "fields", [])): + # check if any field in select is aggregated (done to prevent breaking queries in postgres due to order by rule) + self.is_aggregate_query = True + if group_by: + self.is_aggregate_query = True # for postgres (group by used with order by) self.apply_group_by(group_by) if order_by: if not ( - self.is_postgres and is_select and (distinct or group_by) + self.is_postgres and is_select and distinct ): # ignore in Postgres since order by fields need to appear in select distinct self.apply_order_by(order_by) else: warnings.warn( ( "ORDER BY fields have been ignored because PostgreSQL requires them to " - "appear in the SELECT list when using DISTINCT or GROUP BY." + "appear in the SELECT list when using with DISTINCT" ), UserWarning, stacklevel=2, @@ -340,16 +342,12 @@ class Engine: self.query.immutable = True return self.query - def validate_doctype(self): - if not TABLE_NAME_PATTERN.match(self.doctype): - frappe.throw(_("Invalid DocType: {0}").format(self.doctype)) - def apply_fields(self, fields): self.fields = self.parse_fields(fields) # Track field aliases for use in group_by/order_by for field in self.fields: - if isinstance(field, Field | DynamicTableField) and field.alias: + if isinstance(field, Field | DynamicTableField | AggregateFunction) and field.alias: self.field_aliases.add(field.alias) if self.apply_permissions: @@ -597,6 +595,20 @@ class Engine: v.strip().strip("'") for v in get_between_date_filter(_value, df).split(" AND ") ) + # Handle empty lists for IN/NOT IN operators before conversion + # IN with empty list should return 0 results (always False) + # NOT IN with empty list should return all results (always True) + if _operator.lower() in ("in", "not in"): + if isinstance(_value, (list, tuple, set)) and len(_value) == 0: + if _operator.lower() == "in": + # Return a criterion that always evaluates to False (1=0) + # This ensures IN with empty list returns 0 results + return RawCriterion("1=0") + else: # not in + # Return a criterion that always evaluates to True (1=1) + # NOT IN with empty set matches all rows since nothing is excluded + return RawCriterion("1=1") + if not _value and isinstance(_value, list | tuple | set): _value = ("",) @@ -807,7 +819,7 @@ class Engine: if parsed := self._parse_backtick_field_notation(field): table_name, field_name = parsed - self._check_field_permission(table_name, field_name) + self.check_filter_field_permission(table_name, field_name) # Return query builder field reference return frappe.qb.DocType(table_name)[field_name] @@ -830,7 +842,7 @@ class Engine: parent_doctype_for_perm = ( dynamic_field.parent_doctype if isinstance(dynamic_field, ChildTableField) else None ) - self._check_field_permission(target_doctype, target_fieldname, parent_doctype_for_perm) + self.check_filter_field_permission(target_doctype, target_fieldname, parent_doctype_for_perm) self.query = dynamic_field.apply_join(self.query, engine=self) # Return the pypika Field object associated with the dynamic field @@ -874,7 +886,9 @@ class Engine: # If it's not a child table, check permissions if not parent_fieldname: - self._check_field_permission(target_doctype, target_fieldname, parent_doctype_for_perm) + self.check_filter_field_permission( + target_doctype, target_fieldname, parent_doctype_for_perm + ) return frappe.qb.DocType(target_doctype)[target_fieldname] # Create a ChildTableField instance to handle join and field access @@ -888,7 +902,7 @@ class Engine: # For permission check, the parent is the main doctype parent_doctype_for_perm = self.doctype - self._check_field_permission(target_doctype, target_fieldname, parent_doctype_for_perm) + self.check_filter_field_permission(target_doctype, target_fieldname, parent_doctype_for_perm) # Delegate join logic self.query = child_field_handler.apply_join(self.query, engine=self) @@ -928,18 +942,32 @@ class Engine: parent_fieldname=df.fieldname, ) parent_doctype_for_perm = self.doctype - self._check_field_permission( + self.check_filter_field_permission( df.options, target_fieldname, parent_doctype_for_perm ) self.query = child_field_handler.apply_join(self.query, engine=self) return child_field_handler.field - self._check_field_permission(target_doctype, target_fieldname, parent_doctype_for_perm) + self.check_filter_field_permission(target_doctype, target_fieldname, parent_doctype_for_perm) # Convert string field name to pypika Field object for the specified/current doctype return frappe.qb.DocType(target_doctype)[target_fieldname] - def _check_field_permission(self, doctype: str, fieldname: str, parent_doctype: str | None = None): - """Check if the user has permission to access the given field""" + def check_select_field_permission(self, doctype: str, fieldname: str, parent_doctype: str | None = None): + """Check if the user has permission to select the given field.""" + self._check_field_permission(doctype, fieldname, parent_doctype, for_filtering=False) + + def check_filter_field_permission(self, doctype: str, fieldname: str, parent_doctype: str | None = None): + """Check if the user has permission to filter/order/group by the given field. + + It allows all permlevel 0 fields for users with select permission, + and all permitted fields for users with read permission. + """ + self._check_field_permission(doctype, fieldname, parent_doctype, for_filtering=True) + + def _check_field_permission( + self, doctype: str, fieldname: str, parent_doctype: str | None = None, for_filtering: bool = False + ): + """Check if the user has permission to access the given field.""" if not self.apply_permissions: return @@ -961,7 +989,10 @@ class Engine: frappe.PermissionError, ) - permitted_fields = self._get_cached_permitted_fields(doctype, parent_doctype, permission_type) + permission_source = ( + self._get_filterable_fields if for_filtering else self._get_cached_permitted_fields + ) + permitted_fields = permission_source(doctype, parent_doctype, permission_type) if fieldname not in permitted_fields: frappe.throw( @@ -987,6 +1018,42 @@ class Engine: ) return self.permitted_fields_cache[cache_key] + def _get_filterable_fields( + self, doctype: str, parenttype: str | None = None, permission_type: str | None = None + ) -> set: + """Get fields that can be used in filters/order by/group by. + + For users with only select permission on parent doctypes, this returns + all permlevel 0 fields (not just search fields which are used for selected fields). + For users with read permission, returns standard permitted fields. + """ + if permission_type is None: + permission_type = self.get_permission_type(doctype, parenttype) + + if permission_type == "select": + meta = frappe.get_meta(doctype) + + # Only allow filtering by all permlevel 0 fields for parent doctypes. + if meta.istable: + return set() + + # for select permission on parent doctype, allow all permlevel 0 fields in filters + cache_key = (doctype, None, "_filterable_select") + if cache_key not in self.permitted_fields_cache: + if doctype in CORE_DOCTYPES: + # core doctypes have no restrictions - return all valid columns + self.permitted_fields_cache[cache_key] = set(meta.get_valid_columns()) + else: + permlevel_0_fields = set(meta.default_fields) | OPTIONAL_FIELDS + for df in meta.get_fieldnames_with_value(with_field_meta=True, with_virtual_fields=False): + if df.permlevel == 0: + permlevel_0_fields.add(df.fieldname) + self.permitted_fields_cache[cache_key] = permlevel_0_fields + return self.permitted_fields_cache[cache_key] + else: + # for read permission, use standard permitted fields + return self._get_cached_permitted_fields(doctype, parenttype, permission_type) + def parse_string_field(self, field: str): """ Parses a field string into a pypika Field object. @@ -1023,11 +1090,6 @@ class Engine: field_name = groups[3] # This will be the field name (e.g., 'field') if table_name: - # Table name specified (e.g., `tabX`.`y` or tabX.y or `tabX Y`.`y`) - # Ensure the extracted table name is valid before creating DocType object - if not TABLE_NAME_PATTERN.match(table_name.lstrip("tab")): - frappe.throw(_("Invalid characters in table name: {0}").format(table_name)) - doctype_name = table_name[3:] if table_name.startswith("tab") else table_name table_obj = frappe.qb.DocType(doctype_name) pypika_field = table_obj[field_name] @@ -1135,8 +1197,24 @@ class Engine: # Note: Comma handling is done in parse_fields before this method is called return self.parse_string_field(field) + def _normalize_postgres_order_field(self, field): + """In PostgreSQL order_by fields need to either be in group_by or be aggregated + when used with select and group_by""" + current_sql = field.get_sql() if hasattr(field, "get_sql") else str(field) + if current_sql in self._grouped_queries: + return field + clean_name = current_sql.strip('"') + if clean_name in self.field_aliases: + return field + if not isinstance(field, functions.AggregateFunction): + return functions.Max(field) + return field + def apply_group_by(self, group_by: str | None = None): parsed_group_by_fields = self._validate_group_by(group_by) + self._grouped_queries = { + f.get_sql() if hasattr(f, "get_sql") else str(f) for f in parsed_group_by_fields + } self.query = self.query.groupby(*parsed_group_by_fields) def apply_order_by(self, order_by: str | None): @@ -1146,7 +1224,12 @@ class Engine: parsed_order_fields = self._validate_order_by(order_by) for order_field, order_direction in parsed_order_fields: - self.query = self.query.orderby(order_field, order=order_direction) + if self.is_postgres and self.is_aggregate_query: + self.query = self.query.orderby( + self._normalize_postgres_order_field(order_field), order=order_direction + ) + else: + self.query = self.query.orderby(order_field, order=order_direction) def _apply_default_order_by(self): """Apply default ordering based on configured DocType metadata""" @@ -1165,14 +1248,24 @@ class Engine: order_direction = Order.desc if spec_order == "desc" else Order.asc else: order_direction = Order.asc if spec_order == "asc" else Order.desc - self.query = self.query.orderby(field, order=order_direction) + if self.is_postgres and self.is_aggregate_query: + self.query = self.query.orderby( + self._normalize_postgres_order_field(field), order=order_direction + ) + else: + self.query = self.query.orderby(field, order=order_direction) else: field = self.table[sort_field] if self.db_query_compat: order_direction = Order.desc if sort_order.lower() == "desc" else Order.asc else: order_direction = Order.asc if sort_order.lower() == "asc" else Order.desc - self.query = self.query.orderby(field, order=order_direction) + if self.is_postgres and self.is_aggregate_query: + self.query = self.query.orderby( + self._normalize_postgres_order_field(field), order=order_direction + ) + else: + self.query = self.query.orderby(field, order=order_direction) def _parse_backtick_field_notation(self, field_name: str) -> tuple[str, str] | None: """ @@ -1209,7 +1302,7 @@ class Engine: if "`" in field_name: if parsed := self._parse_backtick_field_notation(field_name): table_name, field_name = parsed - self._check_field_permission(table_name, field_name) + self.check_filter_field_permission(table_name, field_name) return frappe.qb.DocType(table_name)[field_name] # If parsing failed, fall through to error handling below @@ -1223,14 +1316,14 @@ class Engine: if dynamic_field: # Check permissions for dynamic field if isinstance(dynamic_field, ChildTableField): - self._check_field_permission( + self.check_filter_field_permission( dynamic_field.doctype, dynamic_field.fieldname, dynamic_field.parent_doctype ) elif isinstance(dynamic_field, LinkTableField): # Check permission for the link field in parent doctype - self._check_field_permission(self.doctype, dynamic_field.link_fieldname) + self.check_filter_field_permission(self.doctype, dynamic_field.link_fieldname) # Check permission for the target field in linked doctype - self._check_field_permission(dynamic_field.doctype, dynamic_field.fieldname) + self.check_filter_field_permission(dynamic_field.doctype, dynamic_field.fieldname) # Apply join for the dynamic field self.query = dynamic_field.apply_join(self.query, engine=self) @@ -1246,7 +1339,7 @@ class Engine: ) # Check permissions for simple field - self._check_field_permission(self.doctype, field_name) + self.check_filter_field_permission(self.doctype, field_name) # Create Field object for simple field return self.table[field_name] @@ -1533,6 +1626,16 @@ class Engine: return where_condition + def get_queried_tables(self) -> list[str]: + """Extract all table names involved in the current query.""" + tables = [] + for table in self.query._from: + tables.append(table.get_sql()) + + for join in self.query._joins: + tables.append(join.item.get_sql()) + return list(set(tables)) + def get_permission_query_conditions(self, doctype: str | None = None) -> list["RawCriterion"]: """Add permission query conditions from hooks and server scripts""" from frappe.core.doctype.server_script.server_script_utils import get_server_script_map @@ -1546,10 +1649,20 @@ class Engine: if c := frappe.call(frappe.get_attr(method), self.user, doctype=doctype): conditions.append(RawCriterion(f"({c})")) + active_child_tables = [] + current_tables = self.get_queried_tables() + if len(current_tables) > 1: + main_table_name = f"tab{self.doctype}" + for table_name in current_tables: + if table_name != main_table_name: + active_child_tables.append(table_name) + # Get conditions from server scripts if permission_script_name := get_server_script_map().get("permission_query", {}).get(doctype): script = frappe.get_doc("Server Script", permission_script_name) - if condition := script.get_permission_query_conditions(self.user): + if condition := script.get_permission_query_conditions( + self.user, active_child_tables=active_child_tables + ): conditions.append(RawCriterion(f"({condition})")) return conditions @@ -2287,7 +2400,7 @@ class SQLFunctionParser: elif "`" in arg: if parsed := self.engine._parse_backtick_field_notation(arg): table_name, field_name = parsed - self.engine._check_field_permission(table_name, field_name) + self.engine.check_select_field_permission(table_name, field_name) return Table(f"tab{table_name}")[field_name] else: frappe.throw( @@ -2336,4 +2449,4 @@ class SQLFunctionParser: def _check_function_field_permission(self, field_name: str): if self.engine.apply_permissions and self.engine.doctype: - self.engine._check_field_permission(self.engine.doctype, field_name) + self.engine.check_select_field_permission(self.engine.doctype, field_name) diff --git a/frappe/desk/calendar.py b/frappe/desk/calendar.py index 2570a728d6..56a113d2a1 100644 --- a/frappe/desk/calendar.py +++ b/frappe/desk/calendar.py @@ -2,6 +2,7 @@ # License: MIT. See LICENSE import json +from datetime import date import frappe from frappe import _ @@ -10,7 +11,7 @@ from frappe.query_builder.terms import ValueWrapper @frappe.whitelist() -def update_event(args, field_map): +def update_event(args: str, field_map: str): """Updates Event (called via calendar) based on passed `field_map`""" args = frappe._dict(json.loads(args)) field_map = frappe._dict(json.loads(field_map)) @@ -31,7 +32,14 @@ def get_event_conditions(doctype, filters=None): @frappe.whitelist() -def get_events(doctype, start, end, field_map, filters=None, fields=None): +def get_events( + doctype: str, + start: date, + end: date, + field_map: str, + filters: str | None = None, + fields: str | list[str] | None = None, +): field_map = frappe._dict(json.loads(field_map)) fields = frappe.parse_json(fields) diff --git a/frappe/desk/desktop.py b/frappe/desk/desktop.py index 6cef687b9e..a2152f63d5 100644 --- a/frappe/desk/desktop.py +++ b/frappe/desk/desktop.py @@ -384,7 +384,7 @@ class Workspace: @frappe.whitelist() @frappe.read_only() -def get_desktop_page(page): +def get_desktop_page(page: str): """Apply permissions, customizations and return the configuration for a page on desk. Args: @@ -681,7 +681,7 @@ def prepare_widget(config, doctype, parentfield): @frappe.whitelist() -def update_onboarding_step(name, field, value): +def update_onboarding_step(name: str | int, field: str, value: int | str): """Update status of onboaridng step Args: diff --git a/frappe/desk/doctype/bulk_update/bulk_update.py b/frappe/desk/doctype/bulk_update/bulk_update.py index a2440412c3..28b4415ddf 100644 --- a/frappe/desk/doctype/bulk_update/bulk_update.py +++ b/frappe/desk/doctype/bulk_update/bulk_update.py @@ -1,6 +1,8 @@ # Copyright (c) 2015, Frappe Technologies and contributors # License: MIT. See LICENSE +from typing import Any + import frappe from frappe import _ from frappe.core.doctype.submission_queue.submission_queue import queue_submission @@ -46,7 +48,13 @@ class BulkUpdate(Document): @frappe.whitelist() -def submit_cancel_or_update_docs(doctype, docnames, action="submit", data=None, task_id=None): +def submit_cancel_or_update_docs( + doctype: str, + docnames: str | list[str], + action: str = "submit", + data: str | dict[str, Any] | None = None, + task_id: str | None = None, +): if isinstance(docnames, str): docnames = frappe.parse_json(docnames) diff --git a/frappe/desk/doctype/custom_html_block/custom_html_block.py b/frappe/desk/doctype/custom_html_block/custom_html_block.py index 35f9c3cc63..837fcb3079 100644 --- a/frappe/desk/doctype/custom_html_block/custom_html_block.py +++ b/frappe/desk/doctype/custom_html_block/custom_html_block.py @@ -27,7 +27,9 @@ class CustomHTMLBlock(Document): @frappe.whitelist() -def get_custom_blocks_for_user(doctype, txt, searchfield, start, page_len, filters): +def get_custom_blocks_for_user( + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: dict | str | list +): # return logged in users private blocks and all public blocks customHTMLBlock = DocType("Custom HTML Block") diff --git a/frappe/desk/doctype/dashboard/dashboard.py b/frappe/desk/doctype/dashboard/dashboard.py index 89cdd55428..a65d3607c8 100644 --- a/frappe/desk/doctype/dashboard/dashboard.py +++ b/frappe/desk/doctype/dashboard/dashboard.py @@ -85,7 +85,7 @@ def get_permission_query_conditions(user): @frappe.whitelist() -def get_permitted_charts(dashboard_name): +def get_permitted_charts(dashboard_name: str): permitted_charts = [] dashboard = frappe.get_doc("Dashboard", dashboard_name) for chart in dashboard.charts: @@ -101,7 +101,7 @@ def get_permitted_charts(dashboard_name): @frappe.whitelist() -def get_permitted_cards(dashboard_name): +def get_permitted_cards(dashboard_name: str): dashboard = frappe.get_doc("Dashboard", dashboard_name) return [card for card in dashboard.cards if frappe.has_permission("Number Card", doc=card.card)] diff --git a/frappe/desk/doctype/dashboard_chart/dashboard_chart.py b/frappe/desk/doctype/dashboard_chart/dashboard_chart.py index 64328dfc43..a1ab5b209f 100644 --- a/frappe/desk/doctype/dashboard_chart/dashboard_chart.py +++ b/frappe/desk/doctype/dashboard_chart/dashboard_chart.py @@ -1,8 +1,9 @@ # Copyright (c) 2019, Frappe Technologies and contributors # License: MIT. See LICENSE -import datetime import json +from datetime import datetime +from typing import Any import frappe from frappe import _ @@ -89,16 +90,16 @@ def has_permission(doc, ptype, user): @frappe.whitelist() @cache_source def get( - chart_name=None, - chart=None, - no_cache=None, - filters=None, - from_date=None, - to_date=None, - timespan=None, - time_interval=None, - heatmap_year=None, - refresh=None, + chart_name: str | None = None, + chart: str | dict[str, Any] | None = None, + no_cache: bool | int | None = None, + filters: str | list | dict[str, Any] | None = None, + from_date: str | datetime | None = None, + to_date: str | datetime | None = None, + timespan: str | None = None, + time_interval: str | None = None, + heatmap_year: str | int | None = None, + refresh: bool | int | None = None, ): if chart_name: chart: DashboardChart = frappe.get_doc("Dashboard Chart", chart_name) @@ -139,7 +140,7 @@ def get( @frappe.whitelist() -def create_dashboard_chart(args): +def create_dashboard_chart(args: str | dict[str, Any]): args = frappe.parse_json(args) doc = frappe.new_doc("Dashboard Chart") @@ -156,7 +157,7 @@ def create_dashboard_chart(args): @frappe.whitelist() -def create_report_chart(args): +def create_report_chart(args: str | dict[str, Any]): doc = create_dashboard_chart(args) args = frappe.parse_json(args) args.chart_name = doc.chart_name @@ -165,7 +166,7 @@ def create_report_chart(args): @frappe.whitelist() -def add_chart_to_dashboard(args): +def add_chart_to_dashboard(args: str | dict[str, Any]): args = frappe.parse_json(args) dashboard = frappe.get_doc("Dashboard", args.dashboard) @@ -326,7 +327,9 @@ def get_result(data, timegrain, from_date, to_date, chart_type): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def get_charts_for_user(doctype, txt, searchfield, start, page_len, filters): +def get_charts_for_user( + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: str | list | dict[str, Any] +): or_filters = {"owner": frappe.session.user, "is_public": 1} return frappe.db.get_list( "Dashboard Chart", fields=["name"], filters=filters, or_filters=or_filters, as_list=1 diff --git a/frappe/desk/doctype/dashboard_settings/dashboard_settings.py b/frappe/desk/doctype/dashboard_settings/dashboard_settings.py index 5d63e9c397..fcd1cbb76b 100644 --- a/frappe/desk/doctype/dashboard_settings/dashboard_settings.py +++ b/frappe/desk/doctype/dashboard_settings/dashboard_settings.py @@ -2,6 +2,7 @@ # License: MIT. See LICENSE import json +from typing import Any import frappe @@ -26,7 +27,7 @@ class DashboardSettings(Document): @frappe.whitelist() -def create_dashboard_settings(user): +def create_dashboard_settings(user: str): if not frappe.db.exists("Dashboard Settings", user): doc = frappe.new_doc("Dashboard Settings") doc.name = user @@ -43,7 +44,7 @@ def get_permission_query_conditions(user): @frappe.whitelist() -def save_chart_config(reset, config, chart_name): +def save_chart_config(reset: int | str | bool, config: str | dict[str, Any], chart_name: str): reset = frappe.parse_json(reset) doc = frappe.get_doc("Dashboard Settings", frappe.session.user) chart_config = frappe.parse_json(doc.chart_config) or {} diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.json b/frappe/desk/doctype/desktop_icon/desktop_icon.json index 21041a00c4..b954aabe60 100644 --- a/frappe/desk/doctype/desktop_icon/desktop_icon.json +++ b/frappe/desk/doctype/desktop_icon/desktop_icon.json @@ -147,11 +147,11 @@ "fieldname": "bg_color", "fieldtype": "Select", "label": "Background Color", - "options": "blue\ngray" + "options": "gray\nblue" } ], "links": [], - "modified": "2026-01-27 18:17:48.667070", + "modified": "2026-02-04 13:59:30.578370", "modified_by": "Administrator", "module": "Desk", "name": "Desktop Icon", diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.py b/frappe/desk/doctype/desktop_icon/desktop_icon.py index 98e98d39af..f0e1acf6cf 100644 --- a/frappe/desk/doctype/desktop_icon/desktop_icon.py +++ b/frappe/desk/doctype/desktop_icon/desktop_icon.py @@ -24,7 +24,7 @@ class DesktopIcon(Document): from frappe.types import DF app: DF.Autocomplete | None - bg_color: DF.Literal["blue", "gray"] + bg_color: DF.Literal["gray", "blue"] hidden: DF.Check icon_image: DF.Attach | None icon_type: DF.Literal["Link", "Folder", "App"] @@ -56,6 +56,11 @@ class DesktopIcon(Document): def on_update(self): self.export_desktop_icon() + if self.standard: + frappe.cache.delete_key("desktop_icons") + frappe.cache.delete_key("bootinfo") + else: + clear_desktop_icons_cache(user=self.owner) def after_rename(self, old, new, merge): delete_desktop_icon_file(self.app, old) @@ -111,12 +116,15 @@ class DesktopIcon(Document): def check_app_permission(self): for a in frappe.get_installed_apps(): if frappe.get_hooks(app_name=a)["app_title"][0] == self.label or self.app == a: - permission_method = frappe.get_hooks(app_name=a)["add_to_apps_screen"][0].get( - "has_permission", None - ) - if permission_method: - return frappe.call(permission_method) + app_detail = frappe.get_hooks("add_to_apps_screen", app_name=a) + if len(app_detail) != 0: + permission_method = app_detail[0].get("has_permission", None) + if permission_method: + return frappe.call(permission_method) + else: + return True else: + # App hooks.py doesn't have add_to_apps_screen return True # def is_permitted(self): @@ -312,3 +320,24 @@ def create_user_icons(user, data): frappe.cache.hset("_user_settings", f"{'Desktop Icon'}::{user}", json.dumps(user_settings)) return json.dumps(user_settings) return data + + +@frappe.whitelist() +def add_workspace_to_desktop(workspace: str): + sidebar = frappe.new_doc("Workspace Sidebar") + sidebar_item = frappe.new_doc("Workspace Sidebar Item") + sidebar_item.label = workspace + sidebar_item.type = "Link" + sidebar_item.link_to = workspace + sidebar_item.link_type = "Workspace" + sidebar.title = workspace + sidebar.append("items", sidebar_item) + sidebar.save() + + new_icon = frappe.new_doc("Desktop Icon") + new_icon.label = workspace + new_icon.icon_type = "Link" + new_icon.link_to = workspace + new_icon.link_type = "Workspace Sidebar" + new_icon.insert() + return {"icon": new_icon.as_dict()} diff --git a/frappe/desk/doctype/desktop_layout/desktop_layout.py b/frappe/desk/doctype/desktop_layout/desktop_layout.py index 08834f482c..8ac6ed78a6 100644 --- a/frappe/desk/doctype/desktop_layout/desktop_layout.py +++ b/frappe/desk/doctype/desktop_layout/desktop_layout.py @@ -4,6 +4,7 @@ import json import frappe +from frappe.desk.doctype.desktop_icon.desktop_icon import add_workspace_to_desktop from frappe.model.document import Document @@ -24,11 +25,10 @@ class DesktopLayout(Document): @frappe.whitelist() -def save_layout(user, layout, new_icons): +def save_layout(user: str, layout: str, new_icons: str | None = None): if not user: user = frappe.session.user layout = json.loads(layout) - new_icons = json.loads(new_icons) desktop_layout = None try: desktop_layout = frappe.get_doc("Desktop Layout", frappe.session.user) @@ -40,16 +40,36 @@ def save_layout(user, layout, new_icons): if layout: desktop_layout.layout = json.dumps(layout) desktop_layout.save() - - for icon in new_icons: - desktop_icon = frappe.new_doc("Desktop Icon") - desktop_icon.update(icon) - desktop_icon.owner = frappe.session.user - desktop_icon.save() + if new_icons: + new_icons = json.loads(new_icons) + for icon in new_icons: + workspace = icon.get("workspace") + if workspace: + new_workspace = frappe.new_doc("Workspace") + new_workspace.update(workspace) + new_workspace.title = new_workspace.label + new_workspace.save() + return add_workspace_to_desktop(new_workspace.name) + desktop_icon = frappe.new_doc("Desktop Icon") + desktop_icon.update(icon) + desktop_icon.owner = frappe.session.user + desktop_icon.save() return {"layout": layout} +@frappe.whitelist() +def get_layout(): + """Return the current user's saved desktop layout. Used on desk load to avoid stale cached HTML.""" + try: + doc = frappe.get_doc("Desktop Layout", frappe.session.user) + if doc.layout: + return json.loads(doc.layout) + except frappe.DoesNotExistError: + frappe.clear_last_message() + return None + + @frappe.whitelist() def delete_layout(): return frappe.delete_doc_if_exists("Desktop Layout", frappe.session.user) diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index 49db0596d1..99af59a417 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -4,6 +4,7 @@ import json from datetime import date, datetime +from typing import Any import frappe import frappe.share @@ -235,7 +236,7 @@ class Event(Document): @frappe.whitelist() -def update_attending_status(event_name, attendee, status): +def update_attending_status(event_name: str, attendee: str, status: str): event_doc = frappe.get_doc("Event", event_name) if event_doc.owner == attendee == frappe.session.user: @@ -252,7 +253,7 @@ def update_attending_status(event_name, attendee, status): @frappe.whitelist() -def delete_communication(event, reference_doctype, reference_docname): +def delete_communication(event: str | dict[str, Any], reference_doctype: str, reference_docname: str | int): if isinstance(event, str): event = json.loads(event) @@ -332,7 +333,11 @@ def send_event_digest(): @frappe.whitelist() @http_cache(max_age=5 * 60, stale_while_revalidate=60 * 60) def get_events( - start: date, end: date, user: str | None = None, for_reminder: bool = False, filters=None + start: date, + end: date, + user: str | None = None, + for_reminder: bool = False, + filters: str | list | dict[str, Any] | None = None, ) -> list[frappe._dict]: user = user or frappe.session.user type EventLikeDict = Event | frappe._dict diff --git a/frappe/desk/doctype/form_tour/form_tour.py b/frappe/desk/doctype/form_tour/form_tour.py index 0227561bbd..a7fe725438 100644 --- a/frappe/desk/doctype/form_tour/form_tour.py +++ b/frappe/desk/doctype/form_tour/form_tour.py @@ -75,7 +75,7 @@ class FormTour(Document): @frappe.whitelist() -def reset_tour(tour_name): +def reset_tour(tour_name: str): for user in frappe.get_all("User", pluck="name"): onboarding_status = frappe.parse_json(frappe.db.get_value("User", user, "onboarding_status")) onboarding_status.pop(tour_name, None) @@ -88,7 +88,7 @@ def reset_tour(tour_name): @frappe.whitelist() -def update_user_status(value, step): +def update_user_status(value: str, step: str): from frappe.utils.telemetry import capture step = frappe.parse_json(step) diff --git a/frappe/desk/doctype/kanban_board/kanban_board.py b/frappe/desk/doctype/kanban_board/kanban_board.py index bf9e41d9d6..84bca98cc3 100644 --- a/frappe/desk/doctype/kanban_board/kanban_board.py +++ b/frappe/desk/doctype/kanban_board/kanban_board.py @@ -66,7 +66,7 @@ def has_permission(doc, ptype, user): @frappe.whitelist() -def get_kanban_boards(doctype): +def get_kanban_boards(doctype: str): """Get Kanban Boards for doctype to show in List View""" return frappe.get_list( "Kanban Board", @@ -76,7 +76,7 @@ def get_kanban_boards(doctype): @frappe.whitelist() -def add_column(board_name, column_title): +def add_column(board_name: str, column_title: str): """Adds new column to Kanban Board""" doc = frappe.get_doc("Kanban Board", board_name) for col in doc.columns: @@ -89,7 +89,7 @@ def add_column(board_name, column_title): @frappe.whitelist() -def archive_restore_column(board_name, column_title, status): +def archive_restore_column(board_name: str, column_title: str, status: str): """Set column's status to status""" doc = frappe.get_doc("Kanban Board", board_name) for col in doc.columns: @@ -101,7 +101,7 @@ def archive_restore_column(board_name, column_title, status): @frappe.whitelist() -def update_order(board_name, order): +def update_order(board_name: str, order: str): """Save the order of cards in columns""" board = frappe.get_doc("Kanban Board", board_name) doctype = board.reference_doctype @@ -129,7 +129,14 @@ def update_order(board_name, order): @frappe.whitelist() -def update_order_for_single_card(board_name, docname, from_colname, to_colname, old_index, new_index): +def update_order_for_single_card( + board_name: str, + docname: str, + from_colname: str, + to_colname: str, + old_index: str | int, + new_index: str | int, +): """Save the order of cards in columns""" board = frappe.get_doc("Kanban Board", board_name) doctype = board.reference_doctype @@ -171,7 +178,7 @@ def get_kanban_column_order_and_index(board, colname): @frappe.whitelist() -def add_card(board_name, docname, colname): +def add_card(board_name: str, docname: str, colname: str): board = frappe.get_doc("Kanban Board", board_name) frappe.has_permission(board.reference_doctype, "write", throw=True) @@ -185,7 +192,7 @@ def add_card(board_name, docname, colname): @frappe.whitelist() -def quick_kanban_board(doctype, board_name, field_name, project=None): +def quick_kanban_board(doctype: str, board_name: str, field_name: str, project: str | None = None): """Create new KanbanBoard quickly with default options""" doc = frappe.new_doc("Kanban Board") @@ -228,7 +235,7 @@ def get_order_for_column(board, colname): @frappe.whitelist() -def update_column_order(board_name, order): +def update_column_order(board_name: str, order: str): """Set the order of columns in Kanban Board""" board = frappe.get_doc("Kanban Board", board_name) order = json.loads(order) @@ -260,7 +267,7 @@ def update_column_order(board_name, order): @frappe.whitelist() -def set_indicator(board_name, column_name, indicator): +def set_indicator(board_name: str, column_name: str, indicator: str): """Set the indicator color of column""" board = frappe.get_doc("Kanban Board", board_name) diff --git a/frappe/desk/doctype/list_view_settings/list_view_settings.py b/frappe/desk/doctype/list_view_settings/list_view_settings.py index f42baab57b..ad62bad433 100644 --- a/frappe/desk/doctype/list_view_settings/list_view_settings.py +++ b/frappe/desk/doctype/list_view_settings/list_view_settings.py @@ -1,6 +1,8 @@ # Copyright (c) 2020, Frappe Technologies and contributors # License: MIT. See LICENSE +from typing import Any + import frappe from frappe.model.document import Document @@ -29,7 +31,9 @@ class ListViewSettings(Document): @frappe.whitelist() -def save_listview_settings(doctype, listview_settings, removed_listview_fields): +def save_listview_settings( + doctype: str, listview_settings: str | dict[str, Any], removed_listview_fields: str | list[str] +): listview_settings = frappe.parse_json(listview_settings) removed_listview_fields = frappe.parse_json(removed_listview_fields) @@ -87,7 +91,7 @@ def set_in_list_view_property(doctype, field, value): @frappe.whitelist() -def get_default_listview_fields(doctype): +def get_default_listview_fields(doctype: str): meta = frappe.get_meta(doctype) path = frappe.get_module_path( frappe.scrub(meta.module), "doctype", frappe.scrub(meta.name), frappe.scrub(meta.name) + ".json" diff --git a/frappe/desk/doctype/notification_settings/notification_settings.json b/frappe/desk/doctype/notification_settings/notification_settings.json index d06aebc369..fa5abe02cf 100644 --- a/frappe/desk/doctype/notification_settings/notification_settings.json +++ b/frappe/desk/doctype/notification_settings/notification_settings.json @@ -23,7 +23,7 @@ "default": "1", "fieldname": "enabled", "fieldtype": "Check", - "label": "Enabled" + "label": "Enabled System Notification" }, { "fieldname": "subscribed_documents", @@ -98,7 +98,7 @@ "in_create": 1, "index_web_pages_for_search": 1, "links": [], - "modified": "2025-04-16 17:15:25.641232", + "modified": "2026-02-17 13:39:35.159083", "modified_by": "Administrator", "module": "Desk", "name": "Notification Settings", diff --git a/frappe/desk/doctype/notification_settings/notification_settings.py b/frappe/desk/doctype/notification_settings/notification_settings.py index 8c0925e372..237eb0b920 100644 --- a/frappe/desk/doctype/notification_settings/notification_settings.py +++ b/frappe/desk/doctype/notification_settings/notification_settings.py @@ -130,8 +130,8 @@ def has_permission(doc, ptype="read", user=None): @frappe.whitelist() -def set_seen_value(value, user): +def set_seen_value(value: int, user: str): if frappe.flags.read_only: return - frappe.db.set_value("Notification Settings", user, "seen", value, update_modified=False) + frappe.db.set_value("Notification Settings", frappe.session.user, "seen", value, update_modified=False) diff --git a/frappe/desk/doctype/number_card/number_card.py b/frappe/desk/doctype/number_card/number_card.py index 19b45ea589..76dd0a7284 100644 --- a/frappe/desk/doctype/number_card/number_card.py +++ b/frappe/desk/doctype/number_card/number_card.py @@ -1,6 +1,9 @@ # Copyright (c) 2020, Frappe Technologies and contributors # License: MIT. See LICENSE +from datetime import date, datetime +from typing import Any + import frappe from frappe import _ from frappe.boot import get_allowed_report_names @@ -121,7 +124,11 @@ def has_permission(doc, ptype, user): @frappe.whitelist() -def get_result(doc, filters, to_date=None): +def get_result( + doc: str | dict[str, Any] | Document, + filters: str | list | dict[str, Any], + to_date: str | datetime | date | None = None, +): doc = frappe.parse_json(doc) fields = [] sql_function_map = { @@ -158,7 +165,9 @@ def get_result(doc, filters, to_date=None): @frappe.whitelist() -def get_percentage_difference(doc, filters, result): +def get_percentage_difference( + doc: str | dict[str, Any], filters: str | list | dict[str, Any], result: float | int | str +): doc = frappe.parse_json(doc) result = frappe.parse_json(result) @@ -194,7 +203,7 @@ def calculate_previous_result(doc, filters): @frappe.whitelist() -def create_number_card(args): +def create_number_card(args: str | dict[str, Any]): args = frappe.parse_json(args) doc = frappe.new_doc("Number Card") @@ -205,7 +214,9 @@ def create_number_card(args): @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs -def get_cards_for_user(doctype, txt, searchfield, start, page_len, filters): +def get_cards_for_user( + doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: str | list | dict[str, Any] +): doctype = "Number Card" meta = frappe.get_meta(doctype) searchfields = meta.get_search_fields() @@ -229,7 +240,7 @@ def get_cards_for_user(doctype, txt, searchfield, start, page_len, filters): @frappe.whitelist() -def create_report_number_card(args): +def create_report_number_card(args: str | dict[str, Any]): card = create_number_card(args) args = frappe.parse_json(args) args.name = card.name @@ -238,7 +249,7 @@ def create_report_number_card(args): @frappe.whitelist() -def add_card_to_dashboard(args): +def add_card_to_dashboard(args: str | dict[str, Any]): args = frappe.parse_json(args) dashboard = frappe.get_doc("Dashboard", args.dashboard) diff --git a/frappe/desk/doctype/onboarding_step/onboarding_step.py b/frappe/desk/doctype/onboarding_step/onboarding_step.py index bd8690bca0..e12e847244 100644 --- a/frappe/desk/doctype/onboarding_step/onboarding_step.py +++ b/frappe/desk/doctype/onboarding_step/onboarding_step.py @@ -50,7 +50,7 @@ class OnboardingStep(Document): @frappe.whitelist() -def get_onboarding_steps(ob_steps): +def get_onboarding_steps(ob_steps: str): steps = [] for s in json.loads(ob_steps): doc = frappe.get_doc("Onboarding Step", s.get("step")) diff --git a/frappe/desk/doctype/route_history/route_history.py b/frappe/desk/doctype/route_history/route_history.py index 52e885e583..0fabe25d13 100644 --- a/frappe/desk/doctype/route_history/route_history.py +++ b/frappe/desk/doctype/route_history/route_history.py @@ -1,6 +1,8 @@ # Copyright (c) 2022, Frappe Technologies and contributors # License: MIT. See LICENSE +from typing import Any + import frappe from frappe.deferred_insert import deferred_insert as _deferred_insert from frappe.model.document import Document @@ -29,7 +31,7 @@ class RouteHistory(Document): @frappe.whitelist() -def deferred_insert(routes): +def deferred_insert(routes: str | list[dict[str, Any]]): routes = [ { "user": frappe.session.user, diff --git a/frappe/desk/doctype/sidebar_item_group/sidebar_item_group.py b/frappe/desk/doctype/sidebar_item_group/sidebar_item_group.py index 7b72e2139f..6db2768e1c 100644 --- a/frappe/desk/doctype/sidebar_item_group/sidebar_item_group.py +++ b/frappe/desk/doctype/sidebar_item_group/sidebar_item_group.py @@ -48,7 +48,7 @@ class SidebarItemGroup(Document): @frappe.whitelist() -def get_reports(module_name=None): +def get_reports(module_name: str | None = None): reports_info = [] if module_name: sidebar_group = frappe.get_doc("Sidebar Item Group", module_name) diff --git a/frappe/desk/doctype/system_console/system_console.py b/frappe/desk/doctype/system_console/system_console.py index 4f29b8e7fc..d582988a3b 100644 --- a/frappe/desk/doctype/system_console/system_console.py +++ b/frappe/desk/doctype/system_console/system_console.py @@ -51,7 +51,7 @@ class SystemConsole(Document): @frappe.whitelist(methods=["POST"]) -def execute_code(doc): +def execute_code(doc: str): console = frappe.get_doc(json.loads(doc)) console.run() return console.as_dict() diff --git a/frappe/desk/doctype/tag/tag.py b/frappe/desk/doctype/tag/tag.py index 6235509a9d..04f1053ead 100644 --- a/frappe/desk/doctype/tag/tag.py +++ b/frappe/desk/doctype/tag/tag.py @@ -33,7 +33,7 @@ def check_user_tags(dt): @frappe.whitelist() -def add_tag(tag, dt, dn, color=None): +def add_tag(tag: str, dt: str, dn: str, color: str | None = None): "adds a new tag to a record, and creates the Tag master" DocTags(dt).add(dn, tag) @@ -41,7 +41,7 @@ def add_tag(tag, dt, dn, color=None): @frappe.whitelist() -def add_tags(tags, dt, docs, color=None): +def add_tags(tags: str | list[str], dt: str, docs: str | list[str], color: str | None = None): "adds a new tag to a record, and creates the Tag master" tags = frappe.parse_json(tags) docs = frappe.parse_json(docs) @@ -51,20 +51,20 @@ def add_tags(tags, dt, docs, color=None): @frappe.whitelist() -def remove_tag(tag, dt, dn): +def remove_tag(tag: str, dt: str, dn: str): "removes tag from the record" DocTags(dt).remove(dn, tag) @frappe.whitelist() -def get_tagged_docs(doctype, tag): +def get_tagged_docs(doctype: str, tag: str): frappe.has_permission(doctype, throw=True) doctype = DocType(doctype) return (frappe.qb.from_(doctype).where(doctype._user_tags.like(tag)).select(doctype.name)).run() @frappe.whitelist() -def get_tags(doctype, txt): +def get_tags(doctype: str, txt: str): tag = frappe.get_list("Tag", filters=[["name", "like", f"%{txt}%"]]) tags = [t.name for t in tag] @@ -176,7 +176,7 @@ def update_tags(doc, tags): @frappe.whitelist() -def get_documents_for_tag(tag): +def get_documents_for_tag(tag: str): """Search for given text in Tag Link. :param tag: tag to be searched diff --git a/frappe/desk/doctype/todo/todo.py b/frappe/desk/doctype/todo/todo.py index 77cdfb90db..ddcbc3eb7e 100644 --- a/frappe/desk/doctype/todo/todo.py +++ b/frappe/desk/doctype/todo/todo.py @@ -173,5 +173,5 @@ def has_permission(doc, ptype="read", user=None): @frappe.whitelist() -def new_todo(description): +def new_todo(description: str): frappe.get_doc({"doctype": "ToDo", "description": description}).insert() diff --git a/frappe/desk/doctype/todo/todo_calendar.js b/frappe/desk/doctype/todo/todo_calendar.js index f79243a86e..8cd850d77e 100644 --- a/frappe/desk/doctype/todo/todo_calendar.js +++ b/frappe/desk/doctype/todo/todo_calendar.js @@ -8,7 +8,6 @@ frappe.views.calendar["ToDo"] = { id: "name", title: "description", allDay: "allDay", - progress: "progress", }, gantt: true, filters: [ diff --git a/frappe/desk/doctype/workspace/workspace.js b/frappe/desk/doctype/workspace/workspace.js index 797682a50b..91a819273e 100644 --- a/frappe/desk/doctype/workspace/workspace.js +++ b/frappe/desk/doctype/workspace/workspace.js @@ -8,7 +8,7 @@ frappe.ui.form.on("Workspace", { refresh: function (frm) { frm.enable_save(); - + frm.trigger("add_to_desktop"); let url = `/desk/${ frm.doc.public ? frappe.router.slug(frm.doc.title) @@ -44,6 +44,26 @@ frappe.ui.form.on("Workspace", { frm.layout.show_message(message); }, + add_to_desktop: function (frm) { + if (frappe.app.sidebar.get_workspace_sidebars(frm.doc.title).length === 0) { + frm.add_custom_button(__("Add to Desktop"), function () { + frappe.call({ + method: "frappe.desk.doctype.desktop_icon.desktop_icon.add_workspace_to_desktop", + args: { + workspace: frm.doc.name, + }, + callback: function (r) { + if (r.message.status) { + frappe.toast({ + message: __("Workspace added to desktop"), + indicator: "green", + }); + } + }, + }); + }); + } + }, disable_form: function (frm) { frm.fields .filter((field) => field.has_input) diff --git a/frappe/desk/doctype/workspace/workspace.py b/frappe/desk/doctype/workspace/workspace.py index 4ee11c1725..29d9cb6b0f 100644 --- a/frappe/desk/doctype/workspace/workspace.py +++ b/frappe/desk/doctype/workspace/workspace.py @@ -125,16 +125,32 @@ class Workspace(Document): self.name = doc.name = doc.label = doc.title def on_trash(self): + if not self.module: + self.delete_sidebar() + self.delete_desktop_icon() if self.public and not is_workspace_manager(): frappe.throw(_("You need to be Workspace Manager to delete a public workspace.")) self.delete_from_my_workspaces() + def delete_desktop_icon(self): + frappe.delete_doc_if_exists("Desktop Icon", self.title) + + def delete_sidebar(self): + frappe.delete_doc_if_exists("Workspace Sidebar", self.title) + def delete_from_my_workspaces(self): - if not self.public: + if self.public: + return + + try: my_workspaces = frappe.get_doc("Workspace Sidebar", f"My Workspaces-{frappe.session.user}") - for w in my_workspaces.items: - if self.name == w.link_to: - frappe.delete_doc("Workspace Sidebar Item", w.name) + except frappe.DoesNotExistError: + frappe.clear_messages() + return + + for w in my_workspaces.items: + if self.name == w.link_to: + frappe.delete_doc("Workspace Sidebar Item", w.name) def after_delete(self): if disable_saving_as_public(): @@ -268,7 +284,7 @@ def get_report_type(report): @frappe.whitelist() -def new_page(new_page): +def new_page(new_page: str): if not loads(new_page): return @@ -312,7 +328,7 @@ def new_page(new_page): @frappe.whitelist() -def save_page(name, public, new_widgets, blocks): +def save_page(name: str, public: str | int, new_widgets: str, blocks: str): public = frappe.parse_json(public) doc = frappe.get_doc("Workspace", name) @@ -327,7 +343,7 @@ def save_page(name, public, new_widgets, blocks): @frappe.whitelist() -def update_page(name, title, icon, indicator_color, parent, public): +def update_page(name: str, title: str, icon: str, indicator_color: str, parent: str, public: str | int): public = frappe.parse_json(public) doc = frappe.get_doc("Workspace", name) diff --git a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py index d55139b3e5..b0fe4b5399 100644 --- a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py +++ b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py @@ -195,7 +195,7 @@ def create_workspace_sidebar_for_workspaces(): @frappe.whitelist() -def add_sidebar_items(sidebar_title, sidebar_items): +def add_sidebar_items(sidebar_title: str, sidebar_items: str): sidebar_items = loads(sidebar_items) title = f"{sidebar_title}-{frappe.session.user}" w = frappe.get_doc("Workspace Sidebar", sidebar_title) diff --git a/frappe/desk/form/assign_to.py b/frappe/desk/form/assign_to.py index bcebd4db0e..2af0a786a3 100644 --- a/frappe/desk/form/assign_to.py +++ b/frappe/desk/form/assign_to.py @@ -4,6 +4,7 @@ """assign/unassign to ToDo""" import json +from typing import Any import frappe import frappe.share @@ -40,7 +41,7 @@ def get(args=None): @frappe.whitelist() -def add(args=None, *, ignore_permissions=False): +def add(args: dict[str, Any] | None = None, *, ignore_permissions: bool | int = False): """add in someone's to do list args = { "assign_to": [], @@ -140,7 +141,7 @@ def add(args=None, *, ignore_permissions=False): @frappe.whitelist() -def add_multiple(args=None): +def add_multiple(args: dict[str, Any] | None = None): if not args: args = frappe.local.form_dict @@ -174,12 +175,12 @@ def close_all_assignments(doctype, name, ignore_permissions=False): @frappe.whitelist() -def remove(doctype, name, assign_to, ignore_permissions=False): +def remove(doctype: str, name: str | int, assign_to: str, ignore_permissions: bool | int = False): return set_status(doctype, name, "", assign_to, status="Cancelled", ignore_permissions=ignore_permissions) @frappe.whitelist() -def remove_multiple(doctype, names, ignore_permissions=False): +def remove_multiple(doctype: str, names: str, ignore_permissions: bool | int = False): docname_list = json.loads(names) for name in docname_list: @@ -193,7 +194,7 @@ def remove_multiple(doctype, names, ignore_permissions=False): @frappe.whitelist() -def close(doctype: str, name: str, assign_to: str, ignore_permissions=False): +def close(doctype: str, name: str, assign_to: str, ignore_permissions: bool | int = False): if assign_to != frappe.session.user: frappe.throw(_("Only the assignee can complete this to-do.")) diff --git a/frappe/desk/form/document_follow.py b/frappe/desk/form/document_follow.py index 136b21e07c..39f5f1530e 100644 --- a/frappe/desk/form/document_follow.py +++ b/frappe/desk/form/document_follow.py @@ -246,7 +246,7 @@ def is_document_followed(doctype, doc_name, user): @frappe.whitelist() -def get_follow_users(doctype, doc_name): +def get_follow_users(doctype: str, doc_name: str): return frappe.get_all( "Document Follow", filters={"ref_doctype": doctype, "ref_docname": doc_name}, fields=["user"] ) diff --git a/frappe/desk/form/linked_with.py b/frappe/desk/form/linked_with.py index 0716e49961..4c54d1be4a 100644 --- a/frappe/desk/form/linked_with.py +++ b/frappe/desk/form/linked_with.py @@ -14,7 +14,9 @@ from frappe.modules import load_doctype_module @frappe.whitelist() -def get_submitted_linked_docs(doctype: str, name: str, ignore_doctypes_on_cancel_all=None) -> list[tuple]: +def get_submitted_linked_docs( + doctype: str, name: str, ignore_doctypes_on_cancel_all: str | list[str] | None = None +) -> list[tuple]: """Get all the nested submitted documents those are present in referencing tables (dependent tables). :param doctype: Document type @@ -365,7 +367,7 @@ def get_referencing_documents( @frappe.whitelist() -def cancel_all_linked_docs(docs, ignore_doctypes_on_cancel_all=None): +def cancel_all_linked_docs(docs: str, ignore_doctypes_on_cancel_all: str | list[str] | None = None): """ Cancel all linked doctype, optionally ignore doctypes specified in a list. @@ -527,14 +529,14 @@ def get_linked_docs(doctype: str, name: str, linkinfo: dict | None = None) -> di @frappe.whitelist() -def get(doctype, docname): +def get(doctype: str, docname: str): frappe.has_permission(doctype, doc=docname, throw=True) linked_doctypes = get_linked_doctypes(doctype=doctype) return get_linked_docs(doctype=doctype, name=docname, linkinfo=linked_doctypes) @frappe.whitelist() -def get_linked_doctypes(doctype, without_ignore_user_permissions_enabled=False): +def get_linked_doctypes(doctype: str, without_ignore_user_permissions_enabled: int | bool = False): """add list of doctypes this doctype is 'linked' with. Example, for Customer: diff --git a/frappe/desk/form/load.py b/frappe/desk/form/load.py index 87f1954093..17a193a074 100644 --- a/frappe/desk/form/load.py +++ b/frappe/desk/form/load.py @@ -3,6 +3,7 @@ import json import typing +from typing import Any from urllib.parse import quote_plus import frappe @@ -12,16 +13,14 @@ import frappe.utils from frappe import _, _dict from frappe.core.doctype.permission_type.permission_type import get_doctype_ptype_map from frappe.desk.form.document_follow import is_document_followed +from frappe.model.document import Document from frappe.model.utils.user_settings import get_user_settings from frappe.permissions import check_doctype_permission, get_doc_permissions, has_permission from frappe.utils.data import cstr -if typing.TYPE_CHECKING: - from frappe.model.document import Document - @frappe.whitelist() -def getdoc(doctype, name): +def getdoc(doctype: str, name: str | int): """ Loads a doclist for a given document. This method is called directly from the client. Requires "doctype", "name" as form variables. @@ -60,7 +59,7 @@ def getdoc(doctype, name): @frappe.whitelist() -def getdoctype(doctype, with_parent=False): +def getdoctype(doctype: str, with_parent: int | bool = False): """load doctype""" docs = [] @@ -90,7 +89,11 @@ def get_meta_bundle(doctype): @frappe.whitelist() -def get_docinfo(doc=None, doctype=None, name=None): +def get_docinfo( + doc: Document | dict | str | None = None, + doctype: str | None = None, + name: str | int | None = None, +): from frappe.share import _get_users as get_docshares if not doc: @@ -200,7 +203,7 @@ def get_versions(doc: "Document") -> list[dict]: @frappe.whitelist() -def get_communications(doctype, name, start=0, limit=20): +def get_communications(doctype: str, name: str | int, start: str | int = 0, limit: str | int = 20): from frappe.utils import cint frappe.get_lazy_doc(doctype, name).check_permission() @@ -500,7 +503,7 @@ def update_user_info(docinfo, doc=None): @frappe.whitelist() -def get_user_info_for_viewers(users): +def get_user_info_for_viewers(users: str): user_info = {} for user in json.loads(users): frappe.utils.add_user_info(user, user_info) diff --git a/frappe/desk/form/save.py b/frappe/desk/form/save.py index 9fe884e5b4..c37d7452eb 100644 --- a/frappe/desk/form/save.py +++ b/frappe/desk/form/save.py @@ -13,7 +13,7 @@ from frappe.utils.telemetry import capture_doc @frappe.whitelist(methods=["POST", "PUT"]) -def savedocs(doc, action): +def savedocs(doc: str, action: str): """save / submit / update doclist""" doc = frappe.get_doc(json.loads(doc)) capture_doc(doc, action) @@ -52,7 +52,12 @@ def savedocs(doc, action): @frappe.whitelist(methods=["POST", "PUT"]) -def cancel(doctype=None, name=None, workflow_state_fieldname=None, workflow_state=None): +def cancel( + doctype: str | None = None, + name: str | int | None = None, + workflow_state_fieldname: str | None = None, + workflow_state: str | None = None, +): """cancel a doclist""" doc = frappe.get_doc(doctype, name) capture_doc(doc, "Cancel") diff --git a/frappe/desk/form/utils.py b/frappe/desk/form/utils.py index 45fe071b92..2d81c18edf 100644 --- a/frappe/desk/form/utils.py +++ b/frappe/desk/form/utils.py @@ -49,7 +49,7 @@ def add_comment( @frappe.whitelist() -def update_comment(name, content): +def update_comment(name: str | int, content: str): """allow only owner to update comment""" doc = frappe.get_doc("Comment", name) @@ -77,40 +77,51 @@ def update_comment_publicity(name: str, publish: bool): @frappe.whitelist() -def get_next(doctype, value, prev, filters=None, sort_order="desc", sort_field="creation"): +def get_next( + doctype: str, + value: str, + prev: str | int, + filters: dict | str | None = None, + sort_order: str = "desc", + sort_field: str = "creation", +): prev = int(prev) if not filters: filters = [] if isinstance(filters, str): filters = json.loads(filters) - # # condition based on sort order - condition = ">" if sort_order.lower() == "asc" else "<" + table = frappe.qb.DocType(doctype) + sort_column = table[sort_field] + name_column = table.name + current_sort_value = frappe.db.get_value(doctype, value, sort_field) - # switch the condition - if prev: - sort_order = "asc" if sort_order.lower() == "desc" else "desc" - condition = "<" if condition == ">" else ">" + is_ascending = sort_order.lower() == "asc" + if prev == is_ascending: + composite_condition = (sort_column < current_sort_value) | ( + (sort_column == current_sort_value) & (name_column < value) + ) + order = frappe.qb.desc + else: + composite_condition = (sort_column > current_sort_value) | ( + (sort_column == current_sort_value) & (name_column > value) + ) + order = frappe.qb.asc - # # add condition for next or prev item - filters.append([doctype, sort_field, condition, frappe.get_value(doctype, value, sort_field)]) - - res = frappe.get_list( - doctype, - fields=["name"], - filters=filters, - order_by=f"{sort_field} {sort_order}", - limit_start=0, - limit_page_length=1, - as_list=True, + query = ( + frappe.qb.get_query(doctype, filters=filters, fields=["name"], ignore_permissions=False) + .orderby(sort_column, order=order) + .orderby(name_column, order=order) + .where(composite_condition) + .limit(1) ) - if not res: - frappe.msgprint(_("No further records")) - return None - else: + if res := query.run(as_list=True): return res[0][0] + frappe.msgprint(_("No further records")) + return None + def get_pdf_link(doctype, docname, print_format="Standard", no_letterhead=0): return f"/api/method/frappe.utils.print_format.download_pdf?doctype={doctype}&name={docname}&format={print_format}&no_letterhead={no_letterhead}" diff --git a/frappe/desk/gantt.py b/frappe/desk/gantt.py index a09c52dafe..56a207f166 100644 --- a/frappe/desk/gantt.py +++ b/frappe/desk/gantt.py @@ -7,7 +7,7 @@ import frappe @frappe.whitelist() -def update_task(args, field_map): +def update_task(args: str, field_map: str): """Updates Doc (called via gantt) based on passed `field_map`""" args = frappe._dict(json.loads(args)) field_map = frappe._dict(json.loads(field_map)) diff --git a/frappe/desk/like.py b/frappe/desk/like.py index 6399673691..ecdc7d2d66 100644 --- a/frappe/desk/like.py +++ b/frappe/desk/like.py @@ -13,7 +13,7 @@ from frappe.utils import get_link_to_form @frappe.whitelist() -def toggle_like(doctype, name, add=False): +def toggle_like(doctype: str, name: str, add: str | bool = False): """Adds / removes the current user in the `__liked_by` property of the given document. If column does not exist, will add it in the database. diff --git a/frappe/desk/link_preview.py b/frappe/desk/link_preview.py index c9143ef5f1..3873daae56 100644 --- a/frappe/desk/link_preview.py +++ b/frappe/desk/link_preview.py @@ -6,7 +6,7 @@ from frappe.www.printview import set_title_values_for_link_and_dynamic_link_fiel @frappe.whitelist() @http_cache(max_age=60 * 10) -def get_preview_data(doctype, docname): +def get_preview_data(doctype: str, docname: str | int): preview_fields = [] meta = frappe.get_meta(doctype) if not meta.show_preview_popup: diff --git a/frappe/desk/listview.py b/frappe/desk/listview.py index 33aa114e17..346be9ffba 100644 --- a/frappe/desk/listview.py +++ b/frappe/desk/listview.py @@ -1,6 +1,8 @@ # Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors # License: MIT. See LICENSE +from typing import Any + import frappe from frappe.model import is_default_field from frappe.query_builder import Order @@ -10,7 +12,7 @@ from frappe.query_builder.utils import DocType @frappe.whitelist() -def get_list_settings(doctype): +def get_list_settings(doctype: str): try: return frappe.get_cached_doc("List View Settings", doctype) except frappe.DoesNotExistError: @@ -18,7 +20,7 @@ def get_list_settings(doctype): @frappe.whitelist() -def set_list_settings(doctype, values): +def set_list_settings(doctype: str, values: str | dict[str, Any]): try: doc = frappe.get_doc("List View Settings", doctype) except frappe.DoesNotExistError: diff --git a/frappe/desk/notifications.py b/frappe/desk/notifications.py index bacf2b0f77..97447d6873 100644 --- a/frappe/desk/notifications.py +++ b/frappe/desk/notifications.py @@ -242,7 +242,7 @@ def get_filters_for(doctype): @frappe.whitelist() @frappe.read_only() -def get_open_count(doctype: str, name: str, items=None): +def get_open_count(doctype: str, name: str | int, items: str | list[str] | None = None): """Get count for internal and external links for given transactions :param doctype: Reference DocType diff --git a/frappe/desk/page/desktop/desktop.css b/frappe/desk/page/desktop/desktop.css index f3d2dc00bf..27a128b60c 100644 --- a/frappe/desk/page/desktop/desktop.css +++ b/frappe/desk/page/desktop/desktop.css @@ -80,6 +80,12 @@ margin-top: 60px; padding: 20px; } +.icons-container:has(.sidebar-card){ + margin-top: 20px; + .sidebar-card{ + gap: 6px; + } +} .modal .modal-body .icons-container,.folder-icon .icons-container { padding:0px; @@ -267,7 +273,7 @@ height: var(--folder-thumbnail-icon-height); width: var(--folder-thumbnail-icon-height); padding: 0px; - border-radius: 2px; + border-radius: 4px; & .icon{ width: 5px; height: 5px; @@ -500,31 +506,72 @@ justify-content: center; } -.title-widget{ - display: inline-block; +.title-widget { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 1.5rem; + cursor: text; position: relative; } -.title-input-label{ - position: absolute; - top: 0px; - color: var(--neutral-white); - line-height: 22px; - z-index: 1; - pointers-events: none; - width: 100%; - text-align: center; -} -.title-input-wrapper{ - position: relative; - display: inline-block; - +.title-widget--read-only { + cursor: default; } -.title-input-wrapper input{ - border: 1px solid transparent; - width: 100%; - height: 100%; - background: none; +.title-widget--editable:hover .title-input-label { + opacity: 0.9; +} + +.desktop-modal-heading .title-widget--read-only .title-input-label:hover { + background-color: transparent; +} + +.desktop-modal-heading .title-widget .title-input-label { color: var(--neutral-white); -} \ No newline at end of file + font-size: var(--text-2xl); + line-height: 1.3; + padding: 2px 4px; + border-radius: 4px; + transition: background-color 0.15s ease; +} + +.desktop-modal-heading .title-widget--editable:hover .title-input-label { + background-color: rgba(255, 255, 255, 0.08); +} + +.title-input-wrapper { + display: inline-block; + min-width: 80px; +} + +.desktop-modal-heading .title-input-wrapper .title-input { + color: var(--neutral-white); + font-size: var(--text-2xl); + line-height: 1.3; + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.25); + border-radius: 4px; + padding: 2px 8px; + outline: none; + min-width: 80px; + box-sizing: border-box; +} + +.desktop-modal-heading .title-input-wrapper .title-input::placeholder { + color: rgba(255, 255, 255, 0.5); +} + +.desktop-modal-heading .title-input-wrapper .title-input:focus { + border-color: rgba(255, 255, 255, 0.5); + background-color: rgba(255, 255, 255, 0.12); +} + +.title-input-mirror { + position: absolute; + visibility: hidden; + white-space: pre; + font-size: var(--text-2xl); + font-family: inherit; + padding: 0 4px; +} diff --git a/frappe/desk/page/desktop/desktop.html b/frappe/desk/page/desktop/desktop.html index 4f274c6497..bfefedb5a9 100644 --- a/frappe/desk/page/desktop/desktop.html +++ b/frappe/desk/page/desktop/desktop.html @@ -1,6 +1,6 @@
-
" -msgstr "" +msgstr "Chân trang có thể không hiển thị vì tùy chọn {0} bị tắt" #. Description of the 'Footer HTML' (HTML Editor) field in DocType 'Letter #. Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Footer will display correctly only in PDF" -msgstr "" +msgstr "Chân trang sẽ chỉ hiển thị chính xác trong PDF" #. Label of the for_doctype (Link) field in DocType 'Permission Log' #: frappe/core/doctype/permission_log/permission_log.json @@ -10803,15 +10826,15 @@ msgstr "" #. Label of the for_document (Dynamic Link) field in DocType 'Permission Log' #: frappe/core/doctype/permission_log/permission_log.json msgid "For Document" -msgstr "" +msgstr "Đối với Tài liệu" #: frappe/core/doctype/user_permission/user_permission_list.js:155 msgid "For Document Type" -msgstr "" +msgstr "Đối với loại tài liệu" #: frappe/public/js/frappe/widgets/widget_dialog.js:566 msgid "For Example: {} Open" -msgstr "" +msgstr "Ví dụ: {} Mở" #. Label of the for_user (Link) field in DocType 'List Filter' #. Label of the for_user (Link) field in DocType 'Notification Log' @@ -10824,12 +10847,12 @@ msgstr "" #: frappe/desk/doctype/workspace/workspace.json #: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json msgid "For User" -msgstr "" +msgstr "Dành cho người dùng" #. Label of the for_value (Dynamic Link) field in DocType 'User Permission' #: frappe/core/doctype/user_permission/user_permission.json msgid "For Value" -msgstr "" +msgstr "Đối với giá trị" #. Description of the 'Subject' (Data) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json @@ -10837,22 +10860,22 @@ msgid "For a dynamic subject, use Jinja tags like this: {{ doc.name }} Del msgstr "" #: frappe/public/js/frappe/views/reports/query_report.js:2248 -#: frappe/public/js/frappe/views/reports/report_view.js:102 +#: frappe/public/js/frappe/views/reports/report_view.js:104 msgid "For comparison, use >5, <10 or =324. For ranges, use 5:10 (for values between 5 & 10)." -msgstr "" +msgstr "Để so sánh, hãy sử dụng >5, <10 hoặc =324. Đối với phạm vi, hãy sử dụng 5:10 (đối với các giá trị từ 5 đến 10)." #: frappe/public/js/frappe/utils/dashboard_utils.js:162 msgid "For example:" -msgstr "" +msgstr "Ví dụ:" #: frappe/printing/page/print_format_builder/print_format_builder.js:786 msgid "For example: If you want to include the document ID, use {0}" -msgstr "" +msgstr "Ví dụ: Nếu bạn muốn bao gồm ID tài liệu, hãy sử dụng {0}" #. Description of the 'Format' (Data) field in DocType 'Workspace Shortcut' #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json msgid "For example: {} Open" -msgstr "" +msgstr "Ví dụ: {} Mở" #. Description of the 'Client script' (Code) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json @@ -10861,21 +10884,21 @@ msgstr "" #: frappe/integrations/doctype/google_settings/google_settings.js:7 msgid "For more information, {0}." -msgstr "" +msgstr "Để biết thêm thông tin, {0}." #. Description of the 'Email To' (Small Text) field in DocType 'Auto Email #. Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "For multiple addresses, enter the address on different line. e.g. test@test.com ⏎ test1@test.com" -msgstr "" +msgstr "Đối với nhiều địa chỉ, hãy nhập địa chỉ trên dòng khác nhau. ví dụ. test@test.com ⏎ test1@test.com" #: frappe/core/doctype/data_export/exporter.py:197 msgid "For updating, you can update only selective columns." -msgstr "" +msgstr "Để cập nhật, bạn chỉ có thể cập nhật các cột chọn lọc." -#: frappe/core/doctype/doctype/doctype.py:1800 +#: frappe/core/doctype/doctype/doctype.py:1803 msgid "For {0} at level {1} in {2} in row {3}" -msgstr "" +msgstr "Đối với {0} ở cấp độ {1} trong {2} trong hàng {3}" #. Label of the force (Check) field in DocType 'Package Import' #. Option for the 'Skip Authorization' (Select) field in DocType 'OAuth @@ -10883,7 +10906,7 @@ msgstr "" #: frappe/core/doctype/package_import/package_import.json #: frappe/integrations/doctype/oauth_provider_settings/oauth_provider_settings.json msgid "Force" -msgstr "" +msgstr "Lực lượng" #. Label of the force_re_route_to_default_view (Check) field in DocType #. 'DocType' @@ -10892,17 +10915,17 @@ msgstr "" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Force Re-route to Default View" -msgstr "" +msgstr "Buộc định tuyến lại về chế độ xem mặc định" #: frappe/core/doctype/rq_job/rq_job.js:13 msgid "Force Stop job" -msgstr "" +msgstr "Buộc dừng công việc" #. Label of the force_user_to_reset_password (Int) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Force User to Reset Password" -msgstr "" +msgstr "Buộc người dùng đặt lại mật khẩu" #. Label of the force_web_capture_mode_for_uploads (Check) field in DocType #. 'System Settings' @@ -10912,7 +10935,7 @@ msgstr "" #: frappe/www/login.html:37 msgid "Forgot Password?" -msgstr "" +msgstr "Quên mật khẩu?" #. Label of the form_builder_tab (Tab Break) field in DocType 'DocType' #. Option for the 'Apply To' (Select) field in DocType 'Client Script' @@ -10927,14 +10950,14 @@ msgstr "" #: frappe/printing/page/print/print.js:104 #: frappe/website/doctype/web_form/web_form.json msgid "Form" -msgstr "" +msgstr "Mẫu" #. Label of the form_builder (HTML) field in DocType 'DocType' #. Label of the form_builder (HTML) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Form Builder" -msgstr "" +msgstr "Trình tạo biểu mẫu" #. Label of the form_dict (Code) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json @@ -10952,24 +10975,24 @@ msgstr "" #: frappe/custom/doctype/customize_form/customize_form.json #: frappe/website/doctype/web_form/web_form.json msgid "Form Settings" -msgstr "" +msgstr "Cài đặt biểu mẫu" #. Name of a DocType #. Label of the form_tour (Link) field in DocType 'Onboarding Step' #: frappe/desk/doctype/form_tour/form_tour.json #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Form Tour" -msgstr "" +msgstr "Tham quan biểu mẫu" #. Name of a DocType #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Form Tour Step" -msgstr "" +msgstr "Biểu mẫu Bước tham quan" #. Option for the 'Request Structure' (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "Form URL-Encoded" -msgstr "" +msgstr "Mẫu được mã hóa URL" #. Label of the format (Data) field in DocType 'Workspace Shortcut' #. Label of the format (Select) field in DocType 'Auto Email Report' @@ -10977,27 +11000,27 @@ msgstr "" #: frappe/email/doctype/auto_email_report/auto_email_report.json #: frappe/public/js/frappe/widgets/widget_dialog.js:565 msgid "Format" -msgstr "" +msgstr "Định dạng" #. Label of the format_data (Code) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Format Data" -msgstr "" +msgstr "Định dạng dữ liệu" #. Option for the 'Frequency' (Select) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json msgid "Fortnightly" -msgstr "" +msgstr "Hai tuần một lần" #: frappe/core/doctype/communication/communication.js:70 msgid "Forward" -msgstr "" +msgstr "Chuyển tiếp" #. Label of the forward_query_parameters (Check) field in DocType 'Website #. Route Redirect' #: frappe/website/doctype/website_route_redirect/website_route_redirect.json msgid "Forward Query Parameters" -msgstr "" +msgstr "Chuyển tiếp tham số truy vấn" #. Label of the forward_to_email (Data) field in DocType 'Contact Us Settings' #: frappe/website/doctype/contact_us_settings/contact_us_settings.json @@ -11007,12 +11030,12 @@ msgstr "" #. Label of the fraction (Data) field in DocType 'Currency' #: frappe/geo/doctype/currency/currency.json msgid "Fraction" -msgstr "" +msgstr "Phân số" #. Label of the fraction_units (Int) field in DocType 'Currency' #: frappe/geo/doctype/currency/currency.json msgid "Fraction Units" -msgstr "" +msgstr "Đơn vị phân số" #. Option for the 'Social Login Provider' (Select) field in DocType 'Social #. Login Key' @@ -11043,7 +11066,7 @@ msgstr "" msgid "Frappe Mail" msgstr "" -#: frappe/email/doctype/email_account/email_account.py:547 +#: frappe/email/doctype/email_account/email_account.py:548 msgid "Frappe Mail OAuth Error" msgstr "" @@ -11056,7 +11079,7 @@ msgstr "" #. Type: Route #: frappe/hooks.py msgid "Frappe Support" -msgstr "" +msgstr "Hỗ trợ sinh tố" #: frappe/website/doctype/web_page/web_page.js:92 msgid "Frappe page builder using components" @@ -11065,7 +11088,7 @@ msgstr "" #: frappe/public/js/frappe/file_uploader/ImageCropper.vue:112 msgctxt "Image Cropper" msgid "Free" -msgstr "" +msgstr "Miễn phí" #. Label of the frequency (Select) field in DocType 'Auto Repeat' #. Label of the frequency (Select) field in DocType 'Scheduled Job Type' @@ -11078,7 +11101,7 @@ msgstr "" #: frappe/email/doctype/auto_email_report/auto_email_report.json #: frappe/public/js/frappe/utils/common.js:404 msgid "Frequency" -msgstr "" +msgstr "Tần số" #. Option for the 'Day' (Select) field in DocType 'Assignment Rule Day' #. Option for the 'Day' (Select) field in DocType 'Auto Repeat Day' @@ -11094,63 +11117,63 @@ msgstr "" #: frappe/desk/doctype/event/event.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Friday" -msgstr "" +msgstr "Thứ Sáu" #. Label of the sender (Data) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json #: frappe/core/doctype/permission_log/permission_log.js:12 #: frappe/public/js/frappe/views/inbox/inbox_view.js:70 msgid "From" -msgstr "" +msgstr "Từ" #: frappe/public/js/frappe/views/communication.js:222 msgctxt "Email Sender" msgid "From" -msgstr "" +msgstr "Từ" #. Label of the from_attach_field (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "From Attach Field" -msgstr "" +msgstr "Từ trường đính kèm" #. Label of the from_date (Date) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/website/report/website_analytics/website_analytics.js:8 msgid "From Date" -msgstr "" +msgstr "Từ Ngày" #. 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 "Từ trường ngày" #: frappe/public/js/frappe/views/reports/query_report.js:1947 msgid "From Document Type" -msgstr "" +msgstr "Từ Loại Tài liệu" #. Option for the 'Attach Files' (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "From Field" -msgstr "" +msgstr "Từ hiện trường" #. Label of the sender_full_name (Data) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "From Full Name" -msgstr "" +msgstr "Từ Tên đầy đủ" #. Label of the from_user (Link) field in DocType 'Notification Log' #: frappe/desk/doctype/notification_log/notification_log.json msgid "From User" -msgstr "" +msgstr "Từ người dùng" #: frappe/public/js/frappe/utils/diffview.js:31 msgid "From version" -msgstr "" +msgstr "Từ phiên bản" #. 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 "Đầy đủ" #. Label of the full_name (Data) field in DocType 'Contact' #. Label of the full_name (Data) field in DocType 'Activity Log' @@ -11159,21 +11182,21 @@ msgstr "" #: frappe/contacts/doctype/contact/contact.json #: frappe/core/doctype/activity_log/activity_log.json #: frappe/core/doctype/user/user.json -#: frappe/desk/page/setup_wizard/setup_wizard.js:479 +#: frappe/desk/page/setup_wizard/setup_wizard.js:473 #: frappe/templates/signup.html:4 #: frappe/website/doctype/about_us_team_member/about_us_team_member.json msgid "Full Name" -msgstr "" +msgstr "Tên đầy đủ" #: frappe/printing/page/print/print.js:87 #: frappe/public/js/frappe/form/templates/print_layout.html:42 msgid "Full Page" -msgstr "" +msgstr "Toàn trang" #. Label of the full_width (Check) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Full Width" -msgstr "" +msgstr "Chiều rộng đầy đủ" #. Label of the function (Select) field in DocType 'Number Card' #. Label of the report_function (Select) field in DocType 'Number Card' @@ -11181,19 +11204,19 @@ msgstr "" #: frappe/public/js/frappe/views/reports/query_report.js:247 #: frappe/public/js/frappe/widgets/widget_dialog.js:699 msgid "Function" -msgstr "" +msgstr "Chức năng" #: frappe/public/js/frappe/widgets/widget_dialog.js:706 msgid "Function Based On" -msgstr "" +msgstr "Chức năng dựa trên" -#: frappe/__init__.py:463 +#: frappe/__init__.py:465 msgid "Function {0} is not whitelisted." -msgstr "" +msgstr "Chức năng {0} không có trong danh sách trắng." -#: frappe/database/query.py:2094 +#: frappe/database/query.py:2173 msgid "Function {0} requires arguments but none were provided" -msgstr "" +msgstr "Hàm {0} yêu cầu đối số nhưng không có đối số nào được cung cấp" #: frappe/public/js/frappe/views/treeview.js:427 msgid "Further sub-groups can only be created under records marked as 'Group'" @@ -11206,7 +11229,7 @@ msgstr "" #. Option for the 'Method' (Select) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json msgid "GET" -msgstr "" +msgstr "NHẬN" #. Option for the 'Service' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json @@ -11221,7 +11244,7 @@ msgstr "" #. Option for the 'License Type' (Select) field in DocType 'Package' #: frappe/core/doctype/package/package.json msgid "GNU General Public License" -msgstr "" +msgstr "Giấy phép Công cộng GNU" #. Option for the 'Select List View' (Select) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json @@ -11241,44 +11264,44 @@ msgstr "" #: frappe/contacts/doctype/gender/gender.json #: frappe/core/doctype/user/user.json msgid "Gender" -msgstr "" +msgstr "Giới tính" #: frappe/desk/page/setup_wizard/install_fixtures.py:32 msgid "Genderqueer" -msgstr "" +msgstr "Giới tính không xác định" #: frappe/www/contact.html:29 msgid "General" -msgstr "" +msgstr "Chung" #. Label of the generate_keys (Button) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Generate Keys" -msgstr "" +msgstr "Tạo khóa" #: frappe/public/js/frappe/views/reports/query_report.js:898 msgid "Generate New Report" -msgstr "" +msgstr "Tạo Báo cáo Mới" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:469 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:460 msgid "Generate Random Password" -msgstr "" +msgstr "Tạo mật khẩu ngẫu nhiên" #. Label of the generate_separate_documents_for_each_assignee (Check) field in #. DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json msgid "Generate Separate Documents For Each Assignee" -msgstr "" +msgstr "Tạo Tài Liệu Riêng Cho Mỗi Người Được Giao" -#: frappe/public/js/frappe/ui/sidebar/sidebar.js:328 -#: frappe/public/js/frappe/utils/utils.js:2069 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:348 +#: frappe/public/js/frappe/utils/utils.js:2079 msgid "Generate Tracking URL" -msgstr "" +msgstr "Tạo URL theo dõi" #. Option for the 'Provider' (Select) field in DocType 'Geolocation Settings' #: frappe/integrations/doctype/geolocation_settings/geolocation_settings.json msgid "Geoapify" -msgstr "" +msgstr "Định vị địa lý" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -11287,29 +11310,29 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Geolocation" -msgstr "" +msgstr "Định vị địa lý" #. Name of a DocType #: frappe/integrations/doctype/geolocation_settings/geolocation_settings.json msgid "Geolocation Settings" -msgstr "" +msgstr "Cài đặt định vị địa lý" #: frappe/email/doctype/notification/notification.js:236 msgid "Get Alerts for Today" -msgstr "" +msgstr "Nhận thông báo hôm nay" #: frappe/desk/page/backups/backups.js:21 msgid "Get Backup Encryption Key" -msgstr "" +msgstr "Nhận khóa mã hóa dự phòng" #. Label of the get_contacts (Button) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json msgid "Get Contacts" -msgstr "" +msgstr "Nhận Danh bạ" #: frappe/website/doctype/web_form/web_form.js:93 msgid "Get Fields" -msgstr "" +msgstr "Nhận trường" #: frappe/printing/doctype/letter_head/letter_head.js:32 msgid "Get Header and Footer wkhtmltopdf variables" @@ -11317,7 +11340,7 @@ msgstr "" #: frappe/public/js/frappe/form/multi_select_dialog.js:86 msgid "Get Items" -msgstr "" +msgstr "Nhận vật phẩm" #: frappe/integrations/doctype/connected_app/connected_app.js:6 msgid "Get OpenID Configuration" @@ -11325,13 +11348,13 @@ msgstr "" #: frappe/www/printview.html:22 msgid "Get PDF" -msgstr "" +msgstr "Nhận PDF" #. Description of the 'Try a Naming Series' (Data) field in DocType 'Document #. Naming Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Get a preview of generated names with a series." -msgstr "" +msgstr "Nhận bản xem trước các tên được tạo bằng một chuỗi." #. Description of the 'Email Threads on Assigned Document' (Check) field in #. DocType 'Notification Settings' @@ -11342,7 +11365,7 @@ msgstr "" #. 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 "Nhận hình đại diện được công nhận trên toàn cầu của bạn từ Gravatar.com" #. Label of the git_branch (Data) field in DocType 'Installed Application' #: frappe/core/doctype/installed_application/installed_application.json @@ -11362,73 +11385,73 @@ msgstr "" #. Name of a DocType #: frappe/desk/doctype/global_search_doctype/global_search_doctype.json msgid "Global Search DocType" -msgstr "" +msgstr "Loại tài liệu tìm kiếm toàn cầu" #: frappe/desk/doctype/global_search_settings/global_search_settings.js:24 msgid "Global Search Document Types Reset." -msgstr "" +msgstr "Đặt lại loại tài liệu tìm kiếm toàn cầu." #. Name of a DocType #: frappe/desk/doctype/global_search_settings/global_search_settings.json msgid "Global Search Settings" -msgstr "" +msgstr "Cài đặt tìm kiếm chung" #: frappe/public/js/frappe/ui/keyboard.js:122 msgid "Global Shortcuts" -msgstr "" +msgstr "Phím tắt chung" #. Label of the global_unsubscribe (Check) field in DocType 'Email Unsubscribe' #: frappe/email/doctype/email_unsubscribe/email_unsubscribe.json msgid "Global Unsubscribe" -msgstr "" +msgstr "Hủy đăng ký toàn cầu" -#: frappe/public/js/frappe/form/toolbar.js:879 +#: frappe/public/js/frappe/form/toolbar.js:880 msgid "Go" -msgstr "" +msgstr "Đi" #: frappe/public/js/frappe/widgets/onboarding_widget.js:241 #: frappe/public/js/frappe/widgets/onboarding_widget.js:321 msgid "Go Back" -msgstr "" +msgstr "Quay lại" #: frappe/desk/doctype/notification_settings/notification_settings.js:17 msgid "Go to Notification Settings List" -msgstr "" +msgstr "Đi tới Danh sách cài đặt thông báo" #. Option for the 'Action' (Select) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Go to Page" -msgstr "" +msgstr "Đi tới Trang" #: frappe/public/js/workflow_builder/workflow_builder.bundle.js:41 msgid "Go to Workflow" -msgstr "" +msgstr "Đi tới Quy trình làm việc" #: frappe/desk/doctype/workspace/workspace.js:18 msgid "Go to Workspace" -msgstr "" +msgstr "Đi tới Không gian làm việc" #: frappe/public/js/frappe/form/form.js:145 msgid "Go to next record" -msgstr "" +msgstr "Đi tới bản ghi tiếp theo" #: frappe/public/js/frappe/form/form.js:155 msgid "Go to previous record" -msgstr "" +msgstr "Đi tới bản ghi trước đó" #: frappe/integrations/doctype/slack_webhook_url/slack_webhook_url.py:53 msgid "Go to the document" -msgstr "" +msgstr "Đi tới tài liệu" #. 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 "Truy cập URL này sau khi hoàn thành biểu mẫu" #: frappe/core/doctype/doctype/doctype.js:54 #: frappe/custom/doctype/client_script/client_script.js:12 msgid "Go to {0}" -msgstr "" +msgstr "Đi tới {0}" #: frappe/core/doctype/data_import/data_import.js:93 #: frappe/core/doctype/doctype/doctype.js:55 @@ -11436,15 +11459,15 @@ msgstr "" #: frappe/custom/doctype/doctype_layout/doctype_layout.js:42 #: frappe/workflow/doctype/workflow/workflow.js:44 msgid "Go to {0} List" -msgstr "" +msgstr "Đi tới {0} Danh sách" #: frappe/core/doctype/page/page.js:11 msgid "Go to {0} Page" -msgstr "" +msgstr "Tới trang {0}" #: frappe/utils/goal.py:126 frappe/utils/goal.py:133 msgid "Goal" -msgstr "" +msgstr "Mục tiêu" #. Option for the 'Social Login Provider' (Select) field in DocType 'Social #. Login Key' @@ -11595,49 +11618,49 @@ 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 "Loại tài trợ" #: frappe/public/js/frappe/form/dashboard.js:34 #: frappe/public/js/frappe/form/templates/form_dashboard.html:10 msgid "Graph" -msgstr "" +msgstr "Đồ thị" #. Option for the 'Color' (Select) field in DocType 'DocType State' #. Option for the 'Indicator' (Select) field in DocType 'Kanban Board Column' #: frappe/core/doctype/doctype_state/doctype_state.json #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Gray" -msgstr "" +msgstr "Xám" #: frappe/public/js/frappe/ui/filters/filter.js:23 msgid "Greater Than" -msgstr "" +msgstr "Lớn Hơn" #: frappe/public/js/frappe/ui/filters/filter.js:25 msgid "Greater Than Or Equal To" -msgstr "" +msgstr "Lớn hơn hoặc bằng" #. Option for the 'Color' (Select) field in DocType 'DocType State' #. Option for the 'Indicator' (Select) field in DocType 'Kanban Board Column' #: frappe/core/doctype/doctype_state/doctype_state.json #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Green" -msgstr "" +msgstr "Xanh" #: frappe/public/js/form_builder/components/controls/TableControl.vue:53 msgid "Grid Empty State" -msgstr "" +msgstr "Trạng thái trống của lưới" #. Label of the grid_page_length (Int) field in DocType 'DocType' #. Label of the grid_page_length (Int) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Grid Page Length" -msgstr "" +msgstr "Độ dài trang lưới" #: frappe/public/js/frappe/ui/keyboard.js:127 msgid "Grid Shortcuts" -msgstr "" +msgstr "Phím tắt lưới" #. Label of the group (Data) field in DocType 'DocType Action' #. Label of the group (Data) field in DocType 'DocType Link' @@ -11646,69 +11669,69 @@ msgstr "" #: frappe/core/doctype/doctype_link/doctype_link.json #: frappe/website/doctype/website_sidebar_item/website_sidebar_item.json msgid "Group" -msgstr "" +msgstr "Nhóm" #. Option for the 'Chart Type' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/website/report/website_analytics/website_analytics.js:32 msgid "Group By" -msgstr "" +msgstr "Nhóm theo" #. Label of the group_by_based_on (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Group By Based On" -msgstr "" +msgstr "Nhóm theo dựa trên" #. Label of the group_by_type (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Group By Type" -msgstr "" +msgstr "Nhóm theo loại" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.py:408 msgid "Group By field is required to create a dashboard chart" msgstr "" -#: frappe/database/query.py:1242 +#: frappe/database/query.py:1257 msgid "Group By must be a string" msgstr "" #. Label of the ldap_group_objectclass (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "Group Object Class" -msgstr "" +msgstr "Lớp đối tượng nhóm" #. Description of a Card Break in the Build Workspace #: frappe/core/workspace/build/build.json msgid "Group your custom doctypes under modules" -msgstr "" +msgstr "Nhóm các loại tài liệu tùy chỉnh của bạn theo mô-đun" #: frappe/public/js/frappe/ui/group_by/group_by.js:428 msgid "Grouped by {0}" -msgstr "" +msgstr "Được nhóm theo {0}" #. Option for the 'Method' (Select) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json msgid "HEAD" -msgstr "" +msgstr "ĐẦU" #. Option for the 'Provider' (Select) field in DocType 'Geolocation Settings' #: frappe/integrations/doctype/geolocation_settings/geolocation_settings.json msgid "HERE" -msgstr "" +msgstr "TẠI ĐÂY" #. Option for the 'Time Format' (Select) field in DocType 'Language' #. Option for the 'Time Format' (Select) field in DocType 'System Settings' #: frappe/core/doctype/language/language.json #: frappe/core/doctype/system_settings/system_settings.json msgid "HH:mm" -msgstr "" +msgstr "HH:mm" #. Option for the 'Time Format' (Select) field in DocType 'Language' #. Option for the 'Time Format' (Select) field in DocType 'System Settings' #: frappe/core/doctype/language/language.json #: frappe/core/doctype/system_settings/system_settings.json msgid "HH:mm:ss" -msgstr "" +msgstr "HH:mm:ss" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -11737,7 +11760,7 @@ msgstr "" #: frappe/website/doctype/web_page/web_page.js:92 #: frappe/website/doctype/web_page/web_page.json msgid "HTML" -msgstr "" +msgstr "HTML" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -11746,21 +11769,21 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "HTML Editor" -msgstr "" +msgstr "Trình soạn thảo HTML" #: frappe/public/js/frappe/views/communication.js:142 msgid "HTML Message" -msgstr "" +msgstr "Tin nhắn HTML" #. Label of the page (HTML Editor) field in DocType 'Access Log' #: frappe/core/doctype/access_log/access_log.json msgid "HTML Page" -msgstr "" +msgstr "Trang HTML" #. Description of the 'Header' (HTML Editor) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "HTML for header section. Optional" -msgstr "" +msgstr "HTML cho phần tiêu đề. Tùy chọn" #: frappe/website/doctype/web_page/web_page.js:92 msgid "HTML with jinja support" @@ -11769,20 +11792,20 @@ msgstr "" #. Option for the 'Width' (Select) field in DocType 'Dashboard Chart Link' #: frappe/desk/doctype/dashboard_chart_link/dashboard_chart_link.json msgid "Half" -msgstr "" +msgstr "Một nửa" #. Option for the 'Repeat On' (Select) field in DocType 'Event' #. Option for the 'Period' (Select) field in DocType 'Auto Email Report' #: frappe/desk/doctype/event/event.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Half Yearly" -msgstr "" +msgstr "Nửa năm" #. Option for the 'Frequency' (Select) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json #: frappe/public/js/frappe/utils/common.js:411 msgid "Half-yearly" -msgstr "" +msgstr "Nửa năm một lần" #. Label of the handled_emails (Int) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json @@ -11792,28 +11815,28 @@ msgstr "" #. Label of the has_attachment (Check) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Has Attachment" -msgstr "" +msgstr "Có Tệp Đính Kèm" #. Name of a DocType #: frappe/core/doctype/has_domain/has_domain.json msgid "Has Domain" -msgstr "" +msgstr "Có tên miền" #. Label of the has_next_condition (Check) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Has Next Condition" -msgstr "" +msgstr "Có điều kiện tiếp theo" #. Name of a DocType #: frappe/core/doctype/has_role/has_role.json msgid "Has Role" -msgstr "" +msgstr "Có vai trò" #. Label of the has_setup_wizard (Check) field in DocType 'Installed #. Application' #: frappe/core/doctype/installed_application/installed_application.json msgid "Has Setup Wizard" -msgstr "" +msgstr "Có Trình hướng dẫn cài đặt" #. Label of the has_web_view (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -11822,7 +11845,7 @@ msgstr "" #: frappe/templates/signup.html:19 msgid "Have an account? Login" -msgstr "" +msgstr "Có tài khoản? Đăng nhập" #. Label of the header (Check) field in DocType 'SMS Parameter' #. Label of the header_section (Section Break) field in DocType 'Letter Head' @@ -11833,26 +11856,26 @@ msgstr "" #: frappe/website/doctype/web_page/web_page.json #: frappe/website/doctype/website_slideshow/website_slideshow.json msgid "Header" -msgstr "" +msgstr "Tiêu đề" #. Label of the content (HTML Editor) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Header HTML" -msgstr "" +msgstr "Tiêu đề HTML" #: frappe/printing/doctype/letter_head/letter_head.py:76 msgid "Header HTML set from attachment {0}" -msgstr "" +msgstr "Bộ HTML tiêu đề từ tệp đính kèm {0}" #. Label of the header_icon (Icon) field in DocType 'Workspace Sidebar' #: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json msgid "Header Icon" -msgstr "" +msgstr "Biểu tượng tiêu đề" #. Label of the header_script (Code) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Header Script" -msgstr "" +msgstr "Tập lệnh tiêu đề" #. Label of the sb2 (Section Break) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json @@ -11867,16 +11890,16 @@ msgstr "" #: frappe/printing/doctype/letter_head/letter_head.js:30 msgid "Header/Footer scripts can be used to add dynamic behaviours." -msgstr "" +msgstr "Tập lệnh Đầu trang/Chân trang có thể được sử dụng để thêm hành vi động." #. Label of the webhook_headers (Table) field in DocType 'Webhook' #. Label of the headers (Code) field in DocType 'Webhook Request Log' #: frappe/integrations/doctype/webhook/webhook.json #: frappe/integrations/doctype/webhook_request_log/webhook_request_log.json msgid "Headers" -msgstr "" +msgstr "Tiêu đề" -#: frappe/email/email_body.py:323 +#: frappe/email/email_body.py:325 msgid "Headers must be a dictionary" msgstr "" @@ -11892,16 +11915,16 @@ msgstr "" #: frappe/website/doctype/contact_us_settings/contact_us_settings.json #: frappe/website/doctype/website_slideshow_item/website_slideshow_item.json msgid "Heading" -msgstr "" +msgstr "Tiêu đề" #. Option for the 'Type' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Heatmap" -msgstr "" +msgstr "Bản đồ nhiệt" #: frappe/templates/emails/new_user.html:2 msgid "Hello" -msgstr "" +msgstr "Xin chào" #: frappe/templates/emails/user_invitation.html:2 #: frappe/templates/emails/user_invitation_cancelled.html:2 @@ -11917,46 +11940,46 @@ msgstr "xin chào," #: frappe/public/js/frappe/form/workflow.js:23 #: frappe/public/js/frappe/utils/help.js:27 msgid "Help" -msgstr "" +msgstr "Trợ giúp" #. Name of a DocType #. Label of a Link in the Website Workspace #: frappe/website/doctype/help_article/help_article.json #: frappe/website/workspace/website/website.json msgid "Help Article" -msgstr "" +msgstr "Bài viết trợ giúp" #. Label of the help_articles (Int) field in DocType 'Help Category' #: frappe/website/doctype/help_category/help_category.json msgid "Help Articles" -msgstr "" +msgstr "Bài viết trợ giúp" #. Name of a DocType #. Label of a Link in the Website Workspace #: frappe/website/doctype/help_category/help_category.json #: frappe/website/workspace/website/website.json msgid "Help Category" -msgstr "" +msgstr "Chuyên mục trợ giúp" #. Label of the help_dropdown (Table) field in DocType 'Navbar Settings' #: frappe/core/doctype/navbar_settings/navbar_settings.json msgid "Help Dropdown" -msgstr "" +msgstr "Trợ giúp thả xuống" #. 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 "Trợ giúp 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 \"/desk/note/[Note Name]\" as the Link URL. (don't use \"http://\")" -msgstr "" +msgstr "Trợ giúp: Để liên kết đến một bản ghi khác trong hệ thống, hãy sử dụng \"/desk/note/[Tên ghi chú]\" làm URL liên kết. (không sử dụng \"http://\")" #. Label of the helpful (Int) field in DocType 'Help Article' #: frappe/website/doctype/help_article/help_article.json msgid "Helpful" -msgstr "" +msgstr "Hữu ích" #. Option for the 'Font' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json @@ -11968,13 +11991,13 @@ msgstr "" msgid "Helvetica Neue" msgstr "" -#: frappe/public/js/frappe/utils/utils.js:2066 +#: frappe/public/js/frappe/utils/utils.js:2076 msgid "Here's your tracking URL" msgstr "" #: frappe/www/qrcode.html:9 msgid "Hi {0}" -msgstr "" +msgstr "Xin chào {0}" #. Label of the hidden (Check) field in DocType 'DocField' #. Label of the hidden (Check) field in DocType 'DocType Action' @@ -11996,17 +12019,17 @@ msgstr "" #: frappe/printing/page/print_format_builder/print_format_builder_field.html:3 #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Hidden" -msgstr "" +msgstr "Ẩn" #. Label of the section_break_13 (Section Break) field in DocType 'Form Tour #. Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Hidden Fields" -msgstr "" +msgstr "Trường ẩn" #: frappe/public/js/frappe/views/reports/query_report.js:1743 msgid "Hidden columns include:
{0}" -msgstr "" +msgstr "Các cột ẩn bao gồm:
{0}" #. Option for the 'Page Number' (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json @@ -12016,12 +12039,12 @@ msgstr "" #: frappe/templates/includes/login/login.js:82 #: frappe/www/update-password.html:117 msgid "Hide" -msgstr "" +msgstr "Ẩn" #. 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 "Ẩn khối" #. Label of the hide_border (Check) field in DocType 'DocField' #. Label of the hide_border (Check) field in DocType 'Custom Field' @@ -12030,19 +12053,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 "Ẩn đường viền" #. 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 "Ẩn nút" #. 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 "Ẩn bản sao" #. Label of the hide_custom (Check) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json @@ -12056,7 +12079,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Hide Days" -msgstr "" +msgstr "Ẩn Ngày" #. Label of the hide_descendants (Check) field in DocType 'User Permission' #: frappe/core/doctype/user_permission/user_permission.json @@ -12068,25 +12091,25 @@ msgstr "" #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Hide Empty Read-Only Fields" -msgstr "" +msgstr "Ẩn các trường chỉ đọc trống" #: frappe/www/error.html:62 msgid "Hide Error" -msgstr "" +msgstr "Ẩn lỗi" #: frappe/printing/page/print_format_builder/print_format_builder.js:488 msgid "Hide Label" -msgstr "" +msgstr "Ẩn nhãn" #. Label of the hide_login (Check) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Hide Login" -msgstr "" +msgstr "Ẩn Đăng nhập" #: frappe/public/js/form_builder/form_builder.bundle.js:43 #: frappe/public/js/print_format_builder/print_format_builder.bundle.js:54 msgid "Hide Preview" -msgstr "" +msgstr "Ẩn bản xem trước" #. Description of the 'Hide Buttons' (Check) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json @@ -12100,7 +12123,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Hide Seconds" -msgstr "" +msgstr "Ẩn Giây" #. Label of the hide_toolbar (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -12112,24 +12135,24 @@ msgstr "" msgid "Hide Standard Menu" msgstr "" -#: frappe/public/js/frappe/views/calendar/calendar.js:179 +#: frappe/public/js/frappe/views/calendar/calendar.js:180 msgid "Hide Weekends" -msgstr "" +msgstr "Ẩn ngày cuối tuần" #. Description of the 'Hide Descendants' (Check) field in DocType 'User #. Permission' #: frappe/core/doctype/user_permission/user_permission.json msgid "Hide descendant records of For Value." -msgstr "" +msgstr "Ẩn bản ghi con của Đối với Giá trị." #: frappe/public/js/frappe/form/layout.js:296 msgid "Hide details" -msgstr "" +msgstr "Ẩn chi tiết" #. Label of the hide_footer (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Hide footer" -msgstr "" +msgstr "Ẩn chân trang" #. Label of the hide_footer_in_auto_email_reports (Check) field in DocType #. 'System Settings' @@ -12140,28 +12163,28 @@ msgstr "" #. 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 "Ẩn đăng ký chân trang" #. Label of the hide_navbar (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Hide navbar" -msgstr "" +msgstr "Ẩn thanh điều hướng" #. Option for the 'Priority' (Select) field in DocType 'ToDo' #: frappe/desk/doctype/todo/todo.json -#: frappe/public/js/frappe/form/sidebar/assign_to.js:228 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:236 msgid "High" -msgstr "" +msgstr "Cao" #. 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 "Quy tắc ưu tiên cao hơn sẽ được áp dụng trước" #. Label of the highlight (Text) field in DocType 'Company History' #: frappe/website/doctype/company_history/company_history.json msgid "Highlight" -msgstr "" +msgstr "Đánh dấu" #: frappe/www/update-password.html:301 msgid "Hint: Include symbols, numbers and capital letters in the password" @@ -12178,33 +12201,33 @@ msgstr "" #: frappe/www/contact.py:25 frappe/www/login.html:170 frappe/www/me.html:76 #: frappe/www/message.html:29 msgid "Home" -msgstr "" +msgstr "Trang chủ" #. Label of the home_page (Data) field in DocType 'Role' #. Label of the home_page (Data) field in DocType 'Website Settings' #: frappe/core/doctype/role/role.json #: frappe/website/doctype/website_settings/website_settings.json msgid "Home Page" -msgstr "" +msgstr "Trang chủ" #. Label of the home_settings (Code) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Home Settings" -msgstr "" +msgstr "Cài đặt trang chủ" #: frappe/core/doctype/file/test_file.py:321 #: frappe/core/doctype/file/test_file.py:323 #: frappe/core/doctype/file/test_file.py:387 msgid "Home/Test Folder 1" -msgstr "" +msgstr "Trang chủ/Thư mục thử nghiệm 1" #: frappe/core/doctype/file/test_file.py:376 msgid "Home/Test Folder 1/Test Folder 3" -msgstr "" +msgstr "Trang chủ/Thư mục Kiểm tra 1/Thư mục Kiểm tra 3" #: frappe/core/doctype/file/test_file.py:332 msgid "Home/Test Folder 2" -msgstr "" +msgstr "Trang chủ/Thư mục thử nghiệm 2" #. Option for the 'Frequency' (Select) field in DocType 'Scheduled Job Type' #. Option for the 'Event Frequency' (Select) field in DocType 'Server Script' @@ -12213,35 +12236,35 @@ msgstr "" #: frappe/core/doctype/server_script/server_script.json #: frappe/core/doctype/user/user.json msgid "Hourly" -msgstr "" +msgstr "Hàng giờ" #. 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 "Dài hàng giờ" #. Option for the 'Frequency' (Select) field in DocType 'Scheduled Job Type' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json msgid "Hourly Maintenance" -msgstr "" +msgstr "Bảo trì hàng giờ" #. Description of the 'Password Reset Link Generation Limit' (Int) field in #. DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Hourly rate limit for generating password reset links" -msgstr "" +msgstr "Giới hạn tốc độ tạo liên kết đặt lại mật khẩu hàng giờ" #: frappe/public/js/frappe/form/controls/duration.js:29 msgctxt "Duration" msgid "Hours" -msgstr "" +msgstr "Giờ" #. 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 "Loại tiền tệ này nên được định dạng như thế nào? Nếu không được đặt, sẽ sử dụng giá trị mặc định của hệ thống" #. Description of the 'Resource Name' (Data) field in DocType 'OAuth Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json @@ -12251,7 +12274,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 "Tôi đoán bạn chưa có quyền truy cập vào bất kỳ không gian làm việc nào nhưng bạn có thể tạo một không gian làm việc cho riêng mình. Nhấp vào nút Tạo không gian làm việc để tạo một không gian làm việc.
" #. Label of the id (Data) field in DocType 'User Session Display' #: frappe/core/doctype/data_import/importer.py:1174 @@ -12260,31 +12283,31 @@ msgstr "" #: frappe/core/doctype/data_import/importer.py:1248 #: frappe/core/doctype/user_session_display/user_session_display.json #: frappe/desk/report/todo/todo.py:36 frappe/model/meta.py:52 -#: frappe/public/js/frappe/data_import/data_exporter.js:354 -#: frappe/public/js/frappe/data_import/data_exporter.js:369 +#: frappe/public/js/frappe/data_import/data_exporter.js:368 +#: frappe/public/js/frappe/data_import/data_exporter.js:383 #: frappe/public/js/frappe/list/list_settings.js:335 -#: frappe/public/js/frappe/list/list_view.js:390 -#: frappe/public/js/frappe/list/list_view.js:454 -#: frappe/public/js/frappe/list/list_view.js:2439 +#: frappe/public/js/frappe/list/list_view.js:399 +#: frappe/public/js/frappe/list/list_view.js:463 +#: frappe/public/js/frappe/list/list_view.js:2450 #: frappe/public/js/frappe/model/meta.js:208 #: frappe/public/js/frappe/model/model.js:122 msgid "ID" -msgstr "" +msgstr "Mã số" #: frappe/desk/reportview.py:529 -#: frappe/public/js/frappe/views/reports/report_view.js:983 +#: frappe/public/js/frappe/views/reports/report_view.js:985 msgctxt "Label of name column in report" msgid "ID" -msgstr "" +msgstr "Mã số" #: frappe/public/js/print_format_builder/PrintFormatControls.vue:169 msgid "ID (name)" -msgstr "" +msgstr "ID (tên)" #. Description of the 'Field Name' (Data) field in DocType 'Property Setter' #: frappe/custom/doctype/property_setter/property_setter.json msgid "ID (name) of the entity whose property is to be set" -msgstr "" +msgstr "ID (tên) của thực thể có thuộc tính được đặt" #. Description of the 'Section ID' (Data) field in DocType 'Web Page Block' #: frappe/website/doctype/web_page_block/web_page_block.json @@ -12295,7 +12318,7 @@ msgstr "" #. Account' #: frappe/email/doctype/email_account/email_account.json msgid "IMAP Details" -msgstr "" +msgstr "Chi tiết IMAP" #. Label of the imap_folder (Data) field in DocType 'Communication' #. Label of the imap_folder (Table) field in DocType 'Email Account' @@ -12304,7 +12327,7 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/imap_folder/imap_folder.json msgid "IMAP Folder" -msgstr "" +msgstr "Thư mục IMAP" #. Label of the ip_address (Data) field in DocType 'Activity Log' #. Label of the ip_address (Data) field in DocType 'Comment' @@ -12313,7 +12336,7 @@ msgstr "" #: frappe/core/doctype/comment/comment.json #: frappe/core/doctype/user_session_display/user_session_display.json msgid "IP Address" -msgstr "" +msgstr "Địa chỉ IP" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Label of the icon (Data) field in DocType 'DocType' @@ -12339,42 +12362,42 @@ msgstr "" #: frappe/public/js/frappe/views/workspace/workspace.js:520 #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Icon" -msgstr "" +msgstr "Biểu tượng" #. Label of the icon_image (Attach) field in DocType 'Desktop Icon' #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Icon Image" -msgstr "" +msgstr "Hình ảnh biểu tượng" #. Label of the icon_style (Select) field in DocType 'Desktop Settings' #: frappe/desk/doctype/desktop_settings/desktop_settings.json msgid "Icon Style" -msgstr "" +msgstr "Kiểu biểu tượng" #. Label of the icon_type (Select) field in DocType 'Desktop Icon' #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Icon Type" -msgstr "" +msgstr "Loại biểu tượng" -#: frappe/desk/page/desktop/desktop.js:1011 +#: frappe/desk/page/desktop/desktop.js:1023 msgid "Icon is not correctly configured please check the workspace sidebar to it" -msgstr "" +msgstr "Biểu tượng không được định cấu hình chính xác, vui lòng kiểm tra thanh bên của không gian làm việc với nó" #. Description of the 'Icon' (Select) field in DocType 'Workflow State' #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Icon will appear on the button" -msgstr "" +msgstr "Biểu tượng sẽ xuất hiện trên nút" #. Label of the sb_identity_details (Section Break) field in DocType 'Social #. Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Identity Details" -msgstr "" +msgstr "Chi tiết nhận dạng" #. Label of the idx (Int) field in DocType 'Desktop Icon' #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Idx" -msgstr "" +msgstr "Mã số" #. Description of the 'Apply Strict User Permissions' (Check) field in DocType #. 'System Settings' @@ -12389,13 +12412,13 @@ msgstr "" #: frappe/workflow/doctype/workflow/workflow.json #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "If Checked workflow status will not override status in list view" -msgstr "" +msgstr "Nếu trạng thái quy trình công việc đã kiểm tra sẽ không ghi đè trạng thái trong chế độ xem danh sách" -#: frappe/core/doctype/doctype/doctype.py:1812 +#: frappe/core/doctype/doctype/doctype.py:1815 #: frappe/core/report/user_doctype_permissions/user_doctype_permissions.py:45 #: frappe/public/js/frappe/roles_editor.js:68 msgid "If Owner" -msgstr "" +msgstr "Nếu chủ sở hữu" #: frappe/core/page/permission_manager/permission_manager_help.html:92 msgid "If a Role does not have access at Level 0, then higher levels are meaningless." @@ -12405,35 +12428,35 @@ msgstr "" #. 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "If checked, a confirmation will be required before performing workflow actions." -msgstr "" +msgstr "Nếu được chọn, sẽ cần có xác nhận trước khi thực hiện các hành động trong quy trình làm việc." #. Description of the 'Is Active' (Check) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "If checked, all other workflows become inactive." -msgstr "" +msgstr "Nếu được chọn, tất cả các quy trình công việc khác sẽ không hoạt động." #. Description of the 'Show Absolute Values' (Check) field in DocType 'Print #. Format' #: frappe/printing/doctype/print_format/print_format.json msgid "If checked, negative numeric values of Currency, Quantity or Count would be shown as positive" -msgstr "" +msgstr "Nếu được chọn, các giá trị số âm của Tiền tệ, Số lượng hoặc Số lượng sẽ được hiển thị dưới dạng dương" #. Description of the 'Skip Authorization' (Check) field in DocType 'OAuth #. Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "If checked, users will not see the Confirm Access dialog." -msgstr "" +msgstr "Nếu chọn, người dùng sẽ không nhìn thấy hộp thoại Xác nhận quyền truy cập." #. Description of the 'Disabled' (Check) field in DocType 'Role' #: frappe/core/doctype/role/role.json msgid "If disabled, this role will be removed from all users." -msgstr "" +msgstr "Nếu bị tắt, vai trò này sẽ bị xóa khỏi tất cả người dùng." #. Description of the 'Bypass Restricted IP Address Check If Two Factor Auth #. Enabled' (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "If enabled, user can login from any IP Address using Two Factor Auth, this can also be set for all users in System Settings" -msgstr "" +msgstr "Nếu được bật, người dùng có thể đăng nhập từ bất kỳ Địa chỉ IP nào bằng Xác thực hai yếu tố, điều này cũng có thể được đặt cho tất cả người dùng trong Cài đặt hệ thống" #. Description of the 'Anonymous responses' (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json @@ -12444,7 +12467,7 @@ msgstr "" #. Enabled' (Check) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "If enabled, all users can login from any IP Address using Two Factor Auth. This can also be set only for specific user(s) in User Page" -msgstr "" +msgstr "Nếu được bật, tất cả người dùng có thể đăng nhập từ bất kỳ Địa chỉ IP nào bằng Xác thực hai yếu tố. Điều này cũng chỉ có thể được đặt cho (những) người dùng cụ thể trong Trang người dùng" #. Description of the 'Track Changes' (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -12454,7 +12477,7 @@ msgstr "" #. Description of the 'Track Views' (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "If enabled, document views are tracked, this can happen multiple times" -msgstr "" +msgstr "Nếu được bật, lượt xem tài liệu sẽ được theo dõi, điều này có thể xảy ra nhiều lần" #. Description of the 'Only allow System Managers to upload public files' #. (Check) field in DocType 'System Settings' @@ -12471,7 +12494,7 @@ msgstr "" #. 'Notification' #: frappe/email/doctype/notification/notification.json msgid "If enabled, the notification will show up in the notifications dropdown on the top right corner of the navigation bar." -msgstr "" +msgstr "Nếu được bật, thông báo sẽ hiển thị trong danh sách thông báo thả xuống ở góc trên cùng bên phải của thanh điều hướng." #. Description of the 'Enable Password Policy' (Check) field in DocType 'System #. Settings' @@ -12483,13 +12506,13 @@ msgstr "" #. restricted IP Address' (Check) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "If enabled, users who login from Restricted IP Address, won't be prompted for Two Factor Auth" -msgstr "" +msgstr "Nếu được bật, người dùng đăng nhập từ Địa chỉ IP bị hạn chế sẽ không được nhắc xác thực hai yếu tố" #. Description of the 'Notify Users On Every Login' (Check) field in DocType #. 'Note' #: frappe/desk/doctype/note/note.json msgid "If enabled, users will be notified every time they login. If not enabled, users will only be notified once." -msgstr "" +msgstr "Nếu được bật, người dùng sẽ được thông báo mỗi khi họ đăng nhập. Nếu không được kích hoạt, người dùng sẽ chỉ được thông báo một lần." #. Description of the 'Default Workspace' (Link) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -12499,7 +12522,7 @@ msgstr "" #. Description of the 'Port' (Data) field in DocType 'Email Domain' #: frappe/email/doctype/email_domain/email_domain.json msgid "If non standard port (e.g. 587)" -msgstr "" +msgstr "Nếu cổng không chuẩn (ví dụ: 587)" #. Description of the 'Port' (Data) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json @@ -12511,13 +12534,13 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "If non-standard port (e.g. POP3: 995/110, IMAP: 993/143)" -msgstr "" +msgstr "Nếu cổng không chuẩn (ví dụ: POP3: 995/110, IMAP: 993/143)" #. Description of the 'Currency Precision' (Select) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "If not set, the currency precision will depend on number format" -msgstr "" +msgstr "Nếu không được đặt, độ chính xác của tiền tệ sẽ phụ thuộc vào định dạng số" #. Description of the 'Roles' (Table) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json @@ -12526,7 +12549,7 @@ msgstr "" #: frappe/core/page/permission_manager/permission_manager_help.html:83 msgid "If the user enables the mask property for the phone number field, the value will be displayed in a masked format (e.g., 811XXXXXXX)." -msgstr "" +msgstr "Nếu người dùng bật thuộc tính mặt nạ cho trường số điện thoại, giá trị sẽ được hiển thị ở định dạng mặt nạ (ví dụ: 811XXXXXXX)." #: frappe/core/page/permission_manager/permission_manager_help.html:63 msgid "If the user has access to Employee and Report is enabled, they can view Employee-based reports." @@ -12535,7 +12558,7 @@ msgstr "" #. Description of the 'User Type' (Link) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "If the user has any role checked, then the user becomes a \"System User\". \"System User\" has access to the desktop" -msgstr "" +msgstr "Nếu người dùng được chọn bất kỳ vai trò nào thì người dùng đó sẽ trở thành \"Người dùng hệ thống\". \"Người dùng hệ thống\" có quyền truy cập vào máy tính để bàn" #: frappe/core/page/permission_manager/permission_manager_help.html:105 msgid "If these instructions where not helpful, please add in your suggestions on GitHub Issues." @@ -12555,7 +12578,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "If unchecked, the value will always be re-fetched on save." -msgstr "" +msgstr "Nếu không được chọn, giá trị sẽ luôn được tìm nạp lại khi lưu." #. Label of the if_owner (Check) field in DocType 'Custom DocPerm' #. Label of the if_owner (Check) field in DocType 'DocPerm' @@ -12566,19 +12589,19 @@ msgstr "" #: frappe/core/doctype/data_export/exporter.py:204 msgid "If you are updating, please select \"Overwrite\" else existing rows will not be deleted." -msgstr "" +msgstr "Nếu bạn đang cập nhật, vui lòng chọn \"Ghi đè\" nếu không các hàng hiện có sẽ không bị xóa." #: frappe/core/doctype/data_export/exporter.py:188 msgid "If you are uploading new records, \"Naming Series\" becomes mandatory, if present." -msgstr "" +msgstr "Nếu bạn đang tải lên các bản ghi mới, \"Dòng đặt tên\" sẽ trở thành bắt buộc, nếu có." #: frappe/core/doctype/data_export/exporter.py:186 msgid "If you are uploading new records, leave the \"name\" (ID) column blank." -msgstr "" +msgstr "Nếu bạn đang tải lên bản ghi mới, hãy để trống cột \"tên\" (ID)." #: frappe/templates/emails/user_invitation.html:19 msgid "If you have any questions, reach out to your system administrator." -msgstr "" +msgstr "Nếu bạn có bất kỳ câu hỏi nào, hãy liên hệ với quản trị viên hệ thống của bạn." #: frappe/utils/password.py:213 msgid "If you have recently restored the site, you may need to copy the site_config.json containing the original encryption key." @@ -12587,7 +12610,7 @@ msgstr "" #. Description of the 'Parent Label' (Select) field in DocType 'Top Bar Item' #: frappe/website/doctype/top_bar_item/top_bar_item.json msgid "If you set this, this Item will come in a drop-down under the selected parent." -msgstr "" +msgstr "Nếu bạn đặt cài đặt này, Mục này sẽ xuất hiện trong danh sách thả xuống bên dưới phần gốc đã chọn." #: frappe/templates/emails/administrator_logged_in.html:3 msgid "If you think this is unauthorized, please change the Administrator password." @@ -12596,7 +12619,7 @@ msgstr "" #. Description of the 'Delimiter Options' (Data) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "If your CSV uses a different delimiter, add that character here, ensuring no spaces or additional characters are included." -msgstr "" +msgstr "Nếu CSV của bạn sử dụng một dấu phân cách khác, hãy thêm ký tự đó vào đây, đảm bảo không có dấu cách hoặc ký tự bổ sung nào được đưa vào." #. Description of the 'Source Text' (Code) field in DocType 'Translation' #: frappe/core/doctype/translation/translation.json @@ -12611,7 +12634,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Ignore User Permissions" -msgstr "" +msgstr "Bỏ qua quyền của người dùng" #. Label of the ignore_xss_filter (Check) field in DocType 'DocField' #. Label of the ignore_xss_filter (Check) field in DocType 'Custom Field' @@ -12621,7 +12644,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Ignore XSS Filter" -msgstr "" +msgstr "Bỏ qua bộ lọc XSS" #. Description of the 'Attachment Limit (MB)' (Int) field in DocType 'Email #. Account' @@ -12630,25 +12653,25 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "Ignore attachments over this size" -msgstr "" +msgstr "Bỏ qua các tệp đính kèm có kích thước lớn hơn" #. Label of the ignored_apps (Table) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "Ignored Apps" -msgstr "" +msgstr "Ứng dụng bị bỏ qua" #: frappe/model/workflow.py:223 msgid "Illegal Document Status for {0}" -msgstr "" +msgstr "Tình trạng Tài liệu Bất hợp pháp cho {0}" -#: frappe/model/db_query.py:539 frappe/model/db_query.py:542 -#: frappe/model/db_query.py:1208 +#: frappe/model/db_query.py:541 frappe/model/db_query.py:544 +#: frappe/model/db_query.py:1219 msgid "Illegal SQL Query" -msgstr "" +msgstr "Truy vấn SQL bất hợp pháp" #: frappe/utils/jinja.py:127 msgid "Illegal template" -msgstr "" +msgstr "Bản mẫu bất hợp pháp" #. Label of the image (Attach Image) field in DocType 'Contact' #. Option for the 'Type' (Select) field in DocType 'DocField' @@ -12673,86 +12696,86 @@ msgstr "" #: frappe/website/doctype/web_page/web_page.json #: frappe/website/doctype/website_slideshow_item/website_slideshow_item.json msgid "Image" -msgstr "" +msgstr "Hình ảnh" #. 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 "Trường Hình ảnh" #. 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 "Chiều cao hình ảnh" #. 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 "Liên kết hình ảnh" #: frappe/public/js/frappe/list/base_list.js:209 msgid "Image View" -msgstr "" +msgstr "Xem hình ảnh" #. Label of the image_width (Float) field in DocType 'Letter Head' #. 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 "Chiều rộng hình ảnh" -#: frappe/core/doctype/doctype/doctype.py:1535 +#: frappe/core/doctype/doctype/doctype.py:1538 msgid "Image field must be a valid fieldname" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1537 +#: frappe/core/doctype/doctype/doctype.py:1540 msgid "Image field must be of type Attach Image" -msgstr "" +msgstr "Trường hình ảnh phải thuộc loại Đính kèm hình ảnh" #: frappe/core/doctype/file/utils.py:136 msgid "Image link '{0}' is not valid" -msgstr "" +msgstr "Liên kết hình ảnh '{0}' không hợp lệ" #: frappe/core/doctype/file/file.js:112 msgid "Image optimized" -msgstr "" +msgstr "Hình ảnh được tối ưu hóa" -#: frappe/core/doctype/file/utils.py:289 +#: frappe/core/doctype/file/utils.py:302 msgid "Image: Corrupted Data Stream" -msgstr "" +msgstr "Hình ảnh: Luồng dữ liệu bị hỏng" #: frappe/public/js/frappe/views/image/image_view.js:13 msgid "Images" -msgstr "" +msgstr "Hình ảnh" #. Option for the 'Operation' (Select) field in DocType 'Activity Log' #: frappe/core/doctype/activity_log/activity_log.json -#: frappe/core/doctype/user/user.js:379 +#: frappe/core/doctype/user/user.js:382 msgid "Impersonate" -msgstr "" +msgstr "Mạo danh" -#: frappe/core/doctype/user/user.js:406 +#: frappe/core/doctype/user/user.js:409 msgid "Impersonate as {0}" msgstr "" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:357 msgid "Impersonated by {0}" -msgstr "" +msgstr "Bị mạo danh bởi {0}" #: frappe/public/js/frappe/ui/page.html:50 msgid "Impersonating {0}" -msgstr "" +msgstr "Mạo danh {0}" #: frappe/core/doctype/log_settings/log_settings.py:56 msgid "Implement `clear_old_logs` method to enable auto error clearing." -msgstr "" +msgstr "Triển khai phương thức `clear_old_logs` để bật tính năng tự động xóa lỗi." #. Option for the 'Grant Type' (Select) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Implicit" -msgstr "" +msgstr "Tiềm ẩn" #. Label of the import (Check) field in DocType 'Custom DocPerm' #. Label of the import (Check) field in DocType 'DocPerm' @@ -12762,12 +12785,12 @@ msgstr "" #: frappe/core/page/permission_manager/permission_manager_help.html:71 #: frappe/email/doctype/email_group/email_group.js:31 msgid "Import" -msgstr "" +msgstr "Nhập dữ liệu" -#: frappe/public/js/frappe/list/list_view.js:1924 +#: frappe/public/js/frappe/list/list_view.js:1935 msgctxt "Button in list view menu" msgid "Import" -msgstr "" +msgstr "Nhập khẩu" #: frappe/email/doctype/email_group/email_group.js:14 msgid "Import Email From" @@ -12776,7 +12799,7 @@ msgstr "" #. Label of the import_file (Attach) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Import File" -msgstr "" +msgstr "Nhập tệp" #. Label of the import_warnings_section (Section Break) field in DocType 'Data #. Import' @@ -12788,36 +12811,36 @@ msgstr "" #. Import' #: frappe/core/doctype/data_import/data_import.json msgid "Import Log" -msgstr "" +msgstr "Nhật ký nhập liệu" #. Label of the import_log_preview (HTML) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Import Log Preview" -msgstr "" +msgstr "Xem trước nhật ký nhập" #. Label of the import_preview (HTML) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Import Preview" -msgstr "" +msgstr "Xem trước nhập liệu" #: frappe/core/doctype/data_import/data_import.js:41 msgid "Import Progress" -msgstr "" +msgstr "Tiến độ nhập liệu" #: frappe/email/doctype/email_group/email_group.js:8 #: frappe/email/doctype/email_group/email_group.js:30 msgid "Import Subscribers" -msgstr "" +msgstr "Nhập thuê bao" #. Label of the import_type (Select) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Import Type" -msgstr "" +msgstr "Loại nhập khẩu" #. Label of the import_warnings (HTML) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Import Warnings" -msgstr "" +msgstr "Cảnh báo nhập khẩu" #: frappe/public/js/frappe/views/file/file_view.js:117 msgid "Import Zip" @@ -12838,36 +12861,36 @@ msgstr "" #: frappe/core/doctype/data_import/data_import.js:171 msgid "Import timed out, please re-try." -msgstr "" +msgstr "Đã hết thời gian nhập, vui lòng thử lại." #: frappe/core/doctype/data_import/data_import.py:71 msgid "Importing {0} is not allowed." -msgstr "" +msgstr "Không được phép nhập {0}." #: frappe/integrations/doctype/google_contacts/google_contacts.js:19 msgid "Importing {0} of {1}" -msgstr "" +msgstr "Đang nhập {0} của {1}" #: frappe/core/doctype/data_import/data_import.js:35 msgid "Importing {0} of {1}, {2}" -msgstr "" +msgstr "Đang nhập {0} của {1}, {2}" #: frappe/public/js/frappe/ui/filters/filter.js:20 msgid "In" -msgstr "" +msgstr "Trong" #. Description of the 'Force User to Reset Password' (Int) field in DocType #. 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "In Days" -msgstr "" +msgstr "Trong Ngày" #. Label of the in_filter (Check) field in DocType 'DocField' #. Label of the in_filter (Check) field in DocType 'Customize Form Field' #: frappe/core/doctype/docfield/docfield.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "In Filter" -msgstr "" +msgstr "Trong Bộ lọc" #. Label of the in_global_search (Check) field in DocType 'DocField' #. Label of the in_global_search (Check) field in DocType 'Custom Field' @@ -12877,16 +12900,16 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "In Global Search" -msgstr "" +msgstr "Trong Tìm kiếm Toàn cầu" #: frappe/core/doctype/doctype/doctype.js:88 msgid "In Grid View" -msgstr "" +msgstr "Trong Chế độ xem lưới" #. Label of the in_standard_filter (Check) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "In List Filter" -msgstr "" +msgstr "Trong bộ lọc danh sách" #. Label of the in_list_view (Check) field in DocType 'DocField' #. Label of the in_list_view (Check) field in DocType 'Custom Field' @@ -12896,11 +12919,11 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "In List View" -msgstr "" +msgstr "Trong Chế độ xem danh sách" #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.js:19 msgid "In Minutes" -msgstr "" +msgstr "Trong vài phút" #. Label of the in_preview (Check) field in DocType 'DocField' #. Label of the in_preview (Check) field in DocType 'Custom Field' @@ -12909,20 +12932,20 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "In Preview" -msgstr "" +msgstr "Đang xem trước" #: frappe/core/doctype/data_import/data_import.js:42 msgid "In Progress" -msgstr "" +msgstr "Đang tiến hành" #: frappe/database/database.py:288 msgid "In Read Only Mode" -msgstr "" +msgstr "Ở Chế độ Chỉ Đọc" #. Label of the in_reply_to (Link) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "In Reply To" -msgstr "" +msgstr "Trong Trả lời" #. Label of the in_standard_filter (Check) field in DocType 'Custom Field' #. Label of the in_standard_filter (Check) field in DocType 'Customize Form @@ -12930,7 +12953,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "In Standard Filter" -msgstr "" +msgstr "Trong Bộ lọc tiêu chuẩn" #. Description of the 'Font Size' (Float) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json @@ -12941,45 +12964,45 @@ msgstr "" #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "In seconds" -msgstr "" +msgstr "Trong vài giây" #: frappe/core/doctype/recorder/recorder_list.js:209 msgid "Inactive" -msgstr "" +msgstr "Không hoạt động" #. Option for the 'Select List View' (Select) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json #: frappe/email/doctype/email_account/email_account_list.js:19 msgid "Inbox" -msgstr "" +msgstr "Hộp thư đến" #. Name of a role #: frappe/core/doctype/communication/communication.json #: frappe/email/doctype/email_account/email_account.json msgid "Inbox User" -msgstr "" +msgstr "Người dùng hộp thư đến" #: frappe/public/js/frappe/list/base_list.js:210 msgid "Inbox View" -msgstr "" +msgstr "Xem hộp thư đến" #: frappe/public/js/frappe/views/treeview.js:111 msgid "Include Disabled" -msgstr "" +msgstr "Bao gồm Người khuyết tật" #. Label of the include_name_field (Check) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Include Name Field" -msgstr "" +msgstr "Thêm trường tên" #. Label of the navbar_search (Check) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Include Search in Top Bar" -msgstr "" +msgstr "Bao gồm Tìm kiếm trong Thanh trên cùng" #: frappe/website/doctype/website_theme/website_theme.js:61 msgid "Include Theme from Apps" -msgstr "" +msgstr "Bao gồm Chủ đề từ Ứng dụng" #. Label of the attach_view_link (Check) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json @@ -12989,15 +13012,15 @@ msgstr "" #: frappe/public/js/frappe/form/print_utils.js:60 #: frappe/public/js/frappe/views/reports/query_report.js:1717 msgid "Include filters" -msgstr "" +msgstr "Bao gồm các bộ lọc" #: frappe/public/js/frappe/views/reports/query_report.js:1739 msgid "Include hidden columns" -msgstr "" +msgstr "Bao gồm các cột ẩn" #: frappe/public/js/frappe/views/reports/query_report.js:1709 msgid "Include indentation" -msgstr "" +msgstr "Bao gồm thụt lề" #: frappe/public/js/frappe/form/controls/password.js:106 msgid "Include symbols, numbers and capital letters in the password" @@ -13007,13 +13030,13 @@ msgstr "" #. Account' #: frappe/email/doctype/email_account/email_account.json msgid "Incoming" -msgstr "" +msgstr "Đang đến" #. Label of the mailbox_settings (Section Break) field in DocType 'Email #. Account' #: frappe/email/doctype/email_account/email_account.json msgid "Incoming (POP/IMAP) Settings" -msgstr "" +msgstr "Cài đặt Thư đến (POP/IMAP)" #. Label of the incoming_emails_last_7_days_column (Column Break) field in #. DocType 'System Health Report' @@ -13026,13 +13049,13 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "Incoming Server" -msgstr "" +msgstr "Máy chủ đến" #. 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 "Cài đặt đến" #: frappe/email/doctype/email_domain/email_domain.py:32 msgid "Incoming email account not correct" @@ -13040,40 +13063,40 @@ msgstr "" #: frappe/model/virtual_doctype.py:79 frappe/model/virtual_doctype.py:92 msgid "Incomplete Virtual Doctype Implementation" -msgstr "" +msgstr "Triển khai loại tài liệu ảo chưa hoàn chỉnh" #: frappe/auth.py:261 msgid "Incomplete login details" -msgstr "" +msgstr "Chi tiết đăng nhập chưa đầy đủ" #: frappe/email/smtp.py:104 msgid "Incorrect Configuration" -msgstr "" +msgstr "Cấu hình sai" #: frappe/utils/csvutils.py:234 msgid "Incorrect URL" -msgstr "" +msgstr "URL không chính xác" #: frappe/utils/password.py:100 msgid "Incorrect User or Password" -msgstr "" +msgstr "Người dùng hoặc mật khẩu không chính xác" #: frappe/twofactor.py:176 frappe/twofactor.py:188 msgid "Incorrect Verification code" -msgstr "" +msgstr "Mã xác minh không chính xác" #: frappe/model/document.py:1603 msgid "Incorrect value in row {0}:" -msgstr "" +msgstr "Giá trị không chính xác trong hàng {0}:" #: frappe/model/document.py:1605 msgid "Incorrect value:" -msgstr "" +msgstr "Giá trị không chính xác:" #. Label of the indent (Check) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Indent" -msgstr "" +msgstr "Thụt lề" #. Label of the search_index (Check) field in DocType 'DocField' #. Label of the index (Int) field in DocType 'Recorder Query' @@ -13083,9 +13106,9 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json frappe/model/meta.py:55 #: frappe/public/js/frappe/model/meta.js:211 #: frappe/public/js/frappe/model/model.js:124 -#: frappe/public/js/frappe/views/reports/report_view.js:1004 +#: frappe/public/js/frappe/views/reports/report_view.js:1006 msgid "Index" -msgstr "" +msgstr "Chỉ mục" #. Label of the index_web_pages_for_search (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -13094,33 +13117,33 @@ msgstr "" #: frappe/core/doctype/recorder/recorder.py:132 msgid "Index created successfully on column {0} of doctype {1}" -msgstr "" +msgstr "Đã tạo chỉ mục thành công trên cột {0} của loại tài liệu {1}" #. Label of the indexing_authorization_code (Data) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Indexing authorization code" -msgstr "" +msgstr "Mã ủy quyền lập chỉ mục" #. Label of the indexing_refresh_token (Data) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Indexing refresh token" -msgstr "" +msgstr "Mã thông báo làm mới lập chỉ mục" #. 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 "Chỉ báo" #. Label of the indicator_color (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "Indicator Color" -msgstr "" +msgstr "Màu chỉ thị" #: frappe/public/js/frappe/views/workspace/workspace.js:525 msgid "Indicator color" -msgstr "" +msgstr "Màu chỉ thị" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #. Option for the 'Button Color' (Select) field in DocType 'DocField' @@ -13134,16 +13157,16 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Info" -msgstr "" +msgstr "Thông tin" #: frappe/core/doctype/data_export/exporter.py:144 msgid "Info:" -msgstr "" +msgstr "Thông tin:" #. 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 "Số lần đồng bộ hóa ban đầu" #. Option for the 'Database Engine' (Select) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -13153,37 +13176,37 @@ msgstr "" #. Description of the 'New Role' (Data) field in DocType 'Role Replication' #: frappe/core/doctype/role_replication/role_replication.json msgid "Input existing role name if you would like to extend it with access of another role." -msgstr "" +msgstr "Nhập tên vai trò hiện có nếu bạn muốn mở rộng nó với quyền truy cập vào vai trò khác." #: frappe/core/doctype/data_import/data_import_list.js:35 msgid "Insert" -msgstr "" +msgstr "Chèn" #: frappe/public/js/frappe/form/grid_row_form.js:44 msgid "Insert Above" -msgstr "" +msgstr "Chèn ở trên" #. Label of the insert_after (Select) field in DocType 'Custom Field' #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/public/js/frappe/views/reports/query_report.js:1992 msgid "Insert After" -msgstr "" +msgstr "Chèn Sau" #: frappe/custom/doctype/custom_field/custom_field.py:253 msgid "Insert After cannot be set as {0}" -msgstr "" +msgstr "Không thể đặt phần chèn sau thành {0}" #: frappe/custom/doctype/custom_field/custom_field.py:246 msgid "Insert After field '{0}' mentioned in Custom Field '{1}', with label '{2}', does not exist" -msgstr "" +msgstr "Chèn sau trường '{0}' được đề cập trong Trường tùy chỉnh '{1}', với nhãn '{2}', không tồn tại" #: frappe/public/js/frappe/form/grid_row_form.js:44 msgid "Insert Below" -msgstr "" +msgstr "Chèn bên dưới" -#: frappe/public/js/frappe/views/reports/report_view.js:389 +#: frappe/public/js/frappe/views/reports/report_view.js:391 msgid "Insert Column Before {0}" -msgstr "" +msgstr "Chèn Cột Trước {0}" #: frappe/public/js/frappe/form/controls/markdown_editor.js:82 msgid "Insert Image in Markdown" @@ -13192,12 +13215,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 "Chèn bản ghi mới" #. Label of the insert_style (Check) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Insert Style" -msgstr "" +msgstr "Chèn kiểu" #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Instagram" @@ -13211,24 +13234,24 @@ msgstr "" #. Name of a DocType #: frappe/core/doctype/installed_application/installed_application.json msgid "Installed Application" -msgstr "" +msgstr "Ứng dụng đã cài đặt" #. Name of a DocType #. Label of the installed_applications (Table) field in DocType 'Installed #. Applications' #: frappe/core/doctype/installed_applications/installed_applications.json msgid "Installed Applications" -msgstr "" +msgstr "Ứng dụng đã cài đặt" #: frappe/core/doctype/installed_applications/installed_applications.js:18 #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Installed Apps" -msgstr "" +msgstr "Ứng dụng đã cài đặt" #. Label of the instructions (HTML) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Instructions" -msgstr "" +msgstr "Hướng dẫn" #: frappe/templates/includes/login/login.js:259 msgid "Instructions Emailed" @@ -13236,23 +13259,23 @@ msgstr "" #: frappe/permissions.py:861 msgid "Insufficient Permission Level for {0}" -msgstr "" +msgstr "Cấp phép không đủ cho {0}" -#: frappe/database/query.py:1308 +#: frappe/database/query.py:1323 msgid "Insufficient Permission for {0}" -msgstr "" +msgstr "Không đủ quyền cho {0}" #: frappe/desk/reportview.py:363 msgid "Insufficient Permissions for deleting Report" -msgstr "" +msgstr "Không đủ quyền để xóa Báo cáo" #: frappe/desk/reportview.py:334 msgid "Insufficient Permissions for editing Report" -msgstr "" +msgstr "Không đủ quyền để chỉnh sửa Báo cáo" #: frappe/core/doctype/doctype/doctype.py:447 msgid "Insufficient attachment limit" -msgstr "" +msgstr "Giới hạn tệp đính kèm không đủ" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Fieldtype' (Select) field in DocType 'Report Column' @@ -13274,7 +13297,7 @@ msgstr "" #. Name of a DocType #: frappe/integrations/doctype/integration_request/integration_request.json msgid "Integration Request" -msgstr "" +msgstr "Yêu cầu tích hợp" #. Group in User's connections #. Name of a Workspace @@ -13283,7 +13306,7 @@ msgstr "" #: frappe/integrations/workspace/integrations/integrations.json #: frappe/website/doctype/website_settings/website_settings.json msgid "Integrations" -msgstr "" +msgstr "Tích hợp" #. Description of the 'Delivery Status' (Select) field in DocType #. 'Communication' @@ -13294,31 +13317,31 @@ msgstr "" #. Option for the 'Font' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Inter" -msgstr "" +msgstr "Liên" #. Label of the interest (Small Text) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Interests" -msgstr "" +msgstr "Sở thích" #. Option for the 'Level' (Select) field in DocType 'Help Article' #: frappe/website/doctype/help_article/help_article.json msgid "Intermediate" -msgstr "" +msgstr "Trung cấp" -#: frappe/public/js/frappe/request.js:233 +#: frappe/public/js/frappe/request.js:234 msgid "Internal Server Error" -msgstr "" +msgstr "Lỗi Máy chủ Nội bộ" #. Description of a DocType #: frappe/core/doctype/docshare/docshare.json msgid "Internal record of document shares" -msgstr "" +msgstr "Bản ghi nội bộ về chia sẻ tài liệu" #. Label of the interval (Select) field in DocType 'Event Notifications' #: frappe/desk/doctype/event_notifications/event_notifications.json msgid "Interval" -msgstr "" +msgstr "Khoảng thời gian" #. Label of the intro_video_url (Data) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json @@ -13339,59 +13362,59 @@ msgstr "" #: frappe/website/doctype/contact_us_settings/contact_us_settings.json #: frappe/website/doctype/web_form/web_form.json msgid "Introduction" -msgstr "" +msgstr "Giới thiệu" #. Description of the 'Introduction' (Text Editor) field in DocType 'Contact Us #. Settings' #: frappe/website/doctype/contact_us_settings/contact_us_settings.json msgid "Introductory information for the Contact Us Page" -msgstr "" +msgstr "Thông tin giới thiệu về Trang Liên hệ với chúng tôi" #. Label of the introspection_uri (Data) field in DocType 'Connected App' #: frappe/integrations/doctype/connected_app/connected_app.json msgid "Introspection URI" -msgstr "" +msgstr "URI nội tâm" #. Option for the 'Validity' (Select) field in DocType 'OAuth Authorization #. Code' #: frappe/integrations/doctype/oauth_authorization_code/oauth_authorization_code.json msgid "Invalid" -msgstr "" +msgstr "Không hợp lệ" #: frappe/public/js/form_builder/utils.js:221 #: frappe/public/js/frappe/form/grid_row.js:848 #: frappe/public/js/frappe/form/layout.js:809 -#: frappe/public/js/frappe/views/reports/report_view.js:715 +#: frappe/public/js/frappe/views/reports/report_view.js:717 msgid "Invalid \"depends_on\" expression" -msgstr "" +msgstr "Biểu thức \"phụ thuộc\" không hợp lệ" #: frappe/public/js/frappe/views/reports/query_report.js:520 msgid "Invalid \"depends_on\" expression set in filter {0}" -msgstr "" +msgstr "Bộ biểu thức \"depends_on\" không hợp lệ trong bộ lọc {0}" #: frappe/public/js/frappe/form/save.js:219 msgid "Invalid \"mandatory_depends_on\" expression" -msgstr "" +msgstr "Biểu thức \"bắt buộc_depends_on\" không hợp lệ" #: frappe/utils/nestedset.py:178 msgid "Invalid Action" -msgstr "" +msgstr "Hành động không hợp lệ" #: frappe/utils/csvutils.py:37 msgid "Invalid CSV Format" -msgstr "" +msgstr "Định dạng CSV không hợp lệ" #: frappe/integrations/frappe_providers/frappecloud_billing.py:111 msgid "Invalid Code. Please try again." -msgstr "" +msgstr "Mã không hợp lệ. Vui lòng thử lại." #: frappe/integrations/doctype/webhook/webhook.py:91 msgid "Invalid Condition: {}" -msgstr "" +msgstr "Điều kiện không hợp lệ: {}" #: frappe/email/smtp.py:136 msgid "Invalid Credentials" -msgstr "" +msgstr "Thông tin xác thực không hợp lệ" #: frappe/email/smtp.py:138 msgid "Invalid Credentials for Email Account: {0}" @@ -13399,57 +13422,57 @@ msgstr "" #: frappe/utils/data.py:146 frappe/utils/data.py:309 msgid "Invalid Date" -msgstr "" +msgstr "Ngày không hợp lệ" #: frappe/www/list.py:30 msgid "Invalid DocType" -msgstr "" +msgstr "Loại tài liệu không hợp lệ" -#: frappe/database/query.py:345 +#: frappe/query_builder/builder.py:59 msgid "Invalid DocType: {0}" -msgstr "" +msgstr "Loại tài liệu không hợp lệ: {0}" #: frappe/email/doctype/email_group/email_group.py:51 msgid "Invalid Doctype" -msgstr "" +msgstr "Loại tài liệu không hợp lệ" -#: frappe/core/doctype/doctype/doctype.py:1292 -#: frappe/core/doctype/doctype/doctype.py:1301 +#: frappe/core/doctype/doctype/doctype.py:1295 +#: frappe/core/doctype/doctype/doctype.py:1304 msgid "Invalid Fieldname" -msgstr "" +msgstr "Tên trường không hợp lệ" -#: frappe/core/doctype/file/file.py:231 +#: frappe/core/doctype/file/file.py:232 msgid "Invalid File URL" -msgstr "" +msgstr "URL tệp không hợp lệ" -#: frappe/database/query.py:802 frappe/database/query.py:829 -#: frappe/database/query.py:839 frappe/database/query.py:862 +#: frappe/database/query.py:824 frappe/database/query.py:851 +#: frappe/database/query.py:861 msgid "Invalid Filter" -msgstr "" +msgstr "Bộ lọc không hợp lệ" #: frappe/public/js/form_builder/store.js:244 msgid "Invalid Filter Format for field {0} of type {1}. Try using filter icon on the field to set it correctly" -msgstr "" +msgstr "Định dạng bộ lọc không hợp lệ cho trường {0} thuộc loại {1}. Hãy thử sử dụng biểu tượng bộ lọc trên sân để đặt chính xác" #: frappe/utils/dashboard.py:61 msgid "Invalid Filter Value" -msgstr "" +msgstr "Giá trị bộ lọc không hợp lệ" #: frappe/website/doctype/website_settings/website_settings.py:83 msgid "Invalid Home Page" -msgstr "" +msgstr "Trang chủ không hợp lệ" #: frappe/utils/verified_command.py:48 frappe/www/update-password.html:178 msgid "Invalid Link" -msgstr "" +msgstr "Liên kết không hợp lệ" #: frappe/www/login.py:128 msgid "Invalid Login Token" -msgstr "" +msgstr "Mã thông báo đăng nhập không hợp lệ" #: frappe/templates/includes/login/login.js:288 msgid "Invalid Login. Try again." -msgstr "" +msgstr "Đăng nhập không hợp lệ. Hãy thử lại." #: frappe/email/receive.py:112 frappe/email/receive.py:149 msgid "Invalid Mail Server. Please rectify and try again." @@ -13457,68 +13480,68 @@ msgstr "" #: frappe/model/naming.py:107 msgid "Invalid Naming Series: {}" -msgstr "" +msgstr "Chuỗi đặt tên không hợp lệ: {}" #: frappe/core/doctype/data_import/data_import.py:182 #: 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 msgid "Invalid Operation" -msgstr "" +msgstr "Hoạt động không hợp lệ" -#: frappe/core/doctype/doctype/doctype.py:1670 -#: frappe/core/doctype/doctype/doctype.py:1678 +#: frappe/core/doctype/doctype/doctype.py:1673 +#: frappe/core/doctype/doctype/doctype.py:1681 msgid "Invalid Option" -msgstr "" +msgstr "Tùy chọn không hợp lệ" #: frappe/email/smtp.py:103 msgid "Invalid Outgoing Mail Server or Port: {0}" -msgstr "" +msgstr "Cổng hoặc máy chủ thư đi không hợp lệ: {0}" #: frappe/email/doctype/auto_email_report/auto_email_report.py:208 msgid "Invalid Output Format" -msgstr "" +msgstr "Định dạng đầu ra không hợp lệ" -#: frappe/model/base_document.py:128 +#: frappe/model/base_document.py:125 msgid "Invalid Override" -msgstr "" +msgstr "Ghi đè không hợp lệ" #: frappe/integrations/doctype/connected_app/connected_app.py:202 msgid "Invalid Parameters." -msgstr "" +msgstr "Tham số không hợp lệ." #: 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" -msgstr "" +msgstr "Mật khẩu không hợp lệ" #: frappe/utils/__init__.py:116 msgid "Invalid Phone Number" -msgstr "" +msgstr "Số điện thoại không hợp lệ" #: frappe/auth.py:97 frappe/utils/oauth.py:213 frappe/utils/oauth.py:222 #: frappe/www/login.py:128 msgid "Invalid Request" -msgstr "" +msgstr "Yêu cầu không hợp lệ" #: frappe/desk/search.py:27 msgid "Invalid Search Field {0}" -msgstr "" +msgstr "Trường tìm kiếm không hợp lệ {0}" -#: frappe/core/doctype/doctype/doctype.py:1232 +#: frappe/core/doctype/doctype/doctype.py:1235 msgid "Invalid Table Fieldname" -msgstr "" +msgstr "Tên trường bảng không hợp lệ" #: frappe/public/js/workflow_builder/store.js:192 msgid "Invalid Transition" -msgstr "" +msgstr "Chuyển đổi không hợp lệ" -#: frappe/core/doctype/file/file.py:242 +#: frappe/core/doctype/file/file.py:243 #: frappe/public/js/frappe/file_uploader/FileUploader.vue:551 #: frappe/public/js/frappe/widgets/widget_dialog.js:602 #: frappe/utils/csvutils.py:226 frappe/utils/csvutils.py:247 msgid "Invalid URL" -msgstr "" +msgstr "URL không hợp lệ" #: frappe/email/receive.py:157 msgid "Invalid User Name or Support Password. Please rectify and try again." @@ -13526,7 +13549,7 @@ msgstr "" #: frappe/public/js/frappe/ui/field_group.js:142 msgid "Invalid Values" -msgstr "" +msgstr "Giá trị không hợp lệ" #: frappe/integrations/doctype/webhook/webhook.py:120 msgid "Invalid Webhook Secret" @@ -13534,103 +13557,99 @@ msgstr "" #: frappe/desk/reportview.py:190 msgid "Invalid aggregate function" -msgstr "" +msgstr "Hàm tổng hợp không hợp lệ" -#: frappe/database/query.py:2254 +#: frappe/database/query.py:2333 msgid "Invalid alias format: {0}. Alias must be a simple identifier." msgstr "" #: frappe/core/doctype/user_invitation/user_invitation.py:195 msgid "Invalid app" -msgstr "" +msgstr "Ứng dụng không hợp lệ" -#: frappe/database/query.py:2215 frappe/database/query.py:2230 +#: frappe/database/query.py:2294 frappe/database/query.py:2309 msgid "Invalid argument format: {0}. Only quoted string literals or simple field names are allowed." -msgstr "" +msgstr "Định dạng đối số không hợp lệ: {0}. Chỉ cho phép các chuỗi ký tự được trích dẫn hoặc tên trường đơn giản." -#: frappe/database/query.py:2179 +#: frappe/database/query.py:2258 msgid "Invalid argument type: {0}. Only strings, numbers, dicts, and None are allowed." msgstr "" -#: frappe/database/query.py:835 +#: frappe/database/query.py:857 msgid "Invalid characters in fieldname: {0}. Only letters, numbers, and underscores are allowed." msgstr "" -#: frappe/database/query.py:1014 -msgid "Invalid characters in table name: {0}" -msgstr "" - -#: frappe/public/js/frappe/views/reports/report_view.js:398 +#: frappe/public/js/frappe/views/reports/report_view.js:400 msgid "Invalid column" -msgstr "" +msgstr "Cột không hợp lệ" -#: frappe/database/query.py:735 +#: frappe/database/query.py:758 msgid "Invalid condition type in nested filters: {0}" -msgstr "" +msgstr "Loại điều kiện không hợp lệ trong các bộ lọc lồng nhau: {0}" -#: frappe/database/query.py:1286 +#: frappe/database/query.py:1301 msgid "Invalid direction in Order By: {0}. Must be 'ASC' or 'DESC'." msgstr "" #: frappe/model/document.py:1064 frappe/model/document.py:1078 msgid "Invalid docstatus" -msgstr "" +msgstr "Trạng thái tài liệu không hợp lệ" #: frappe/model/workflow.py:112 msgid "Invalid expression in Workflow Update Value: {0}" -msgstr "" +msgstr "Biểu thức không hợp lệ trong Giá trị cập nhật quy trình công việc: {0}" #: frappe/public/js/frappe/utils/dashboard_utils.js:229 msgid "Invalid expression set in filter {0}" -msgstr "" +msgstr "Bộ biểu thức không hợp lệ trong bộ lọc {0}" #: frappe/public/js/frappe/utils/dashboard_utils.js:219 msgid "Invalid expression set in filter {0} ({1})" -msgstr "" +msgstr "Bộ biểu thức không hợp lệ trong bộ lọc {0} ({1})" -#: frappe/database/query.py:1982 +#: frappe/database/query.py:2061 msgid "Invalid field format for SELECT: {0}. Field names must be simple, backticked, table-qualified, aliased, or '*'." -msgstr "" +msgstr "Định dạng trường không hợp lệ cho CHỌN: {0}. Tên trường phải đơn giản, có dấu ngược lại, đủ điều kiện trong bảng, có bí danh hoặc '*'." -#: frappe/database/query.py:1227 +#: frappe/database/query.py:1242 msgid "Invalid field format in {0}: {1}. Use 'field', 'link_field.field', or 'child_table.field'." msgstr "" #: frappe/utils/data.py:2294 msgid "Invalid field name {0}" -msgstr "" +msgstr "Tên trường không hợp lệ {0}" -#: frappe/database/query.py:1113 +#: frappe/database/query.py:1128 msgid "Invalid field type: {0}" -msgstr "" +msgstr "Loại trường không hợp lệ: {0}" -#: frappe/core/doctype/doctype/doctype.py:1103 +#: frappe/core/doctype/doctype/doctype.py:1106 msgid "Invalid fieldname '{0}' in autoname" -msgstr "" +msgstr "Tên trường không hợp lệ '{0}' trong tên tự động" #: frappe/deprecation_dumpster.py:283 msgid "Invalid file path: {0}" -msgstr "" +msgstr "Đường dẫn tệp không hợp lệ: {0}" -#: frappe/database/query.py:718 +#: frappe/database/query.py:741 msgid "Invalid filter condition: {0}. Expected a list or tuple." -msgstr "" +msgstr "Điều kiện bộ lọc không hợp lệ: {0}. Dự kiến ​​​​một danh sách hoặc bộ dữ liệu." -#: frappe/database/query.py:825 +#: frappe/database/query.py:847 msgid "Invalid filter field format: {0}. Use 'fieldname' or 'link_fieldname.target_fieldname'." -msgstr "" +msgstr "Định dạng trường bộ lọc không hợp lệ: {0}. Sử dụng 'tên trường' hoặc 'link_fieldname.target_fieldname'." #: frappe/public/js/frappe/ui/filters/filter_list.js:201 msgid "Invalid filter: {0}" -msgstr "" +msgstr "Bộ lọc không hợp lệ: {0}" -#: frappe/database/query.py:2099 +#: frappe/database/query.py:2178 msgid "Invalid function argument type: {0}. Only strings, numbers, lists, and None are allowed." msgstr "" #: frappe/core/api/user_invitation.py:17 msgid "Invalid input" -msgstr "" +msgstr "Đầu vào không hợp lệ" #: frappe/desk/doctype/dashboard/dashboard.py:67 #: frappe/desk/doctype/dashboard_chart/dashboard_chart.py:424 @@ -13639,27 +13658,27 @@ msgstr "" #: frappe/core/api/user_invitation.py:115 msgid "Invalid key" -msgstr "" +msgstr "Khóa không hợp lệ" -#: frappe/model/naming.py:496 +#: frappe/model/naming.py:511 msgid "Invalid name type (integer) for varchar name column" msgstr "" #: frappe/model/naming.py:60 msgid "Invalid naming series {}: dot (.) missing" -msgstr "" +msgstr "Chuỗi đặt tên không hợp lệ {}: thiếu dấu chấm (.)" #: frappe/model/naming.py:74 msgid "Invalid naming series {}: dot (.) missing before the numeric placeholders. Kindly use a format like ABCD.#####." -msgstr "" +msgstr "Chuỗi đặt tên không hợp lệ {}: thiếu dấu chấm (.) trước phần giữ chỗ số. Vui lòng sử dụng định dạng như ABCD.#####." -#: frappe/database/query.py:2171 +#: frappe/database/query.py:2250 msgid "Invalid nested expression: dictionary must represent a function or operator" -msgstr "" +msgstr "Biểu thức lồng nhau không hợp lệ: từ điển phải đại diện cho một hàm hoặc toán tử" #: frappe/core/doctype/data_import/importer.py:453 msgid "Invalid or corrupted content for import" -msgstr "" +msgstr "Nội dung nhập không hợp lệ hoặc bị hỏng" #: frappe/website/doctype/website_settings/website_settings.py:139 msgid "Invalid redirect regex in row #{}: {}" @@ -13667,27 +13686,27 @@ msgstr "" #: frappe/app.py:340 msgid "Invalid request arguments" -msgstr "" +msgstr "Đối số yêu cầu không hợp lệ" #: frappe/app.py:327 msgid "Invalid request body" -msgstr "" +msgstr "Nội dung yêu cầu không hợp lệ" #: frappe/core/doctype/user_invitation/user_invitation.py:181 msgid "Invalid role" -msgstr "" +msgstr "Vai trò không hợp lệ" -#: frappe/database/query.py:776 +#: frappe/database/query.py:798 msgid "Invalid simple filter format: {0}" -msgstr "" +msgstr "Định dạng bộ lọc đơn giản không hợp lệ: {0}" -#: frappe/database/query.py:695 +#: frappe/database/query.py:718 msgid "Invalid start for filter condition: {0}. Expected a list or tuple." -msgstr "" +msgstr "Bắt đầu không hợp lệ cho điều kiện bộ lọc: {0}. Dự kiến ​​​​một danh sách hoặc bộ dữ liệu." #: frappe/core/doctype/data_import/importer.py:430 msgid "Invalid template file for import" -msgstr "" +msgstr "Tệp mẫu không hợp lệ để nhập" #: frappe/integrations/doctype/connected_app/connected_app.py:208 msgid "Invalid token state! Check if the token has been created by the OAuth user." @@ -13696,65 +13715,65 @@ msgstr "" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:165 #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:338 msgid "Invalid username or password" -msgstr "" +msgstr "Tên người dùng hoặc mật khẩu không hợp lệ" #: frappe/model/naming.py:174 msgid "Invalid value specified for UUID: {}" -msgstr "" +msgstr "Giá trị không hợp lệ được chỉ định cho UUID: {}" #: frappe/public/js/frappe/web_form/web_form.js:249 msgctxt "Error message in web form" msgid "Invalid values for fields:" -msgstr "" +msgstr "Giá trị không hợp lệ cho các trường:" #: frappe/printing/page/print/print.js:681 msgid "Invalid wkhtmltopdf version" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1593 +#: frappe/core/doctype/doctype/doctype.py:1596 msgid "Invalid {0} condition" -msgstr "" +msgstr "Điều kiện {0} không hợp lệ" -#: frappe/database/query.py:2060 +#: frappe/database/query.py:2139 msgid "Invalid {0} dictionary format" -msgstr "" +msgstr "Định dạng từ điển {0} không hợp lệ" #. Option for the 'Style' (Select) field in DocType 'Workflow State' #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Inverse" -msgstr "" +msgstr "Nghịch đảo" #: frappe/core/doctype/user_invitation/user_invitation.py:95 msgid "Invitation already accepted" -msgstr "" +msgstr "Lời mời đã được chấp nhận" #: frappe/core/doctype/user_invitation/user_invitation.py:99 msgid "Invitation already exists" -msgstr "" +msgstr "Lời mời đã tồn tại" #: frappe/core/api/user_invitation.py:84 msgid "Invitation cannot be cancelled" -msgstr "" +msgstr "Lời mời không thể bị hủy" #: frappe/core/doctype/user_invitation/user_invitation.py:127 msgid "Invitation is cancelled" -msgstr "" +msgstr "Lời mời bị hủy" #: frappe/core/doctype/user_invitation/user_invitation.py:125 msgid "Invitation is expired" -msgstr "" +msgstr "Lời mời đã hết hạn" #: frappe/core/api/user_invitation.py:73 frappe/core/api/user_invitation.py:78 msgid "Invitation not found" -msgstr "" +msgstr "Không tìm thấy lời mời" #: frappe/core/doctype/user_invitation/user_invitation.py:59 msgid "Invitation to join {0} cancelled" -msgstr "" +msgstr "Lời mời tham gia {0} đã bị hủy" #: frappe/core/doctype/user_invitation/user_invitation.py:76 msgid "Invitation to join {0} expired" -msgstr "" +msgstr "Lời mời tham gia {0} đã hết hạn" #: frappe/contacts/doctype/contact/contact.js:30 msgid "Invite as User" @@ -13763,7 +13782,7 @@ msgstr "" #. Label of the invited_by (Link) field in DocType 'User Invitation' #: frappe/core/doctype/user_invitation/user_invitation.json msgid "Invited By" -msgstr "" +msgstr "Được mời bởi" #: frappe/public/js/frappe/ui/filters/filter.js:22 msgid "Is" @@ -13772,7 +13791,7 @@ msgstr "" #. Label of the is_active (Check) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "Is Active" -msgstr "" +msgstr "Đang hoạt động" #. Label of the is_attachments_folder (Check) field in DocType 'File' #: frappe/core/doctype/file/file.json @@ -13799,17 +13818,17 @@ msgstr "" #: frappe/desk/doctype/module_onboarding/module_onboarding.json #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Is Complete" -msgstr "" +msgstr "Đã hoàn thành" #. 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 "Đã hoàn thành" #. Label of the is_current (Check) field in DocType 'User Session Display' #: frappe/core/doctype/user_session_display/user_session_display.json msgid "Is Current" -msgstr "" +msgstr "Hiện tại" #. Label of the is_custom (Check) field in DocType 'Role' #. Label of the is_custom (Check) field in DocType 'User Document Type' @@ -13821,7 +13840,7 @@ msgstr "" #. 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 "Trường tùy chỉnh" #. Label of the is_default (Check) field in DocType 'Address Template' #. Label of the is_default (Check) field in DocType 'User Permission' @@ -13841,7 +13860,7 @@ msgstr "" #. Label of the is_folder (Check) field in DocType 'File' #: frappe/core/doctype/file/file.json msgid "Is Folder" -msgstr "" +msgstr "Thư mục" #: frappe/public/js/frappe/list/list_filter.js:113 msgid "Is Global" @@ -13854,7 +13873,7 @@ msgstr "" #. Label of the is_hidden (Check) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "Is Hidden" -msgstr "" +msgstr "Bị ẩn" #. Label of the is_home_folder (Check) field in DocType 'File' #: frappe/core/doctype/file/file.json @@ -13864,13 +13883,13 @@ msgstr "" #. Label of the reqd (Check) field in DocType 'Custom Field' #: frappe/custom/doctype/custom_field/custom_field.json msgid "Is Mandatory Field" -msgstr "" +msgstr "Trường bắt buộc" #. 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 "Trạng thái tùy chọn" #. Label of the is_primary (Check) field in DocType 'Contact Email' #: frappe/contacts/doctype/contact_email/contact_email.json @@ -13912,9 +13931,9 @@ msgstr "" #. Label of the is_published_field (Data) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Is Published Field" -msgstr "" +msgstr "Trường được xuất bản" -#: frappe/core/doctype/doctype/doctype.py:1544 +#: frappe/core/doctype/doctype/doctype.py:1547 msgid "Is Published Field must be a valid fieldname" msgstr "" @@ -13934,7 +13953,7 @@ msgstr "" #. Application' #: frappe/core/doctype/installed_application/installed_application.json msgid "Is Setup Complete?" -msgstr "" +msgstr "Thiết lập đã hoàn tất chưa?" #. Label of the issingle (Check) field in DocType 'DocType' #. Label of the is_single (Check) field in DocType 'Onboarding Step' @@ -13942,12 +13961,12 @@ msgstr "" #: frappe/core/doctype/doctype/doctype_list.js:65 #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Is Single" -msgstr "" +msgstr "Đang độc thân" #. Label of the is_skipped (Check) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Is Skipped" -msgstr "" +msgstr "Bị bỏ qua" #. Label of the is_spam (Check) field in DocType 'Email Rule' #: frappe/email/doctype/email_rule/email_rule.json @@ -13987,7 +14006,7 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/custom/doctype/property_setter/property_setter.json msgid "Is System Generated" -msgstr "" +msgstr "Hệ thống có được tạo" #. Label of the istable (Check) field in DocType 'Customize Form' #: frappe/custom/doctype/customize_form/customize_form.json @@ -14025,36 +14044,36 @@ msgstr "" #: frappe/core/doctype/file/utils.py:157 frappe/utils/file_manager.py:311 msgid "It is risky to delete this file: {0}. Please contact your System Manager." -msgstr "" +msgstr "Sẽ rất nguy hiểm khi xóa tập tin này: {0}. Vui lòng liên hệ với Người quản lý hệ thống của bạn." #. Label of the item_label (Data) field in DocType 'Navbar Item' #: frappe/core/doctype/navbar_item/navbar_item.json msgid "Item Label" -msgstr "" +msgstr "Nhãn mặt hàng" #. Label of the item_type (Select) field in DocType 'Navbar Item' #: frappe/core/doctype/navbar_item/navbar_item.json msgid "Item Type" -msgstr "" +msgstr "Loại Vật phẩm" #: frappe/utils/nestedset.py:229 msgid "Item cannot be added to its own descendants" -msgstr "" +msgstr "Mục không thể được thêm vào con cháu của chính nó" #. Label of the items (Table) field in DocType 'Workspace Sidebar' #: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json msgid "Items" -msgstr "" +msgstr "Mục" #. 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 "Thông điệp JS" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Label of the json (Code) field in DocType 'Report' @@ -14067,12 +14086,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 "Nội dung yêu cầu JSON" #: frappe/templates/signup.html:5 msgid "Jane Doe" @@ -14114,32 +14133,32 @@ msgstr "" #: frappe/core/doctype/prepared_report/prepared_report.json #: frappe/core/doctype/rq_job/rq_job.json msgid "Job ID" -msgstr "" +msgstr "Mã công việc" #. Label of the job_id (Link) field in DocType 'Submission Queue' #: frappe/core/doctype/submission_queue/submission_queue.json msgid "Job Id" -msgstr "" +msgstr "Mã công việc" #. Label of the job_info_section (Section Break) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "Job Info" -msgstr "" +msgstr "Thông tin việc làm" #. Label of the job_name (Data) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "Job Name" -msgstr "" +msgstr "Tên công việc" #. Label of the job_status_section (Section Break) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "Job Status" -msgstr "" +msgstr "Tình trạng việc làm" #: frappe/core/doctype/data_import/data_import.js:191 #: frappe/core/doctype/rq_job/rq_job.js:24 msgid "Job Stopped Successfully" -msgstr "" +msgstr "Dừng công việc thành công" #: frappe/core/doctype/rq_job/rq_job.py:121 msgid "Job is in {0} state and can't be cancelled" @@ -14149,27 +14168,27 @@ msgstr "" #: frappe/core/doctype/prepared_report/prepared_report.py:200 #: frappe/core/doctype/rq_job/rq_job.py:113 msgid "Job is not running." -msgstr "" +msgstr "Công việc không chạy." #: frappe/core/doctype/prepared_report/prepared_report.py:198 msgid "Job stopped successfully" -msgstr "" +msgstr "Công việc đã dừng thành công" #: frappe/desk/doctype/event/event.js:55 msgid "Join video conference with {0}" -msgstr "" +msgstr "Tham gia hội nghị truyền hình với {0}" #: frappe/public/js/frappe/form/toolbar.js:421 -#: frappe/public/js/frappe/form/toolbar.js:869 +#: frappe/public/js/frappe/form/toolbar.js:870 msgid "Jump to field" -msgstr "" +msgstr "Chuyển đến trường" #: frappe/public/js/frappe/utils/number_systems.js:17 #: frappe/public/js/frappe/utils/number_systems.js:31 #: frappe/public/js/frappe/utils/number_systems.js:53 msgctxt "Number system" msgid "K" -msgstr "" +msgstr "K" #. Option for the 'Select List View' (Select) field in DocType 'Form Tour' #. Option for the 'DocType View' (Select) field in DocType 'Workspace Shortcut' @@ -14209,17 +14228,17 @@ msgstr "" #. Label of the keep_closed (Check) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Keep Closed" -msgstr "" +msgstr "Giữ kín" #. Description of a DocType #: frappe/core/doctype/activity_log/activity_log.json msgid "Keep track of all update feeds" -msgstr "" +msgstr "Theo dõi tất cả các nguồn cấp dữ liệu cập nhật" #. Description of a DocType #: frappe/core/doctype/communication/communication.json msgid "Keeps track of all communications" -msgstr "" +msgstr "Theo dõi mọi thông tin liên lạc" #. Label of the defkey (Data) field in DocType 'DefaultValue' #. Label of the key (Data) field in DocType 'Document Share Key' @@ -14236,19 +14255,19 @@ msgstr "" #: frappe/integrations/doctype/webhook_header/webhook_header.json #: frappe/website/doctype/website_meta_tag/website_meta_tag.json msgid "Key" -msgstr "" +msgstr "Chìa khóa" #. Label of a standard help item #. Type: Action #: frappe/hooks.py frappe/public/js/frappe/ui/keyboard.js:130 msgid "Keyboard Shortcuts" -msgstr "" +msgstr "Phím tắt" #. Option for the 'Social Login Provider' (Select) field in DocType 'Social #. Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Keycloak" -msgstr "" +msgstr "Áo choàng khóa" #: frappe/public/js/frappe/utils/number_systems.js:37 msgctxt "Number system" @@ -14259,35 +14278,35 @@ msgstr "" #: frappe/website/doctype/help_article/templates/help_article_list.html:2 #: frappe/website/doctype/help_article/templates/help_article_list.html:11 msgid "Knowledge Base" -msgstr "" +msgstr "Cơ sở Kiến thức" #. Name of a role #: frappe/website/doctype/help_article/help_article.json msgid "Knowledge Base Contributor" -msgstr "" +msgstr "Người đóng góp cơ sở kiến ​​thức" #. Name of a role #: frappe/website/doctype/help_article/help_article.json msgid "Knowledge Base Editor" -msgstr "" +msgstr "Trình chỉnh sửa cơ sở kiến ​​thức" #: frappe/public/js/frappe/utils/number_systems.js:27 #: frappe/public/js/frappe/utils/number_systems.js:49 msgctxt "Number system" msgid "L" -msgstr "" +msgstr "L" #. Label of the ldap_auth_section (Section Break) field in DocType 'LDAP #. Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Auth" -msgstr "" +msgstr "Xác thực LDAP" #. Label of the ldap_custom_settings_section (Section Break) field in DocType #. 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Custom Settings" -msgstr "" +msgstr "Cài đặt tùy chỉnh LDAP" #. Label of the ldap_email_field (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json @@ -14297,64 +14316,64 @@ msgstr "" #. Label of the ldap_first_name_field (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP First Name Field" -msgstr "" +msgstr "Trường tên LDAP" #. Label of the ldap_group (Data) field in DocType 'LDAP Group Mapping' #: frappe/integrations/doctype/ldap_group_mapping/ldap_group_mapping.json msgid "LDAP Group" -msgstr "" +msgstr "Nhóm LDAP" #. Label of the ldap_group_field (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Group Field" -msgstr "" +msgstr "Trường nhóm LDAP" #. Name of a DocType #: frappe/integrations/doctype/ldap_group_mapping/ldap_group_mapping.json msgid "LDAP Group Mapping" -msgstr "" +msgstr "Ánh xạ nhóm LDAP" #. Label of the ldap_group_mappings_section (Section Break) field in DocType #. 'LDAP Settings' #. Label of the ldap_groups (Table) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Group Mappings" -msgstr "" +msgstr "Ánh xạ nhóm LDAP" #. Label of the ldap_group_member_attribute (Data) field in DocType 'LDAP #. Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Group Member attribute" -msgstr "" +msgstr "Thuộc tính Thành viên nhóm LDAP" #. Label of the ldap_last_name_field (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Last Name Field" -msgstr "" +msgstr "Trường Họ LDAP" #. Label of the ldap_middle_name_field (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Middle Name Field" -msgstr "" +msgstr "Trường tên đệm LDAP" #. Label of the ldap_mobile_field (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Mobile Field" -msgstr "" +msgstr "Trường di động LDAP" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:163 msgid "LDAP Not Installed" -msgstr "" +msgstr "LDAP chưa được cài đặt" #. Label of the ldap_phone_field (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Phone Field" -msgstr "" +msgstr "Trường điện thoại LDAP" #. Label of the ldap_search_string (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Search String" -msgstr "" +msgstr "Chuỗi tìm kiếm LDAP" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:130 msgid "LDAP Search String must be enclosed in '()' and needs to contian the user placeholder {0}, eg sAMAccountName={0}" @@ -14369,13 +14388,13 @@ msgstr "" #. Label of the ldap_security (Section Break) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Security" -msgstr "" +msgstr "Bảo mật LDAP" #. Label of the ldap_server_settings_section (Section Break) field in DocType #. 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Server Settings" -msgstr "" +msgstr "Cài đặt máy chủ LDAP" #. Label of the ldap_server_url (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json @@ -14387,7 +14406,7 @@ msgstr "" #: frappe/integrations/doctype/ldap_settings/ldap_settings.json #: frappe/integrations/workspace/integrations/integrations.json msgid "LDAP Settings" -msgstr "" +msgstr "Cài đặt LDAP" #. Label of the ldap_user_creation_and_mapping_section (Section Break) field in #. DocType 'LDAP Settings' @@ -14398,22 +14417,22 @@ msgstr "" #. Label of the ldap_username_field (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP Username Field" -msgstr "" +msgstr "Trường tên người dùng LDAP" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:310 #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:429 msgid "LDAP is not enabled." -msgstr "" +msgstr "LDAP chưa được bật." #. Label of the ldap_search_path_group (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP search path for Groups" -msgstr "" +msgstr "Đường dẫn tìm kiếm LDAP cho Nhóm" #. Label of the ldap_search_path_user (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "LDAP search path for Users" -msgstr "" +msgstr "Đường dẫn tìm kiếm LDAP cho Người dùng" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:102 msgid "LDAP settings incorrect. validation response was: {0}" @@ -14470,12 +14489,12 @@ msgstr "" #: frappe/website/doctype/top_bar_item/top_bar_item.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Label" -msgstr "" +msgstr "Nhãn" #. Label of the label_help (HTML) field in DocType 'Custom Field' #: frappe/custom/doctype/custom_field/custom_field.json msgid "Label Help" -msgstr "" +msgstr "Trợ giúp Nhãn" #. Label of the label_and_type (Section Break) field in DocType 'Customize Form #. Field' @@ -14490,11 +14509,11 @@ msgstr "" #. Label of the sb0 (Section Break) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Landing Page" -msgstr "" +msgstr "Trang đích" #: frappe/public/js/frappe/form/print_utils.js:24 msgid "Landscape" -msgstr "" +msgstr "Phong cảnh" #. Name of a DocType #. Label of the language (Link) field in DocType 'System Settings' @@ -14509,96 +14528,96 @@ msgstr "" #: frappe/printing/page/print/print.js:126 #: frappe/public/js/frappe/form/templates/print_layout.html:11 msgid "Language" -msgstr "" +msgstr "Ngôn ngữ" #. Label of the language_code (Data) field in DocType 'Language' #: frappe/core/doctype/language/language.json msgid "Language Code" -msgstr "" +msgstr "Mã ngôn ngữ" #. Label of the language_name (Data) field in DocType 'Language' #: frappe/core/doctype/language/language.json msgid "Language Name" -msgstr "" +msgstr "Tên ngôn ngữ" #. Label of the last_10_active_users (Code) field in DocType 'System Health #. Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Last 10 active users" -msgstr "" +msgstr "10 người dùng hoạt động gần đây nhất" #: frappe/public/js/frappe/ui/filters/filter.js:627 msgid "Last 14 Days" -msgstr "" +msgstr "14 ngày qua" #: frappe/public/js/frappe/ui/filters/filter.js:631 msgid "Last 30 Days" -msgstr "" +msgstr "30 ngày qua" #: frappe/public/js/frappe/ui/filters/filter.js:651 msgid "Last 6 Months" -msgstr "" +msgstr "6 Tháng Qua" #: frappe/public/js/frappe/ui/filters/filter.js:623 msgid "Last 7 Days" -msgstr "" +msgstr "7 ngày qua" #: frappe/public/js/frappe/ui/filters/filter.js:635 msgid "Last 90 Days" -msgstr "" +msgstr "90 ngày qua" #. Label of the last_active (Datetime) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Last Active" -msgstr "" +msgstr "Hoạt động lần cuối" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:163 msgid "Last Edited by You" -msgstr "" +msgstr "Chỉnh sửa lần gần nhất bởi bạn" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:164 msgid "Last Edited by {0}" -msgstr "" +msgstr "Chỉnh sửa lần gần nhất bởi {0}" #. Label of the last_execution (Datetime) field in DocType 'Scheduled Job Type' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json msgid "Last Execution" -msgstr "" +msgstr "Thực hiện lần cuối" #. Label of the last_heartbeat (Datetime) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "Last Heartbeat" -msgstr "" +msgstr "Nhịp Tim Cuối Cùng" #. Label of the last_ip (Read Only) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Last IP" -msgstr "" +msgstr "IP cuối cùng" #. Label of the last_known_versions (Text) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Last Known Versions" -msgstr "" +msgstr "Phiên bản được biết đến gần đây nhất" #. Label of the last_login (Read Only) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Last Login" -msgstr "" +msgstr "Đăng nhập lần cuối" #: frappe/email/doctype/notification/notification.js:32 msgid "Last Modified Date" -msgstr "" +msgstr "Ngày sửa đổi lần cuối" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.js:242 #: frappe/public/js/frappe/views/dashboard/dashboard_view.js:480 msgid "Last Modified On" -msgstr "" +msgstr "Sửa đổi lần cuối vào" #. Option for the 'Timespan' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/public/js/frappe/ui/filters/filter.js:643 msgid "Last Month" -msgstr "" +msgstr "Tháng trước" #. Label of the last_name (Data) field in DocType 'Contact' #. Label of the last_name (Data) field in DocType 'User' @@ -14609,112 +14628,112 @@ msgstr "" #: frappe/core/web_form/edit_profile/edit_profile.json #: frappe/www/complete_signup.html:19 msgid "Last Name" -msgstr "" +msgstr "Họ" #. Label of the last_password_reset_date (Date) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Last Password Reset Date" -msgstr "" +msgstr "Ngày đặt lại mật khẩu cuối cùng" #. Option for the 'Timespan' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/public/js/frappe/ui/filters/filter.js:647 msgid "Last Quarter" -msgstr "" +msgstr "Quý trước" #. Label of the last_received_at (Datetime) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Last Received At" -msgstr "" +msgstr "Nhận lần cuối vào lúc" #. Label of the last_reset_password_key_generated_on (Datetime) field in #. DocType 'User' #: frappe/core/doctype/user/user.json msgid "Last Reset Password Key Generated On" -msgstr "" +msgstr "Khóa mật khẩu đặt lại lần cuối được tạo vào ngày" #. Label of the datetime_last_run (Datetime) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Last Run" -msgstr "" +msgstr "Lần chạy cuối cùng" #. Label of the last_sync_on (Datetime) field in DocType 'Google Contacts' #: frappe/integrations/doctype/google_contacts/google_contacts.json msgid "Last Sync On" -msgstr "" +msgstr "Đồng bộ hóa lần cuối bật" #. Label of the last_synced_on (Datetime) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Last Synced On" -msgstr "" +msgstr "Đồng bộ hóa lần cuối vào" #. Label of the last_updated (Datetime) field in DocType 'User Session Display' #: frappe/core/doctype/user_session_display/user_session_display.json msgid "Last Updated" -msgstr "" +msgstr "Cập nhật lần cuối" #: frappe/model/meta.py:57 frappe/public/js/frappe/model/meta.js:213 #: frappe/public/js/frappe/model/model.js:130 msgid "Last Updated By" -msgstr "" +msgstr "Cập nhật lần cuối bởi" #: frappe/model/meta.py:56 frappe/public/js/frappe/model/meta.js:212 #: frappe/public/js/frappe/model/model.js:126 msgid "Last Updated On" -msgstr "" +msgstr "Cập nhật lần cuối vào" #. Label of the last_user (Link) field in DocType 'Assignment Rule' #: frappe/automation/doctype/assignment_rule/assignment_rule.json msgid "Last User" -msgstr "" +msgstr "Người dùng cuối cùng" #. Option for the 'Timespan' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/public/js/frappe/ui/filters/filter.js:639 msgid "Last Week" -msgstr "" +msgstr "Tuần trước" #. Option for the 'Timespan' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/public/js/frappe/ui/filters/filter.js:655 msgid "Last Year" -msgstr "" +msgstr "Năm ngoái" #: frappe/public/js/frappe/widgets/chart_widget.js:753 msgid "Last synced {0}" -msgstr "" +msgstr "Đồng bộ hóa lần cuối {0}" #. Label of the layout (Code) field in DocType 'Desktop Layout' #: frappe/desk/doctype/desktop_layout/desktop_layout.json msgid "Layout" -msgstr "" +msgstr "Bố cục" #: frappe/custom/doctype/customize_form/customize_form.js:194 msgid "Layout Reset" -msgstr "" +msgstr "Đặt lại bố cục" #: frappe/custom/doctype/customize_form/customize_form.js:186 msgid "Layout will be reset to standard layout, are you sure you want to do this?" -msgstr "" +msgstr "Bố cục sẽ được đặt lại về bố cục chuẩn, bạn có chắc chắn muốn thực hiện việc này không?" #: frappe/website/web_template/section_with_features/section_with_features.html:26 msgid "Learn more" -msgstr "" +msgstr "Tìm hiểu thêm" #. Description of the 'Repeat Till' (Date) field in DocType 'Event' #: frappe/desk/doctype/event/event.json msgid "Leave blank to repeat always" -msgstr "" +msgstr "Để trống để lặp lại luôn" #: frappe/core/doctype/communication/mixins.py:207 -#: frappe/email/doctype/email_account/email_account.py:720 +#: frappe/email/doctype/email_account/email_account.py:721 msgid "Leave this conversation" -msgstr "" +msgstr "Rời khỏi cuộc trò chuyện này" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Ledger" -msgstr "" +msgstr "Sổ Cái" #. Option for the 'Alignment' (Select) field in DocType 'DocField' #. Option for the 'Alignment' (Select) field in DocType 'Custom Field' @@ -14729,32 +14748,32 @@ msgstr "" #: frappe/printing/doctype/letter_head/letter_head.json #: frappe/website/doctype/web_page/web_page.json msgid "Left" -msgstr "" +msgstr "Còn lại" #: frappe/printing/page/print_format_builder/print_format_builder.js:483 #: frappe/public/js/print_format_builder/PrintFormatControls.vue:155 msgctxt "alignment" msgid "Left" -msgstr "" +msgstr "Còn lại" #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Left Bottom" -msgstr "" +msgstr "Đáy trái" #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Left Center" -msgstr "" +msgstr "Trung tâm bên trái" #: frappe/email/doctype/email_unsubscribe/email_unsubscribe.py:58 msgid "Left this conversation" -msgstr "" +msgstr "Đã rời khỏi cuộc trò chuyện này" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Legal" -msgstr "" +msgstr "Pháp lý" #. Label of the length (Int) field in DocType 'DocField' #. Label of the length (Int) field in DocType 'Custom Field' @@ -14763,56 +14782,56 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Length" -msgstr "" +msgstr "Chiều dài" #: frappe/public/js/frappe/ui/chart.js:11 msgid "Length of passed data array is greater than value of maximum allowed label points!" -msgstr "" +msgstr "Độ dài của mảng dữ liệu được truyền lớn hơn giá trị điểm nhãn tối đa được phép!" #: frappe/database/schema.py:138 msgid "Length of {0} should be between 1 and 1000" -msgstr "" +msgstr "Độ dài của {0} phải nằm trong khoảng từ 1 đến 1000" #: frappe/public/js/frappe/widgets/chart_widget.js:729 msgid "Less" -msgstr "" +msgstr "Ít hơn" #: frappe/public/js/frappe/ui/filters/filter.js:24 msgid "Less Than" -msgstr "" +msgstr "Ít hơn" #: frappe/public/js/frappe/ui/filters/filter.js:26 msgid "Less Than Or Equal To" -msgstr "" +msgstr "Nhỏ hơn hoặc bằng" #: frappe/public/js/frappe/widgets/onboarding_widget.js:434 msgid "Let us continue with the onboarding" -msgstr "" +msgstr "Chúng ta hãy tiếp tục với phần giới thiệu" #: frappe/public/js/frappe/views/workspace/blocks/onboarding.js:94 #: frappe/public/js/frappe/widgets/onboarding_widget.js:597 msgid "Let's Get Started" -msgstr "" +msgstr "Hãy bắt đầu" #: frappe/utils/password_strength.py:111 msgid "Let's avoid repeated words and characters" msgstr "" -#: frappe/desk/page/setup_wizard/setup_wizard.js:474 +#: frappe/desk/page/setup_wizard/setup_wizard.js:468 msgid "Let's set up your account" -msgstr "" +msgstr "Hãy thiết lập tài khoản của bạn" #: frappe/public/js/frappe/widgets/onboarding_widget.js:263 #: frappe/public/js/frappe/widgets/onboarding_widget.js:304 #: frappe/public/js/frappe/widgets/onboarding_widget.js:375 #: frappe/public/js/frappe/widgets/onboarding_widget.js:414 msgid "Let's take you back to onboarding" -msgstr "" +msgstr "Hãy đưa bạn trở lại quá trình làm quen" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Letter" -msgstr "" +msgstr "Thư" #. Label of the letter_head (Link) field in DocType 'Report' #. Name of a DocType @@ -14824,28 +14843,28 @@ msgstr "" #: frappe/public/js/frappe/list/bulk_operations.js:52 #: frappe/public/js/print_format_builder/LetterHeadEditor.vue:144 msgid "Letter Head" -msgstr "" +msgstr "Tiêu đề thư" #. Label of the source (Select) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Letter Head Based On" -msgstr "" +msgstr "Tiêu đề thư dựa trên" #. Label of the letter_head_image_section (Section Break) field in DocType #. 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Letter Head Image" -msgstr "" +msgstr "Hình ảnh tiêu đề thư" #. Label of the letter_head_name (Data) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json #: frappe/public/js/print_format_builder/LetterHeadEditor.vue:198 msgid "Letter Head Name" -msgstr "" +msgstr "Tên tiêu đề thư" #: frappe/printing/doctype/letter_head/letter_head.js:30 msgid "Letter Head Scripts" -msgstr "" +msgstr "Tập lệnh tiêu đề thư" #: frappe/printing/doctype/letter_head/letter_head.py:56 msgid "Letter Head cannot be both disabled and default" @@ -14855,7 +14874,7 @@ msgstr "" #. Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Letter Head in HTML" -msgstr "" +msgstr "Tiêu đề thư trong HTML" #. Label of the permlevel (Int) field in DocType 'Custom DocPerm' #. Label of the permlevel (Int) field in DocType 'DocPerm' @@ -14867,81 +14886,81 @@ msgstr "" #: frappe/public/js/frappe/roles_editor.js:68 #: frappe/website/doctype/help_article/help_article.json msgid "Level" -msgstr "" +msgstr "Cấp độ" #: frappe/core/page/permission_manager/permission_manager.js:519 msgid "Level 0 is for document level permissions, higher levels for field level permissions." -msgstr "" +msgstr "Cấp 0 dành cho quyền cấp tài liệu, cấp cao hơn dành cho quyền cấp trường." #: frappe/public/js/frappe/file_uploader/FileUploader.vue:94 msgid "Library" -msgstr "" +msgstr "Thư viện" #. Label of the license (Markdown Editor) field in DocType 'Package' #: frappe/core/doctype/package/package.json frappe/www/attribution.html:36 msgid "License" -msgstr "" +msgstr "Giấy phép" #. Label of the license_type (Select) field in DocType 'Package' #: frappe/core/doctype/package/package.json msgid "License Type" -msgstr "" +msgstr "Loại giấy phép" #. Option for the 'Desk Theme' (Select) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Light" -msgstr "" +msgstr "Ánh sáng" #. Option for the 'Color' (Select) field in DocType 'DocType State' #. Option for the 'Indicator' (Select) field in DocType 'Kanban Board Column' #: frappe/core/doctype/doctype_state/doctype_state.json #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Light Blue" -msgstr "" +msgstr "Xanh nhạt" #. Label of the light_color (Link) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "Light Color" -msgstr "" +msgstr "Màu sáng" #: frappe/public/js/frappe/ui/theme_switcher.js:60 msgid "Light Theme" -msgstr "" +msgstr "Chủ Đề Ánh Sáng" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #: frappe/core/doctype/comment/comment.json -#: frappe/public/js/frappe/list/base_list.js:1272 +#: frappe/public/js/frappe/list/base_list.js:1284 #: frappe/public/js/frappe/ui/filters/filter.js:18 msgid "Like" -msgstr "" +msgstr "Thích" #: frappe/desk/like.py:92 msgid "Liked" -msgstr "" +msgstr "Đã thích" #: frappe/model/meta.py:60 frappe/public/js/frappe/model/meta.js:216 #: frappe/public/js/frappe/model/model.js:134 msgid "Liked By" -msgstr "" +msgstr "Được thích bởi" #. Label of the likes (Int) field in DocType 'Help Article' #: frappe/website/doctype/help_article/help_article.json msgid "Likes" -msgstr "" +msgstr "Thích" #. Label of the limit (Int) field in DocType 'Bulk Update' #: frappe/desk/doctype/bulk_update/bulk_update.json msgid "Limit" msgstr "" -#: frappe/database/query.py:302 +#: frappe/database/query.py:297 msgid "Limit must be a non-negative integer" msgstr "" #. Option for the 'Type' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Line" -msgstr "" +msgstr "Dòng" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Fieldtype' (Select) field in DocType 'Report Column' @@ -14974,23 +14993,23 @@ msgstr "" #: frappe/website/doctype/web_template_field/web_template_field.json #: frappe/workflow/doctype/workflow_transition_task/workflow_transition_task.json msgid "Link" -msgstr "" +msgstr "Liên kết" #. Label of the tab_break_18 (Tab Break) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "Link Cards" -msgstr "" +msgstr "Thẻ liên kết" #. Label of the link_count (Int) field in DocType 'Workspace Link' #: frappe/desk/doctype/workspace_link/workspace_link.json msgid "Link Count" -msgstr "" +msgstr "Số lượng liên kết" #. Label of the link_details_section (Section Break) field in DocType #. 'Workspace Link' #: frappe/desk/doctype/workspace_link/workspace_link.json msgid "Link Details" -msgstr "" +msgstr "Chi tiết liên kết" #. Label of the link_doctype (Link) field in DocType 'Activity Log' #. Label of the link_doctype (Link) field in DocType 'Communication Link' @@ -14999,28 +15018,28 @@ msgstr "" #: frappe/core/doctype/communication_link/communication_link.json #: frappe/core/doctype/doctype_link/doctype_link.json msgid "Link DocType" -msgstr "" +msgstr "Liên kết Loại tài liệu" #. Label of the link_doctype (Link) field in DocType 'Dynamic Link' #: frappe/core/doctype/dynamic_link/dynamic_link.json msgid "Link Document Type" -msgstr "" +msgstr "Loại tài liệu liên kết" #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.py:407 #: frappe/workflow/doctype/workflow_action/workflow_action.py:202 msgid "Link Expired" -msgstr "" +msgstr "Liên kết đã hết hạn" #. Label of the link_field_results_limit (Int) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Link Field Results Limit" -msgstr "" +msgstr "Giới hạn kết quả của trường liên kết" #. Label of the link_fieldname (Data) field in DocType 'DocType Link' #: frappe/core/doctype/doctype_link/doctype_link.json msgid "Link Fieldname" -msgstr "" +msgstr "Tên trường liên kết" #. Label of the link_filters (JSON) field in DocType 'DocField' #. Label of the link_filters (JSON) field in DocType 'Custom Field' @@ -15040,14 +15059,14 @@ msgstr "" #: frappe/core/doctype/communication_link/communication_link.json #: frappe/core/doctype/dynamic_link/dynamic_link.json msgid "Link Name" -msgstr "" +msgstr "Tên liên kết" #. Label of the link_title (Read Only) field in DocType 'Communication Link' #. Label of the link_title (Read Only) field in DocType 'Dynamic Link' #: frappe/core/doctype/communication_link/communication_link.json #: frappe/core/doctype/dynamic_link/dynamic_link.json msgid "Link Title" -msgstr "" +msgstr "Tiêu đề liên kết" #. Label of the link_to (Dynamic Link) field in DocType 'Desktop Icon' #. Label of the link_to (Dynamic Link) field in DocType 'Workspace' @@ -15064,11 +15083,11 @@ msgstr "" #: frappe/public/js/frappe/widgets/widget_dialog.js:281 #: frappe/public/js/frappe/widgets/widget_dialog.js:427 msgid "Link To" -msgstr "" +msgstr "Liên kết tới" #: frappe/public/js/frappe/widgets/widget_dialog.js:363 msgid "Link To in Row" -msgstr "" +msgstr "Liên kết đến trong hàng" #. Label of the link_type (Select) field in DocType 'Desktop Icon' #. Label of the link_type (Select) field in DocType 'Workspace' @@ -15081,11 +15100,11 @@ msgstr "" #: frappe/public/js/frappe/views/workspace/workspace.js:472 #: frappe/public/js/frappe/widgets/widget_dialog.js:273 msgid "Link Type" -msgstr "" +msgstr "Loại liên kết" #: frappe/public/js/frappe/widgets/widget_dialog.js:359 msgid "Link Type in Row" -msgstr "" +msgstr "Loại liên kết trong hàng" #: frappe/website/doctype/about_us_settings/about_us_settings.js:6 msgid "Link for About Us Page is \"/about\"." @@ -15099,18 +15118,18 @@ msgstr "" #. Description of the 'URL' (Data) field in DocType 'Top Bar Item' #: frappe/website/doctype/top_bar_item/top_bar_item.json msgid "Link to the page you want to open. Leave blank if you want to make it a group parent." -msgstr "" +msgstr "Liên kết đến trang bạn muốn mở. Để trống nếu bạn muốn biến nó thành nhóm mẹ." #. Option for the 'Status' (Select) field in DocType 'Activity Log' #. Option for the 'Status' (Select) field in DocType 'Communication' #: frappe/core/doctype/activity_log/activity_log.json #: frappe/core/doctype/communication/communication.json msgid "Linked" -msgstr "" +msgstr "Đã liên kết" #: frappe/public/js/frappe/form/linked_with.js:23 msgid "Linked With" -msgstr "" +msgstr "Được liên kết với" #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "LinkedIn" @@ -15134,7 +15153,7 @@ msgstr "" #: frappe/desk/doctype/sidebar_item_group/sidebar_item_group.json #: frappe/desk/doctype/workspace/workspace.json msgid "Links" -msgstr "" +msgstr "Liên kết" #. Option for the 'Apply To' (Select) field in DocType 'Client Script' #. Option for the 'View' (Select) field in DocType 'Form Tour' @@ -15144,25 +15163,25 @@ 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:86 -#: frappe/public/js/frappe/utils/utils.js:950 +#: frappe/public/js/frappe/utils/utils.js:961 msgid "List" -msgstr "" +msgstr "Danh sách" #. Label of the list__search_settings_section (Section Break) field in DocType #. 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "List / Search Settings" -msgstr "" +msgstr "Danh sách / Cài đặt tìm kiếm" #. Label of the list_columns (Table) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "List Columns" -msgstr "" +msgstr "Danh sách cột" #. Name of a DocType #: frappe/desk/doctype/list_filter/list_filter.json msgid "List Filter" -msgstr "" +msgstr "Bộ lọc danh sách" #. Label of the list_settings_section (Section Break) field in DocType 'User' #. Label of the section_break_8 (Section Break) field in DocType 'Customize @@ -15172,25 +15191,25 @@ msgstr "" #: frappe/custom/doctype/customize_form/customize_form.json #: frappe/website/doctype/web_form/web_form.json msgid "List Settings" -msgstr "" +msgstr "Cài đặt danh sách" -#: frappe/public/js/frappe/list/list_view.js:2077 +#: frappe/public/js/frappe/list/list_view.js:2088 msgctxt "Button in list view menu" msgid "List Settings" -msgstr "" +msgstr "Cài đặt danh sách" #: frappe/public/js/frappe/list/base_list.js:203 msgid "List View" -msgstr "" +msgstr "Xem danh sách" #. Name of a DocType #: frappe/desk/doctype/list_view_settings/list_view_settings.json msgid "List View Settings" -msgstr "" +msgstr "Cài đặt chế độ xem danh sách" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:230 msgid "List a document type" -msgstr "" +msgstr "Liệt kê loại tài liệu" #. Description of the 'Breadcrumbs' (Code) field in DocType 'Web Form' #. Description of the 'Breadcrumbs' (Code) field in DocType 'Web Page' @@ -15208,90 +15227,90 @@ msgstr "" #. Description of a DocType #: frappe/core/doctype/patch_log/patch_log.json msgid "List of patches executed" -msgstr "" +msgstr "Danh sách các bản vá đã thực thi" #. Label of the list_setting_message (HTML) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "List setting message" -msgstr "" +msgstr "Thông báo thiết lập danh sách" #: frappe/public/js/frappe/ui/toolbar/search_utils.js:556 msgid "Lists" -msgstr "" +msgstr "Danh sách" #. Option for the 'Rule' (Select) field in DocType 'Assignment Rule' #: frappe/automation/doctype/assignment_rule/assignment_rule.json msgid "Load Balancing" -msgstr "" +msgstr "Cân bằng tải" #: frappe/public/js/frappe/list/base_list.js:380 #: frappe/public/js/frappe/web_form/web_form_list.js:306 #: frappe/website/doctype/help_article/templates/help_article_list.html:30 msgid "Load More" -msgstr "" +msgstr "Tải thêm" #: frappe/public/js/frappe/form/footer/form_timeline.js:215 msgctxt "Form timeline" msgid "Load More Communications" -msgstr "" +msgstr "Tải thêm thông tin liên lạc" #: frappe/public/js/frappe/file_uploader/TreeNode.vue:45 msgid "Load more" -msgstr "" +msgstr "Tải thêm" #: frappe/core/page/permission_manager/permission_manager.js:173 #: frappe/public/js/frappe/form/controls/multicheck.js:13 #: frappe/public/js/frappe/form/linked_with.js:13 #: frappe/public/js/frappe/list/base_list.js:509 -#: frappe/public/js/frappe/list/list_view.js:367 +#: frappe/public/js/frappe/list/list_view.js:376 #: frappe/public/js/frappe/ui/listing.html:16 #: frappe/public/js/frappe/views/reports/query_report.js:1132 msgid "Loading" -msgstr "" +msgstr "Đang tải" #: frappe/public/js/frappe/widgets/widget_dialog.js:107 msgid "Loading Filters..." -msgstr "" +msgstr "Đang tải bộ lọc..." #: frappe/core/doctype/data_import/data_import.js:283 msgid "Loading import file..." -msgstr "" +msgstr "Đang tải tập tin nhập..." #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Loading versions..." -msgstr "" +msgstr "Đang tải phiên bản..." #: frappe/public/js/frappe/file_uploader/TreeNode.vue:45 -#: frappe/public/js/frappe/form/sidebar/share.js:57 -#: frappe/public/js/frappe/list/base_list.js:1062 +#: frappe/public/js/frappe/form/sidebar/share.js:62 +#: frappe/public/js/frappe/list/base_list.js:1064 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:91 #: frappe/public/js/frappe/views/kanban/kanban_board.html:11 #: frappe/public/js/frappe/widgets/chart_widget.js:50 #: frappe/public/js/frappe/widgets/number_card_widget.js:188 #: frappe/public/js/frappe/widgets/quick_list_widget.js:129 msgid "Loading..." -msgstr "" +msgstr "Đang tải..." #. Label of the location (Data) field in DocType 'User' #. Label of the location (Data) field in DocType 'Event' #: frappe/core/doctype/user/user.json frappe/desk/doctype/event/event.json msgid "Location" -msgstr "" +msgstr "Vị trí" #. Label of the log (Code) field in DocType 'Package Import' #: frappe/core/doctype/package_import/package_import.json msgid "Log" -msgstr "" +msgstr "Nhật ký" #. Label of the log_api_requests (Check) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Log API Requests" -msgstr "" +msgstr "Đăng nhập các yêu cầu API" #. Label of the log_data_section (Section Break) field in DocType 'Access Log' #: frappe/core/doctype/access_log/access_log.json msgid "Log Data" -msgstr "" +msgstr "Dữ liệu nhật ký" #. Label of the ref_doctype (Link) field in DocType 'Logs To Clear' #: frappe/core/doctype/logs_to_clear/logs_to_clear.json @@ -15300,38 +15319,38 @@ msgstr "" #: frappe/templates/emails/login_with_email_link.html:27 msgid "Log In To {0}" -msgstr "" +msgstr "Đăng nhập vào {0}" #. Label of the log_index (Int) field in DocType 'Data Import Log' #: frappe/core/doctype/data_import_log/data_import_log.json msgid "Log Index" -msgstr "" +msgstr "Chỉ mục nhật ký" #. Name of a DocType #: frappe/core/doctype/log_setting_user/log_setting_user.json msgid "Log Setting User" -msgstr "" +msgstr "Cài đặt nhật ký người dùng" #. Name of a DocType #: frappe/core/doctype/log_settings/log_settings.json #: frappe/public/js/frappe/logtypes.js:20 msgid "Log Settings" -msgstr "" +msgstr "Cài đặt nhật ký" #: frappe/www/desk.py:23 msgid "Log in to access this page." -msgstr "" +msgstr "Đăng nhập để truy cập trang này." #. Label of a standard navbar item #. Type: Action #: frappe/hooks.py #: frappe/website/doctype/website_settings/website_settings.py:182 msgid "Log out" -msgstr "" +msgstr "Đăng xuất" #: frappe/handler.py:120 msgid "Logged Out" -msgstr "" +msgstr "Đã đăng xuất" #. Option for the 'Operation' (Select) field in DocType 'Activity Log' #. Label of the security_tab (Tab Break) field in DocType 'System Settings' @@ -15345,28 +15364,28 @@ msgstr "" #: frappe/website/page_renderers/not_permitted_page.py:24 #: frappe/www/login.html:45 msgid "Login" -msgstr "" +msgstr "Đăng nhập" #. Label of a chart in the Users Workspace #: frappe/core/workspace/users/users.json msgid "Login Activity" -msgstr "" +msgstr "Hoạt động đăng nhập" #. Label of the login_after (Int) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Login After" -msgstr "" +msgstr "Đăng nhập sau" #. Label of the login_before (Int) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Login Before" -msgstr "" +msgstr "Đăng nhập trước" #: frappe/public/js/frappe/desk.js:256 msgid "Login Failed please try again" -msgstr "" +msgstr "Đăng nhập không thành công vui lòng thử lại" -#: frappe/email/doctype/email_account/email_account.py:144 +#: frappe/email/doctype/email_account/email_account.py:145 msgid "Login Id is required" msgstr "" @@ -15374,21 +15393,21 @@ msgstr "" #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Login Methods" -msgstr "" +msgstr "Phương thức đăng nhập" #. Label of the misc_section (Section Break) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Login Page" -msgstr "" +msgstr "Trang đăng nhập" #: frappe/www/login.py:156 msgid "Login To {0}" -msgstr "" +msgstr "Đăng nhập vào {0}" #: frappe/twofactor.py:260 msgid "Login Verification Code from {}" -msgstr "" +msgstr "Mã xác minh đăng nhập từ {}" #: frappe/templates/emails/new_message.html:4 msgid "Login and view in Browser" @@ -15404,32 +15423,36 @@ msgstr "" #: frappe/auth.py:345 frappe/auth.py:348 msgid "Login not allowed at this time" -msgstr "" +msgstr "Đăng nhập không được phép vào thời điểm này" #. Label of the login_required (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Login required" -msgstr "" +msgstr "Yêu cầu đăng nhập" #: frappe/twofactor.py:164 msgid "Login session expired, refresh page to retry" -msgstr "" +msgstr "Phiên đăng nhập đã hết hạn, hãy làm mới trang để thử lại" #: frappe/templates/includes/comments/comments.html:110 msgid "Login to comment" -msgstr "" +msgstr "Đăng nhập để bình luận" #: frappe/templates/includes/comments/comments.html:6 msgid "Login to start a new discussion" -msgstr "" +msgstr "Đăng nhập để bắt đầu một cuộc thảo luận mới" + +#: frappe/www/portal.py:17 +msgid "Login to view" +msgstr "Đăng nhập để xem" #: frappe/www/login.html:64 msgid "Login to {0}" -msgstr "" +msgstr "Đăng nhập vào {0}" #: frappe/templates/includes/login/login.js:318 msgid "Login token required" -msgstr "" +msgstr "Cần có mã thông báo đăng nhập" #: frappe/www/login.html:126 frappe/www/login.html:205 msgid "Login with Email Link" @@ -15441,7 +15464,7 @@ msgstr "" #: frappe/www/login.html:49 msgid "Login with LDAP" -msgstr "" +msgstr "Đăng nhập bằng LDAP" #. Label of the login_with_email_link (Check) field in DocType 'System #. Settings' @@ -15461,52 +15484,52 @@ msgstr "" #: frappe/www/login.html:100 msgid "Login with {0}" -msgstr "" +msgstr "Đăng nhập bằng {0}" #. Label of the logo_uri (Data) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Logo URI" -msgstr "" +msgstr "URI biểu trưng" #. Label of the logo_url (Data) field in DocType 'Desktop Icon' #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Logo URL" -msgstr "" +msgstr "URL biểu tượng" #. Option for the 'Operation' (Select) field in DocType 'Activity Log' #: frappe/core/doctype/activity_log/activity_log.json frappe/www/me.html:91 msgid "Logout" -msgstr "" +msgstr "Đăng xuất" -#: frappe/core/doctype/user/user.js:195 +#: frappe/core/doctype/user/user.js:198 msgid "Logout All Sessions" -msgstr "" +msgstr "Đăng xuất tất cả các phiên" #. Label of the logout_on_password_reset (Check) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Logout All Sessions on Password Reset" -msgstr "" +msgstr "Đăng xuất tất cả các phiên đặt lại mật khẩu" #. Label of the logout_all_sessions (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Logout From All Devices After Changing Password" -msgstr "" +msgstr "Đăng xuất khỏi tất cả các thiết bị sau khi thay đổi mật khẩu" #. Group in User's connections #: frappe/core/doctype/user/user.json msgid "Logs" -msgstr "" +msgstr "Nhật ký" #. Name of a DocType #: frappe/core/doctype/logs_to_clear/logs_to_clear.json msgid "Logs To Clear" -msgstr "" +msgstr "Nhật ký cần xóa" #. Label of the logs_to_clear (Table) field in DocType 'Log Settings' #: frappe/core/doctype/log_settings/log_settings.json msgid "Logs to Clear" -msgstr "" +msgstr "Nhật ký cần xóa" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -15515,35 +15538,35 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Long Text" -msgstr "" +msgstr "Văn bản dài" #: frappe/public/js/frappe/widgets/onboarding_widget.js:317 msgid "Looks like you didn't change the value" -msgstr "" +msgstr "Có vẻ như bạn không thay đổi giá trị" #: frappe/www/third_party_apps.html:59 msgid "Looks like you haven’t added any third party apps." -msgstr "" +msgstr "Có vẻ như bạn chưa thêm bất kỳ ứng dụng bên thứ ba nào." #: frappe/public/js/frappe/ui/notifications/notifications.js:355 msgid "Looks like you haven’t received any notifications." -msgstr "" +msgstr "Có vẻ như bạn chưa nhận được bất kỳ thông báo nào." #. Option for the 'Priority' (Select) field in DocType 'ToDo' #: frappe/desk/doctype/todo/todo.json -#: frappe/public/js/frappe/form/sidebar/assign_to.js:220 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:228 msgid "Low" -msgstr "" +msgstr "Thấp" #: frappe/public/js/frappe/utils/number_systems.js:13 msgctxt "Number system" msgid "M" -msgstr "" +msgstr "M" #. Option for the 'License Type' (Select) field in DocType 'Package' #: frappe/core/doctype/package/package.json msgid "MIT License" -msgstr "" +msgstr "Giấy phép MIT" #: frappe/desk/page/setup_wizard/install_fixtures.py:48 msgid "Madam" @@ -15552,33 +15575,33 @@ msgstr "" #. Label of the main_section (Text Editor) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Main Section" -msgstr "" +msgstr "Phần Chính" #. Label of the main_section_html (HTML Editor) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Main Section (HTML)" -msgstr "" +msgstr "Phần chính (HTML)" #. Label of the main_section_md (Markdown Editor) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Main Section (Markdown)" -msgstr "" +msgstr "Phần chính (Đánh dấu)" #. Name of a role #: frappe/contacts/doctype/contact/contact.json msgid "Maintenance Manager" -msgstr "" +msgstr "Giám đốc bảo trì" #. Name of a role #: frappe/contacts/doctype/address/address.json #: frappe/contacts/doctype/contact/contact.json msgid "Maintenance User" -msgstr "" +msgstr "Người dùng bảo trì" #. Label of the major (Int) field in DocType 'Package Release' #: frappe/core/doctype/package_release/package_release.json msgid "Major" -msgstr "" +msgstr "Thiếu tá" #. Label of the show_name_in_global_search (Check) field in DocType 'DocType' #. Label of the show_name_in_global_search (Check) field in DocType 'Customize @@ -15586,12 +15609,12 @@ msgstr "" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Make \"name\" searchable in Global Search" -msgstr "" +msgstr "Làm cho \"tên\" có thể tìm kiếm được trong Tìm kiếm Toàn cầu" #. Label of the make_attachment_public (Check) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Make Attachment Public (by default)" -msgstr "" +msgstr "Đặt tệp đính kèm ở chế độ công khai (theo mặc định)" #. Label of the make_attachments_public (Check) field in DocType 'DocType' #. Label of the make_attachments_public (Check) field in DocType 'Customize @@ -15599,29 +15622,29 @@ msgstr "" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Make Attachments Public by Default" -msgstr "" +msgstr "Đặt tệp đính kèm ở chế độ công khai theo mặc định" #. Description of the 'Disable Username/Password Login' (Check) field in #. DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Make sure to configure a Social Login Key before disabling to prevent lockout" -msgstr "" +msgstr "Đảm bảo định cấu hình Khóa đăng nhập xã hội trước khi tắt để tránh bị khóa" #: frappe/utils/password_strength.py:92 msgid "Make use of longer keyboard patterns" -msgstr "" +msgstr "Tận dụng các mẫu bàn phím dài hơn" #: frappe/public/js/frappe/form/multi_select_dialog.js:87 msgid "Make {0}" -msgstr "" +msgstr "Tạo {0}" #: frappe/website/doctype/web_page/web_page.js:77 msgid "Makes the page public" -msgstr "" +msgstr "Công khai trang" #: frappe/desk/page/setup_wizard/install_fixtures.py:28 msgid "Male" -msgstr "" +msgstr "Nam" #: frappe/www/me.html:56 msgid "Manage 3rd party apps" @@ -15629,7 +15652,7 @@ msgstr "" #: frappe/public/js/billing.bundle.js:45 msgid "Manage Billing" -msgstr "" +msgstr "Quản lý thanh toán" #. Label of the reqd (Check) field in DocType 'DocField' #. Label of the mandatory (Check) field in DocType 'Report Filter' @@ -15642,7 +15665,7 @@ msgstr "" #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Mandatory" -msgstr "" +msgstr "Bắt buộc" #. Label of the mandatory_depends_on (Code) field in DocType 'Custom Field' #. Label of the mandatory_depends_on (Code) field in DocType 'Customize Form @@ -15652,88 +15675,88 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Mandatory Depends On" -msgstr "" +msgstr "Bắt buộc phụ thuộc vào" #. Label of the mandatory_depends_on (Code) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Mandatory Depends On (JS)" -msgstr "" +msgstr "Bắt buộc phụ thuộc vào (JS)" #: frappe/website/doctype/web_form/web_form.py:537 msgid "Mandatory Information missing:" -msgstr "" +msgstr "Thiếu thông tin bắt buộc:" #: frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js:120 msgid "Mandatory field: set role for" -msgstr "" +msgstr "Trường bắt buộc: đặt vai trò cho" #: frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js:124 msgid "Mandatory field: {0}" -msgstr "" +msgstr "Trường bắt buộc: {0}" #: frappe/public/js/frappe/form/save.js:181 msgid "Mandatory fields required in table {0}, Row {1}" -msgstr "" +msgstr "Các trường bắt buộc phải có trong bảng {0}, Hàng {1}" #: frappe/public/js/frappe/form/save.js:186 msgid "Mandatory fields required in {0}" -msgstr "" +msgstr "Các trường bắt buộc phải có trong {0}" #: frappe/public/js/frappe/web_form/web_form.js:254 msgctxt "Error message in web form" msgid "Mandatory fields required:" -msgstr "" +msgstr "Các trường bắt buộc phải có:" #: frappe/core/doctype/data_export/exporter.py:142 msgid "Mandatory:" -msgstr "" +msgstr "Bắt buộc:" #. Option for the 'Select List View' (Select) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Map" -msgstr "" +msgstr "Bản đồ" #: frappe/public/js/frappe/data_import/import_preview.js:194 #: frappe/public/js/frappe/data_import/import_preview.js:306 msgid "Map Columns" -msgstr "" +msgstr "Cột bản đồ" #: frappe/public/js/frappe/list/base_list.js:212 msgid "Map View" -msgstr "" +msgstr "Xem bản đồ" #: frappe/public/js/frappe/data_import/import_preview.js:294 msgid "Map columns from {0} to fields in {1}" -msgstr "" +msgstr "Ánh xạ các cột từ {0} tới các trường trong {1}" #. Description of the 'Dynamic Route' (Check) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Map route parameters into form variables. Example /project/<name>" -msgstr "" +msgstr "Ánh xạ các tham số tuyến đường thành các biến dạng. Ví dụ /dự án/<name>" #: frappe/core/doctype/data_import/importer.py:923 msgid "Mapping column {0} to field {1}" -msgstr "" +msgstr "Ánh xạ cột {0} tới trường {1}" #. Label of the margin_bottom (Float) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Margin Bottom" -msgstr "" +msgstr "Ký quỹ đáy" #. Label of the margin_left (Float) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Margin Left" -msgstr "" +msgstr "Lề trái" #. Label of the margin_right (Float) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Margin Right" -msgstr "" +msgstr "Lề phải" #. Label of the margin_top (Float) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Margin Top" -msgstr "" +msgstr "Lề trên" #. Label of the mariadb_variables_section (Section Break) field in DocType #. 'System Health Report' @@ -15765,7 +15788,7 @@ msgstr "" #: frappe/website/doctype/web_page/web_page.js:92 #: frappe/website/doctype/web_page/web_page.json msgid "Markdown" -msgstr "" +msgstr "Giảm giá" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -15776,7 +15799,7 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Markdown Editor" -msgstr "" +msgstr "Trình chỉnh sửa đánh dấu" #. Option for the 'Delivery Status' (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json @@ -15788,7 +15811,7 @@ msgstr "" #: frappe/website/doctype/utm_medium/utm_medium.json #: frappe/website/doctype/utm_source/utm_source.json msgid "Marketing Manager" -msgstr "" +msgstr "Giám đốc tiếp thị" #. Label of the mask (Check) field in DocType 'Custom DocPerm' #. Label of the mask (Check) field in DocType 'DocField' @@ -15800,53 +15823,53 @@ msgstr "" #: frappe/core/page/permission_manager/permission_manager_help.html:81 #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Mask" -msgstr "" +msgstr "Mặt nạ" #: frappe/desk/page/setup_wizard/install_fixtures.py:50 msgid "Master" -msgstr "" +msgstr "Thầy" #. Description of the 'Limit' (Int) field in DocType 'Bulk Update' #: frappe/desk/doctype/bulk_update/bulk_update.json msgid "Max 500 records at a time" -msgstr "" +msgstr "Tối đa 500 bản ghi cùng một lúc" #. Label of the max_attachments (Int) field in DocType 'DocType' #. Label of the max_attachments (Int) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Max Attachments" -msgstr "" +msgstr "Tệp đính kèm tối đa" #. Label of the max_file_size (Int) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Max File Size (MB)" -msgstr "" +msgstr "Kích thước tệp tối đa (MB)" #. Label of the max_height (Data) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Max Height" -msgstr "" +msgstr "Chiều cao tối đa" #. Label of the max_length (Int) field in DocType 'Web Form Field' #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Max Length" -msgstr "" +msgstr "Độ dài tối đa" #. Label of the max_report_rows (Int) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Max Report Rows" -msgstr "" +msgstr "Hàng báo cáo tối đa" #. Label of the max_value (Int) field in DocType 'Web Form Field' #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Max Value" -msgstr "" +msgstr "Giá trị tối đa" #. Label of the max_attachment_size (Int) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Max attachment size" -msgstr "" +msgstr "Kích thước tệp đính kèm tối đa" #. Label of the max_auto_email_report_per_user (Int) field in DocType 'System #. Settings' @@ -15858,102 +15881,102 @@ msgstr "" #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Max signups allowed per hour" -msgstr "" +msgstr "Số lượt đăng ký tối đa được phép mỗi giờ" -#: frappe/core/doctype/doctype/doctype.py:1371 +#: frappe/core/doctype/doctype/doctype.py:1374 msgid "Max width for type Currency is 100px in row {0}" msgstr "" #. Option for the 'Function' (Select) field in DocType 'Number Card' #: frappe/desk/doctype/number_card/number_card.json msgid "Maximum" -msgstr "" +msgstr "Tối đa" -#: frappe/core/doctype/file/file.py:342 +#: frappe/core/doctype/file/file.py:343 msgid "Maximum Attachment Limit of {0} has been reached for {1} {2}." -msgstr "" +msgstr "Đã đạt đến Giới hạn đính kèm tối đa {0} cho {1} {2}." #: frappe/public/js/frappe/form/sidebar/attachments.js:38 msgid "Maximum attachment limit of {0} has been reached." -msgstr "" +msgstr "Đã đạt tới giới hạn đính kèm tối đa {0}." -#: frappe/model/rename_doc.py:689 +#: frappe/model/rename_doc.py:692 msgid "Maximum {0} rows allowed" -msgstr "" +msgstr "Cho phép tối đa {0} hàng" #. Option for the 'Attending' (Select) field in DocType 'Event' #. Option for the 'Attending' (Select) field in DocType 'Event Participants' #: frappe/desk/doctype/event/event.json #: frappe/desk/doctype/event_participants/event_participants.json msgid "Maybe" -msgstr "" +msgstr "Có lẽ" -#: frappe/public/js/frappe/list/base_list.js:946 +#: frappe/public/js/frappe/list/base_list.js:948 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:168 msgid "Me" -msgstr "" +msgstr "Tôi" #: frappe/core/page/permission_manager/permission_manager_help.html:14 msgid "Meaning of Different Permission Types" -msgstr "" +msgstr "Ý nghĩa của các loại quyền khác nhau" #. Option for the 'Priority' (Select) field in DocType 'ToDo' #. Label of the medium (Data) field in DocType 'Web Page View' #: frappe/desk/doctype/todo/todo.json -#: frappe/public/js/frappe/form/sidebar/assign_to.js:224 -#: frappe/public/js/frappe/utils/utils.js:2016 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:232 +#: frappe/public/js/frappe/utils/utils.js:2026 #: frappe/website/doctype/web_page_view/web_page_view.json #: frappe/website/report/website_analytics/website_analytics.js:40 msgid "Medium" -msgstr "" +msgstr "Trung bình" #. Option for the 'Type' (Select) field in DocType 'Communication' #. Option for the 'Event Category' (Select) field in DocType 'Event' #: frappe/core/doctype/communication/communication.json #: frappe/desk/doctype/event/event.json msgid "Meeting" -msgstr "" +msgstr "Cuộc họp" #: frappe/email/doctype/notification/notification.js:210 #: frappe/integrations/doctype/webhook/webhook.js:96 msgid "Meets Condition?" -msgstr "" +msgstr "Đáp ứng điều kiện?" #. Group in Email Group's connections #: frappe/email/doctype/email_group/email_group.json msgid "Members" -msgstr "" +msgstr "Thành viên" #. Label of the cache_memory_usage (Data) field in DocType 'System Health #. Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Memory Usage" -msgstr "" +msgstr "Sử dụng bộ nhớ" #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.py:63 msgid "Memory Usage in MB" -msgstr "" +msgstr "Mức sử dụng bộ nhớ tính bằng MB" #. Option for the 'Type' (Select) field in DocType 'Notification Log' #: frappe/desk/doctype/notification_log/notification_log.json msgid "Mention" -msgstr "" +msgstr "Đề cập đến" #. Label of the enable_email_mention (Check) field in DocType 'Notification #. Settings' #: frappe/desk/doctype/notification_settings/notification_settings.json msgid "Mentions" -msgstr "" +msgstr "Đề cập" -#: frappe/public/js/frappe/ui/page.html:58 -#: frappe/public/js/frappe/ui/page.js:173 +#: frappe/public/js/frappe/ui/page.html:59 +#: frappe/public/js/frappe/ui/page.js:174 msgid "Menu" -msgstr "" +msgstr "Trình đơn" #: frappe/public/js/frappe/form/toolbar.js:270 -#: frappe/public/js/frappe/model/model.js:705 +#: frappe/public/js/frappe/model/model.js:717 msgid "Merge with existing" -msgstr "" +msgstr "Hợp nhất với" #: frappe/utils/nestedset.py:320 msgid "Merging is only possible between Group-to-Group or Leaf Node-to-Leaf Node" @@ -15988,55 +16011,55 @@ msgstr "" #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json #: frappe/www/message.html:3 msgid "Message" -msgstr "" +msgstr "Tin nhắn" #: frappe/public/js/frappe/ui/messages.js:274 frappe/utils/messages.py:81 msgctxt "Default title of the message dialog" msgid "Message" -msgstr "" +msgstr "Thông điệp" #. Label of the message_examples (HTML) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Message Examples" -msgstr "" +msgstr "Ví dụ về tin nhắn" #. Label of the message_id (Small Text) field in DocType 'Communication' #. Label of the message_id (Small Text) field in DocType 'Email Queue' #: frappe/core/doctype/communication/communication.json #: frappe/email/doctype/email_queue/email_queue.json msgid "Message ID" -msgstr "" +msgstr "ID tin nhắn" #. Label of the message_parameter (Data) field in DocType 'SMS Settings' #: frappe/core/doctype/sms_settings/sms_settings.json msgid "Message Parameter" -msgstr "" +msgstr "Thông số tin nhắn" #: frappe/templates/includes/contact.js:36 msgid "Message Sent" -msgstr "" +msgstr "Tin nhắn đã gửi" #. Label of the message_type (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Message Type" -msgstr "" +msgstr "Loại tin nhắn" -#: frappe/public/js/frappe/views/communication.js:1018 +#: frappe/public/js/frappe/views/communication.js:1019 msgid "Message clipped" -msgstr "" +msgstr "Tin nhắn đã bị cắt bớt" -#: frappe/email/doctype/email_account/email_account.py:344 +#: frappe/email/doctype/email_account/email_account.py:345 msgid "Message from server: {0}" -msgstr "" +msgstr "Tin nhắn từ máy chủ: {0}" #: frappe/automation/doctype/auto_repeat/auto_repeat.js:107 msgid "Message not setup" -msgstr "" +msgstr "Tin nhắn chưa được thiết lập" #. Description of the 'Success message' (Text) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Message to be displayed on successful completion" -msgstr "" +msgstr "Thông báo sẽ được hiển thị khi hoàn thành thành công" #. Label of the message_id (Code) field in DocType 'Unhandled Email' #: frappe/email/doctype/unhandled_email/unhandled_email.json @@ -16046,7 +16069,7 @@ msgstr "" #. Label of the messages (Code) field in DocType 'Data Import Log' #: frappe/core/doctype/data_import_log/data_import_log.json msgid "Messages" -msgstr "" +msgstr "Tin nhắn" #. Label of the meta_section (Section Break) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json @@ -16097,7 +16120,7 @@ msgstr "" #: frappe/core/doctype/error_log/error_log.json #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "Metadata" -msgstr "" +msgstr "Siêu dữ liệu" #. Label of the method (Data) field in DocType 'Access Log' #. Label of the method (Data) field in DocType 'API Request Log' @@ -16116,80 +16139,80 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/notification/notification.json msgid "Method" -msgstr "" +msgstr "Phương pháp" -#: frappe/__init__.py:465 +#: frappe/__init__.py:467 msgid "Method Not Allowed" -msgstr "" +msgstr "Phương pháp không được phép" #: frappe/desk/doctype/number_card/number_card.py:74 msgid "Method is required to create a number card" -msgstr "" +msgstr "Cần có phương thức để tạo thẻ số" #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Mid Center" -msgstr "" +msgstr "Trung tâm giữa" #. Label of the middle_name (Data) field in DocType 'Contact' #. Label of the middle_name (Data) field in DocType 'User' #: frappe/contacts/doctype/contact/contact.json #: frappe/core/doctype/user/user.json msgid "Middle Name" -msgstr "" +msgstr "Tên đệm" #. Label of a field in the edit-profile Web Form #: frappe/core/web_form/edit_profile/edit_profile.json msgid "Middle Name (Optional)" -msgstr "" +msgstr "Tên đệm (Tùy chọn)" #. Name of a DocType #: frappe/automation/doctype/milestone/milestone.json msgid "Milestone" -msgstr "" +msgstr "Cột mốc" #. Label of the milestone_tracker (Link) field in DocType 'Milestone' #. Name of a DocType #: frappe/automation/doctype/milestone/milestone.json #: frappe/automation/doctype/milestone_tracker/milestone_tracker.json msgid "Milestone Tracker" -msgstr "" +msgstr "Trình theo dõi cột mốc" #. Option for the 'Function' (Select) field in DocType 'Number Card' #: frappe/desk/doctype/number_card/number_card.json msgid "Minimum" -msgstr "" +msgstr "Tối thiểu" #. Label of the minimum_password_score (Select) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Minimum Password Score" -msgstr "" +msgstr "Điểm mật khẩu tối thiểu" #. Label of the minor (Int) field in DocType 'Package Release' #: frappe/core/doctype/package_release/package_release.json msgid "Minor" -msgstr "" +msgstr "Nhỏ" #: frappe/public/js/frappe/form/controls/duration.js:30 msgctxt "Duration" msgid "Minutes" -msgstr "" +msgstr "Phút" #. Option for the 'Send Alert On' (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Minutes After" -msgstr "" +msgstr "Phút Sau" #. Option for the 'Send Alert On' (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Minutes Before" -msgstr "" +msgstr "Phút Trước" #. Label of the minutes_offset (Int) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Minutes Offset" -msgstr "" +msgstr "Phút bù trừ" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:103 #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:108 @@ -16197,46 +16220,46 @@ msgstr "" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:125 #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:335 msgid "Misconfigured" -msgstr "" +msgstr "Bị định cấu hình sai" #: frappe/desk/page/setup_wizard/install_fixtures.py:49 msgid "Miss" -msgstr "" +msgstr "Cô" #: frappe/desk/form/meta.py:197 msgid "Missing DocType" -msgstr "" +msgstr "Thiếu Loại tài liệu" -#: frappe/core/doctype/doctype/doctype.py:1555 +#: frappe/core/doctype/doctype/doctype.py:1558 msgid "Missing Field" -msgstr "" +msgstr "Trường bị thiếu" #: frappe/public/js/frappe/form/save.js:192 msgid "Missing Fields" -msgstr "" +msgstr "Thiếu trường" #: frappe/email/doctype/auto_email_report/auto_email_report.py:133 msgid "Missing Filters Required" -msgstr "" +msgstr "Thiếu bộ lọc bắt buộc" #: frappe/desk/form/assign_to.py:110 msgid "Missing Permission" -msgstr "" +msgstr "Thiếu quyền" #: frappe/www/update-password.html:134 frappe/www/update-password.html:141 msgid "Missing Value" -msgstr "" +msgstr "Thiếu giá trị" #: frappe/public/js/frappe/ui/field_group.js:129 #: frappe/public/js/frappe/widgets/widget_dialog.js:374 #: frappe/public/js/workflow_builder/store.js:97 #: frappe/workflow/doctype/workflow/workflow.js:71 msgid "Missing Values Required" -msgstr "" +msgstr "Thiếu giá trị bắt buộc" #: frappe/www/login.py:107 msgid "Mobile" -msgstr "" +msgstr "Điện thoại di động" #. Label of the mobile_no (Data) field in DocType 'Contact' #. Label of the mobile_no (Data) field in DocType 'User' @@ -16250,12 +16273,12 @@ msgstr "" #. Label of a field in the edit-profile Web Form #: frappe/core/web_form/edit_profile/edit_profile.json msgid "Mobile Number" -msgstr "" +msgstr "Số điện thoại di động" #. Label of the modal_trigger (Check) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Modal Trigger" -msgstr "" +msgstr "Kích hoạt phương thức" #. Label of the module (Data) field in DocType 'Block Module' #. Label of the module (Link) field in DocType 'DocType' @@ -16292,12 +16315,12 @@ 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:953 +#: frappe/public/js/frappe/utils/utils.js:964 #: frappe/website/doctype/web_form/web_form.json #: frappe/website/doctype/web_template/web_template.json #: frappe/website/doctype/website_theme/website_theme.json msgid "Module" -msgstr "" +msgstr "Mô-đun" #. Label of the module (Link) field in DocType 'Server Script' #. Label of the module (Link) field in DocType 'Client Script' @@ -16310,7 +16333,7 @@ msgstr "" #: frappe/custom/doctype/property_setter/property_setter.json #: frappe/website/doctype/web_page/web_page.json msgid "Module (for export)" -msgstr "" +msgstr "Mô-đun (để xuất)" #. Name of a DocType #. Label of a Link in the Build Workspace @@ -16318,60 +16341,60 @@ msgstr "" #: frappe/core/doctype/module_def/module_def.json #: frappe/core/workspace/build/build.json msgid "Module Def" -msgstr "" +msgstr "Định nghĩa mô-đun" #. Label of the module_html (HTML) field in DocType 'Module Profile' #: frappe/core/doctype/module_profile/module_profile.json msgid "Module HTML" -msgstr "" +msgstr "Mô-đun HTML" #. Label of the module_name (Data) field in DocType 'Module Def' #: frappe/core/doctype/module_def/module_def.json msgid "Module Name" -msgstr "" +msgstr "Tên mô-đun" #. Label of a Link in the Build Workspace #. Name of a DocType #: frappe/core/workspace/build/build.json #: frappe/desk/doctype/module_onboarding/module_onboarding.json msgid "Module Onboarding" -msgstr "" +msgstr "Giới thiệu mô-đun" #. Name of a DocType #. Label of the module_profile (Link) field in DocType 'User' #: frappe/core/doctype/module_profile/module_profile.json #: frappe/core/doctype/user/user.json msgid "Module Profile" -msgstr "" +msgstr "Hồ sơ mô-đun" #. Label of the module_profile_name (Data) field in DocType 'Module Profile' #: frappe/core/doctype/module_profile/module_profile.json msgid "Module Profile Name" -msgstr "" +msgstr "Tên hồ sơ mô-đun" #: frappe/desk/doctype/module_onboarding/module_onboarding.py:73 msgid "Module onboarding progress reset" -msgstr "" +msgstr "Thiết lập lại tiến trình tích hợp mô-đun" #: frappe/custom/doctype/customize_form/customize_form.js:250 msgid "Module to Export" -msgstr "" +msgstr "Mô-đun để xuất" #: frappe/modules/utils.py:323 msgid "Module {} not found" -msgstr "" +msgstr "Không tìm thấy mô-đun {}" #. Group in Package's connections #. Label of a Card Break in the Build Workspace #: frappe/core/doctype/package/package.json #: frappe/core/workspace/build/build.json msgid "Modules" -msgstr "" +msgstr "Mô-đun" #. Label of the modules_html (HTML) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Modules HTML" -msgstr "" +msgstr "Mô-đun HTML" #. Option for the 'Day' (Select) field in DocType 'Assignment Rule Day' #. Option for the 'Day' (Select) field in DocType 'Auto Repeat Day' @@ -16387,7 +16410,7 @@ msgstr "" #: frappe/desk/doctype/event/event.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Monday" -msgstr "" +msgstr "Thứ hai" #. Description of a Card Break in the Build Workspace #: frappe/core/workspace/build/build.json @@ -16397,11 +16420,11 @@ msgstr "" #. Option for the 'Font' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Monospace" -msgstr "" +msgstr "Không gian đơn" -#: frappe/public/js/frappe/views/calendar/calendar.js:280 +#: frappe/public/js/frappe/views/calendar/calendar.js:282 msgid "Month" -msgstr "" +msgstr "Tháng" #. Option for the 'Frequency' (Select) field in DocType 'Auto Repeat' #. Option for the 'Frequency' (Select) field in DocType 'Scheduled Job Type' @@ -16421,14 +16444,14 @@ msgstr "" #: frappe/public/js/frappe/utils/common.js:409 #: frappe/website/report/website_analytics/website_analytics.js:25 msgid "Monthly" -msgstr "" +msgstr "Hàng tháng" #. 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 "Monthly Long" -msgstr "" +msgstr "Dài hàng tháng" #: frappe/public/js/frappe/form/link_selector.js:39 #: frappe/public/js/frappe/form/multi_select_dialog.js:45 @@ -16436,16 +16459,16 @@ msgstr "" #: frappe/public/js/frappe/ui/toolbar/search.js:285 #: frappe/public/js/frappe/ui/toolbar/search.js:300 #: frappe/public/js/frappe/widgets/chart_widget.js:729 -#: frappe/templates/includes/list/list.html:25 +#: frappe/templates/includes/list/list.html:27 #: frappe/templates/includes/search_template.html:13 msgid "More" -msgstr "" +msgstr "Thêm" #. Label of the section_break_6gd5 (Section Break) field in DocType 'Permission #. Log' #: frappe/core/doctype/permission_log/permission_log.json msgid "More Info" -msgstr "" +msgstr "Thêm thông tin" #. Label of the more_info (Section Break) field in DocType 'Contact' #. Label of the additional_info (Section Break) field in DocType 'Activity Log' @@ -16459,41 +16482,41 @@ msgstr "" #: frappe/core/doctype/user/user.json #: frappe/core/web_form/edit_profile/edit_profile.json msgid "More Information" -msgstr "" +msgstr "Thêm thông tin" #: frappe/website/doctype/help_article/templates/help_article.html:19 #: frappe/website/doctype/help_article/templates/help_article.html:33 msgid "More articles on {0}" -msgstr "" +msgstr "Các bài viết khác về {0}" #. Description of the 'Footer' (Text Editor) field in DocType 'About Us #. Settings' #: frappe/website/doctype/about_us_settings/about_us_settings.json msgid "More content for the bottom of the page." -msgstr "" +msgstr "Thêm nội dung cho cuối trang." #: frappe/public/js/frappe/ui/sort_selector.js:199 msgid "Most Used" -msgstr "" +msgstr "Được sử dụng nhiều nhất" #: frappe/utils/password.py:75 msgid "Most probably your password is too long." -msgstr "" +msgstr "Rất có thể mật khẩu của bạn quá dài." #: frappe/core/doctype/communication/communication.js:86 #: frappe/core/doctype/communication/communication.js:194 #: frappe/core/doctype/communication/communication.js:212 #: frappe/public/js/frappe/form/grid_row_form.js:44 msgid "Move" -msgstr "" +msgstr "Di chuyển" #: frappe/public/js/frappe/form/grid_row.js:196 msgid "Move To" -msgstr "" +msgstr "Di chuyển đến" #: frappe/core/doctype/communication/communication.js:104 msgid "Move To Trash" -msgstr "" +msgstr "Chuyển vào thùng rác" #: frappe/public/js/form_builder/components/Section.vue:295 msgid "Move current and all subsequent sections to a new tab" @@ -16501,19 +16524,19 @@ msgstr "" #: frappe/public/js/frappe/form/form.js:179 msgid "Move cursor to above row" -msgstr "" +msgstr "Di chuyển con trỏ lên hàng trên" #: frappe/public/js/frappe/form/form.js:183 msgid "Move cursor to below row" -msgstr "" +msgstr "Di chuyển con trỏ xuống hàng bên dưới" #: frappe/public/js/frappe/form/form.js:187 msgid "Move cursor to next column" -msgstr "" +msgstr "Di chuyển con trỏ đến cột tiếp theo" #: frappe/public/js/frappe/form/form.js:191 msgid "Move cursor to previous column" -msgstr "" +msgstr "Di chuyển con trỏ đến cột trước" #: frappe/public/js/form_builder/components/Section.vue:294 msgid "Move sections to new tab" @@ -16525,12 +16548,12 @@ msgstr "" #: frappe/public/js/frappe/form/grid_row.js:171 msgid "Move to Row Number" -msgstr "" +msgstr "Di chuyển đến số hàng" #. Description of the 'Next on Click' (Check) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Move to next step when clicked inside highlighted area." -msgstr "" +msgstr "Chuyển sang bước tiếp theo khi nhấp vào bên trong vùng được đánh dấu." #. Description of the 'Parent Element Selector' (Data) field in DocType 'Form #. Tour Step' @@ -16540,7 +16563,7 @@ msgstr "" #: frappe/desk/page/setup_wizard/install_fixtures.py:43 msgid "Mr" -msgstr "" +msgstr "Ông" #: frappe/desk/page/setup_wizard/install_fixtures.py:47 msgid "Mrs" @@ -16548,11 +16571,11 @@ msgstr "" #: frappe/desk/page/setup_wizard/install_fixtures.py:44 msgid "Ms" -msgstr "" +msgstr "Cô" #: frappe/utils/nestedset.py:344 msgid "Multiple root nodes not allowed." -msgstr "" +msgstr "Nhiều nút gốc không được phép." #. Description of the 'Import from Google Sheets' (Data) field in DocType 'Data #. Import' @@ -16571,20 +16594,20 @@ msgstr "" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Must be of type \"Attach Image\"" -msgstr "" +msgstr "Phải thuộc loại \"Đính kèm hình ảnh\"" #: frappe/desk/query_report.py:211 msgid "Must have report permission to access this report." -msgstr "" +msgstr "Phải có quyền báo cáo để truy cập báo cáo này." #: frappe/core/doctype/report/report.py:156 msgid "Must specify a Query to run" -msgstr "" +msgstr "Phải chỉ định một Truy vấn để chạy" #. Label of the mute_sounds (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Mute Sounds" -msgstr "" +msgstr "Tắt âm thanh" #: frappe/desk/page/setup_wizard/install_fixtures.py:45 msgid "Mx" @@ -16595,11 +16618,11 @@ msgstr "" #: frappe/website/doctype/website_settings/website_settings.py:181 #: frappe/www/me.html:8 frappe/www/update_password.py:10 msgid "My Account" -msgstr "" +msgstr "Tài khoản của tôi" #: frappe/public/js/frappe/file_uploader/FileUploader.vue:57 msgid "My Device" -msgstr "" +msgstr "Thiết bị của tôi" #. Option for the 'Database Engine' (Select) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -16608,13 +16631,13 @@ msgstr "" #: frappe/workflow/doctype/workflow/workflow.js:19 msgid "NOTE: If you add states or transitions in the table, it will be reflected in the Workflow Builder but you will have to position them manually. Also Workflow Builder is currently in BETA." -msgstr "" +msgstr "LƯU Ý: Nếu bạn thêm trạng thái hoặc chuyển tiếp vào bảng, nó sẽ được phản ánh trong Trình tạo quy trình công việc nhưng bạn sẽ phải định vị chúng theo cách thủ công. Ngoài ra, Trình tạo quy trình làm việc hiện có trong BETA." #. Description of the 'LDAP Group Field' (Data) field in DocType 'LDAP #. Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "NOTE: This box is due for depreciation. Please re-setup LDAP to work with the newer settings" -msgstr "" +msgstr "LƯU Ý: Hộp này đã đến hạn khấu hao. Vui lòng thiết lập lại LDAP để hoạt động với các cài đặt mới hơn" #. Label of the fieldname (Data) field in DocType 'DocField' #. Label of the fieldname (Data) field in DocType 'Customize Form Field' @@ -16631,19 +16654,19 @@ msgstr "" #: frappe/public/js/frappe/views/file/file_view.js:97 #: frappe/website/doctype/website_slideshow/website_slideshow.js:25 msgid "Name" -msgstr "" +msgstr "Tên" #: frappe/integrations/doctype/webhook/webhook.js:29 msgid "Name (Doc Name)" -msgstr "" +msgstr "Tên (Tên tài liệu)" #: frappe/desk/utils.py:24 msgid "Name already taken, please set a new name" -msgstr "" +msgstr "Tên đã được sử dụng, vui lòng đặt tên mới" -#: frappe/model/naming.py:510 +#: frappe/model/naming.py:525 msgid "Name cannot contain special characters like {0}" -msgstr "" +msgstr "Tên không được chứa các ký tự đặc biệt như {0}" #: frappe/custom/doctype/custom_field/custom_field.js:91 msgid "Name of the Document Type (DocType) you want this field to be linked to. e.g. Customer" @@ -16651,9 +16674,9 @@ msgstr "" #: frappe/printing/page/print_format_builder/print_format_builder.js:117 msgid "Name of the new Print Format" -msgstr "" +msgstr "Tên của Định dạng In mới" -#: frappe/model/naming.py:505 +#: frappe/model/naming.py:520 msgid "Name of {0} cannot be {1}" msgstr "" @@ -16670,7 +16693,7 @@ msgstr "" #: frappe/core/doctype/document_naming_rule/document_naming_rule.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Naming" -msgstr "" +msgstr "Đặt tên" #. Description of the 'Auto Name' (Data) field in DocType 'Customize Form' #: frappe/custom/doctype/customize_form/customize_form.json @@ -16684,17 +16707,17 @@ msgstr "" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Naming Rule" -msgstr "" +msgstr "Quy tắc đặt tên" #. Label of the naming_series_tab (Tab Break) field in DocType 'Document Naming #. Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Naming Series" -msgstr "" +msgstr "Chuỗi đặt tên" -#: frappe/model/naming.py:266 +#: frappe/model/naming.py:281 msgid "Naming Series mandatory" -msgstr "" +msgstr "Chuỗi đặt tên bắt buộc" #. Option for the 'Type' (Select) field in DocType 'Web Template' #. Label of the top_bar (Section Break) field in DocType 'Website Settings' @@ -16702,88 +16725,88 @@ msgstr "" #: frappe/website/doctype/web_template/web_template.json #: frappe/website/doctype/website_settings/website_settings.json msgid "Navbar" -msgstr "" +msgstr "Thanh điều hướng" #. Name of a DocType #: frappe/core/doctype/navbar_item/navbar_item.json msgid "Navbar Item" -msgstr "" +msgstr "Mục thanh điều hướng" #. Name of a DocType #. Label of a Link in the Build Workspace #: frappe/core/doctype/navbar_settings/navbar_settings.json #: frappe/core/workspace/build/build.json msgid "Navbar Settings" -msgstr "" +msgstr "Cài đặt thanh điều hướng" #. Label of the navbar_template (Link) field in DocType 'Website Settings' #. Label of the navbar_template_section (Section Break) field in DocType #. 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Navbar Template" -msgstr "" +msgstr "Mẫu thanh điều hướng" #. Label of the navbar_template_values (Code) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Navbar Template Values" -msgstr "" +msgstr "Giá trị mẫu thanh điều hướng" -#: frappe/public/js/frappe/list/list_view.js:1398 +#: frappe/public/js/frappe/list/list_view.js:1409 msgctxt "Description of a list view shortcut" msgid "Navigate list down" -msgstr "" +msgstr "Điều hướng danh sách xuống" -#: frappe/public/js/frappe/list/list_view.js:1405 +#: frappe/public/js/frappe/list/list_view.js:1416 msgctxt "Description of a list view shortcut" msgid "Navigate list up" -msgstr "" +msgstr "Điều hướng danh sách lên" -#: frappe/public/js/frappe/ui/page.js:186 +#: frappe/public/js/frappe/ui/page.js:187 msgid "Navigate to main content" -msgstr "" +msgstr "Điều hướng đến nội dung chính" #. Label of the form_navigation_buttons (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Navigation Buttons" -msgstr "" +msgstr "Các nút điều hướng" #. Label of the navigation_settings_section (Section Break) field in DocType #. 'User' #: frappe/core/doctype/user/user.json msgid "Navigation Settings" -msgstr "" +msgstr "Cài đặt điều hướng" -#: frappe/public/js/frappe/list/list_view.js:489 +#: frappe/public/js/frappe/list/list_view.js:498 msgid "Need Help?" -msgstr "" +msgstr "Cần trợ giúp?" -#: frappe/desk/doctype/workspace/workspace.py:336 +#: frappe/desk/doctype/workspace/workspace.py:343 msgid "Need Workspace Manager role to edit private workspace of other users" -msgstr "" +msgstr "Cần vai trò Trình quản lý không gian làm việc để chỉnh sửa không gian làm việc riêng tư của người dùng khác" #: frappe/model/document.py:836 msgid "Negative Value" -msgstr "" +msgstr "Giá trị âm" -#: frappe/database/query.py:687 +#: frappe/database/query.py:710 msgid "Nested filters must be provided as a list or tuple." -msgstr "" +msgstr "Các bộ lọc lồng nhau phải được cung cấp dưới dạng danh sách hoặc bộ dữ liệu." #: frappe/utils/nestedset.py:94 msgid "Nested set error. Please contact the Administrator." -msgstr "" +msgstr "Lỗi thiết lập lồng nhau. Vui lòng liên hệ với Quản trị viên." #. Name of a DocType #: frappe/printing/doctype/network_printer_settings/network_printer_settings.json msgid "Network Printer Settings" -msgstr "" +msgstr "Cài đặt máy in mạng" #. Option for the 'Show External Link Warning' (Select) field in DocType #. 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Never" -msgstr "" +msgstr "Không bao giờ" #. Option for the 'DocType View' (Select) field in DocType 'Workspace Shortcut' #. Option for the 'Send Alert On' (Select) field in DocType 'Notification' @@ -16797,43 +16820,43 @@ msgstr "" #: frappe/public/js/frappe/views/treeview.js:481 #: frappe/website/doctype/web_form/templates/web_list.html:15 msgid "New" -msgstr "" +msgstr "Mới" #: frappe/public/js/frappe/views/interaction.js:15 msgid "New Activity" -msgstr "" +msgstr "Hoạt động mới" #: frappe/public/js/frappe/form/templates/address_list.html:3 #: frappe/public/js/frappe/ui/address_autocomplete/autocomplete_dialog.js:5 #: frappe/public/js/frappe/utils/address_and_contact.js:87 msgid "New Address" -msgstr "" +msgstr "Địa chỉ mới" #: frappe/public/js/frappe/widgets/widget_dialog.js:58 msgid "New Chart" -msgstr "" +msgstr "Biểu đồ mới" #: frappe/public/js/frappe/form/templates/contact_list.html:3 msgid "New Contact" -msgstr "" +msgstr "Liên hệ mới" #: frappe/public/js/frappe/widgets/widget_dialog.js:70 msgid "New Custom Block" -msgstr "" +msgstr "Khối tùy chỉnh mới" #: frappe/printing/page/print/print.js:335 #: frappe/printing/page/print/print.js:382 msgid "New Custom Print Format" -msgstr "" +msgstr "Định dạng in tùy chỉnh mới" #. Label of the new_document_form (Check) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "New Document Form" -msgstr "" +msgstr "Mẫu văn bản mới" #: frappe/desk/doctype/notification_log/notification_log.py:154 msgid "New Document Shared {0}" -msgstr "" +msgstr "Tài liệu mới được chia sẻ {0}" #: frappe/public/js/frappe/form/footer/form_timeline.js:27 #: frappe/public/js/frappe/views/communication.js:23 @@ -16847,11 +16870,11 @@ msgstr "" #: frappe/public/js/frappe/form/footer/form_timeline.js:47 msgid "New Event" -msgstr "" +msgstr "Sự kiện mới" #: frappe/public/js/frappe/views/file/file_view.js:94 msgid "New Folder" -msgstr "" +msgstr "Thư Mục Mới" #: frappe/public/js/frappe/views/kanban/kanban_view.js:358 msgid "New Kanban Board" @@ -16859,11 +16882,11 @@ msgstr "" #: frappe/public/js/frappe/widgets/widget_dialog.js:62 msgid "New Links" -msgstr "" +msgstr "Liên kết mới" #: frappe/desk/doctype/notification_log/notification_log.py:152 msgid "New Mention on {0}" -msgstr "" +msgstr "Đề cập mới về {0}" #: frappe/www/contact.py:68 msgid "New Message from Website Contact Page" @@ -16872,66 +16895,66 @@ msgstr "" #. Label of the new_name (Read Only) field in DocType 'Deleted Document' #: frappe/core/doctype/deleted_document/deleted_document.json #: frappe/public/js/frappe/form/toolbar.js:246 -#: frappe/public/js/frappe/model/model.js:713 +#: frappe/public/js/frappe/model/model.js:725 msgid "New Name" -msgstr "" +msgstr "Tên Mới" #: frappe/desk/doctype/notification_log/notification_log.py:151 msgid "New Notification" -msgstr "" +msgstr "Thông báo mới" #: frappe/public/js/frappe/widgets/widget_dialog.js:64 msgid "New Number Card" -msgstr "" +msgstr "Thẻ Số Mới" #: frappe/public/js/frappe/widgets/widget_dialog.js:66 msgid "New Onboarding" -msgstr "" +msgstr "Giới thiệu mới" -#: frappe/core/doctype/user/user.js:183 frappe/www/update-password.html:43 +#: frappe/core/doctype/user/user.js:186 frappe/www/update-password.html:43 msgid "New Password" -msgstr "" +msgstr "Mật khẩu mới" #: frappe/printing/page/print/print.js:307 #: frappe/printing/page/print/print.js:361 #: frappe/printing/page/print_format_builder_beta/print_format_builder_beta.js:61 msgid "New Print Format Name" -msgstr "" +msgstr "Tên định dạng in mới" #: frappe/public/js/frappe/widgets/widget_dialog.js:68 msgid "New Quick List" -msgstr "" +msgstr "Danh sách nhanh mới" -#: frappe/public/js/frappe/views/reports/report_view.js:1380 +#: frappe/public/js/frappe/views/reports/report_view.js:1386 msgid "New Report name" -msgstr "" +msgstr "Tên báo cáo mới" #. Label of the new_role (Data) field in DocType 'Role Replication' #: frappe/core/doctype/role_replication/role_replication.json msgid "New Role" -msgstr "" +msgstr "Vai Trò Mới" #: frappe/public/js/frappe/widgets/widget_dialog.js:60 msgid "New Shortcut" -msgstr "" +msgstr "Phím Tắt Mới" #. Label of the new_users (Int) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "New Users (Last 30 days)" -msgstr "" +msgstr "Người dùng mới (30 ngày qua)" #: frappe/core/doctype/version/version_view.html:75 #: frappe/core/doctype/version/version_view.html:140 msgid "New Value" -msgstr "" +msgstr "Giá trị mới" #: frappe/workflow/page/workflow_builder/workflow_builder.js:61 msgid "New Workflow Name" -msgstr "" +msgstr "Tên quy trình công việc mới" #: frappe/public/js/frappe/views/workspace/workspace.js:452 msgid "New Workspace" -msgstr "" +msgstr "Không gian làm việc mới" #. Description of the 'Allowed Public Client Origins' (Small Text) field in #. DocType 'OAuth Settings' @@ -16939,13 +16962,15 @@ msgstr "" msgid "New line separated list of allowed public client URLs (eg https://frappe.io), or * to accept all.\n" "
\n" "Public clients are restricted by default." -msgstr "" +msgstr "Danh sách URL khách hàng công cộng được phép được phân tách bằng dòng mới (ví dụ: https://frappe.io) hoặc * để chấp nhận tất cả.\n" +"
\n" +"Các máy khách công cộng bị hạn chế theo mặc định." #. Description of the 'Scopes Supported' (Small Text) field in DocType 'OAuth #. Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "New line separated list of scope values." -msgstr "" +msgstr "Danh sách các giá trị phạm vi được phân tách bằng dòng mới." #. Description of the 'Contacts' (Small Text) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json @@ -16954,30 +16979,30 @@ msgstr "" #: frappe/www/update-password.html:92 msgid "New password cannot be same as old password" -msgstr "" +msgstr "Mật khẩu mới không được giống mật khẩu cũ" #: frappe/utils/change_log.py:389 msgid "New updates are available" -msgstr "" +msgstr "Có bản cập nhật mới" #. Description of the 'Disable signups' (Check) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "New users will have to be manually registered by system managers." -msgstr "" +msgstr "Người dùng mới sẽ phải được người quản lý hệ thống đăng ký thủ công." #. Description of the 'Set Value' (Small Text) field in DocType 'Property #. Setter' #: frappe/custom/doctype/property_setter/property_setter.json msgid "New value to be set" -msgstr "" +msgstr "Giá trị mới được đặt" #: frappe/public/js/frappe/form/quick_entry.js:180 #: frappe/public/js/frappe/form/toolbar.js:47 #: frappe/public/js/frappe/form/toolbar.js:234 #: frappe/public/js/frappe/form/toolbar.js:249 #: frappe/public/js/frappe/form/toolbar.js:597 -#: frappe/public/js/frappe/model/model.js:612 +#: frappe/public/js/frappe/model/model.js:624 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:178 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:179 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:228 @@ -16987,38 +17012,38 @@ msgstr "" #: frappe/public/js/frappe/widgets/widget_dialog.js:72 #: frappe/website/doctype/web_form/web_form.py:439 msgid "New {0}" -msgstr "" +msgstr "Mới {0}" #: frappe/public/js/frappe/views/reports/query_report.js:394 msgid "New {0} Created" -msgstr "" +msgstr "Mới {0} Đã tạo" #: frappe/public/js/frappe/views/reports/query_report.js:386 msgid "New {0} {1} added to Dashboard {2}" -msgstr "" +msgstr "{0} {1} mới được thêm vào Trang tổng quan {2}" #: frappe/public/js/frappe/views/reports/query_report.js:391 msgid "New {0} {1} created" -msgstr "" +msgstr "{0} {1} mới được tạo" #: frappe/automation/doctype/auto_repeat/auto_repeat.py:416 msgid "New {0}: {1}" -msgstr "" +msgstr "Mới {0}: {1}" #: frappe/utils/change_log.py:375 msgid "New {} releases for the following apps are available" -msgstr "" +msgstr "Đã có bản phát hành {} mới cho các ứng dụng sau" #: frappe/core/doctype/user/user.py:856 msgid "Newly created user {0} has no roles enabled." -msgstr "" +msgstr "Người dùng mới được tạo {0} chưa bật vai trò nào." #. Name of a role #: frappe/email/doctype/email_group/email_group.json #: frappe/email/doctype/email_group_member/email_group_member.json #: frappe/website/doctype/utm_campaign/utm_campaign.json msgid "Newsletter Manager" -msgstr "" +msgstr "Người quản lý bản tin" #: frappe/public/js/frappe/form/form_tour.js:14 #: frappe/public/js/frappe/form/form_tour.js:324 @@ -17028,28 +17053,28 @@ msgstr "" #: frappe/templates/includes/slideshow.html:38 frappe/website/utils.py:262 #: frappe/website/web_template/slideshow/slideshow.html:44 msgid "Next" -msgstr "" +msgstr "Tiếp theo" #: frappe/public/js/frappe/ui/slides.js:373 msgctxt "Go to next slide" msgid "Next" -msgstr "" +msgstr "Tiếp theo" #: frappe/public/js/frappe/ui/filters/filter.js:683 msgid "Next 14 Days" -msgstr "" +msgstr "14 Ngày Tiếp Theo" #: frappe/public/js/frappe/ui/filters/filter.js:687 msgid "Next 30 Days" -msgstr "" +msgstr "30 ngày tiếp theo" #: frappe/public/js/frappe/ui/filters/filter.js:703 msgid "Next 6 Months" -msgstr "" +msgstr "6 Tháng Tiếp Theo" #: frappe/public/js/frappe/ui/filters/filter.js:679 msgid "Next 7 Days" -msgstr "" +msgstr "7 ngày tiếp theo" #. Label of the next_action_email_template (Link) field in DocType 'Workflow #. Document State' @@ -17059,77 +17084,77 @@ msgstr "" #: frappe/core/doctype/success_action/success_action.js:44 msgid "Next Actions" -msgstr "" +msgstr "Hành động tiếp theo" #. Label of the next_actions_html (HTML) field in DocType 'Success Action' #: frappe/core/doctype/success_action/success_action.json msgid "Next Actions HTML" -msgstr "" +msgstr "Hành động tiếp theo HTML" #: frappe/public/js/frappe/form/toolbar.js:357 msgid "Next Document" -msgstr "" +msgstr "Tài liệu tiếp theo" #. Label of the next_execution (Datetime) field in DocType 'Scheduled Job Type' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json msgid "Next Execution" -msgstr "" +msgstr "Thực hiện tiếp theo" #. Label of the next_form_tour (Link) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Next Form Tour" -msgstr "" +msgstr "Chuyến tham quan biểu mẫu tiếp theo" #: frappe/public/js/frappe/ui/filters/filter.js:695 msgid "Next Month" -msgstr "" +msgstr "Tháng tới" #: frappe/public/js/frappe/ui/filters/filter.js:699 msgid "Next Quarter" -msgstr "" +msgstr "Quý tiếp theo" #. Label of the next_schedule_date (Date) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json msgid "Next Schedule Date" -msgstr "" +msgstr "Ngày lịch tiếp theo" #: frappe/automation/doctype/auto_repeat/auto_repeat_schedule.html:6 msgid "Next Scheduled Date" -msgstr "" +msgstr "Ngày dự kiến ​​tiếp theo" #. Label of the next_state (Link) field in DocType 'Workflow Transition' #: frappe/workflow/doctype/workflow_transition/workflow_transition.json msgid "Next State" -msgstr "" +msgstr "Bang tiếp theo" #. Label of the next_step_condition (Code) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Next Step Condition" -msgstr "" +msgstr "Điều kiện bước tiếp theo" #. Label of the next_sync_token (Password) field in DocType 'Google Calendar' #. Label of the next_sync_token (Password) field in DocType 'Google Contacts' #: frappe/integrations/doctype/google_calendar/google_calendar.json #: frappe/integrations/doctype/google_contacts/google_contacts.json msgid "Next Sync Token" -msgstr "" +msgstr "Mã thông báo đồng bộ hóa tiếp theo" #: frappe/public/js/frappe/ui/filters/filter.js:691 msgid "Next Week" -msgstr "" +msgstr "Tuần tới" #: frappe/public/js/frappe/ui/filters/filter.js:707 msgid "Next Year" -msgstr "" +msgstr "Năm tới" #: frappe/public/js/frappe/form/workflow.js:45 msgid "Next actions" -msgstr "" +msgstr "Hành động tiếp theo" #. Label of the next_on_click (Check) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Next on Click" -msgstr "" +msgstr "Tiếp theo Nhấp vào" #. Option for the 'Standard' (Select) field in DocType 'Page' #. Option for the 'Is Standard' (Select) field in DocType 'Report' @@ -17147,27 +17172,27 @@ 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:568 -#: frappe/public/js/frappe/list/base_list.js:948 +#: frappe/public/js/frappe/form/controls/link.js:579 +#: frappe/public/js/frappe/list/base_list.js:950 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:170 #: frappe/public/js/frappe/views/reports/query_report.js:47 #: frappe/website/doctype/help_article/templates/help_article.html:26 msgid "No" -msgstr "" +msgstr "Không" #: frappe/public/js/frappe/ui/filters/filter.js:545 msgctxt "Checkbox is not checked" msgid "No" -msgstr "" +msgstr "Không" #: frappe/public/js/frappe/ui/messages.js:37 msgctxt "Dismiss confirmation dialog" msgid "No" -msgstr "" +msgstr "Không" #: frappe/www/third_party_apps.html:56 msgid "No Active Sessions" -msgstr "" +msgstr "Không có phiên hoạt động" #. Label of the no_copy (Check) field in DocType 'DocField' #. Label of the no_copy (Check) field in DocType 'Custom Field' @@ -17176,7 +17201,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "No Copy" -msgstr "" +msgstr "Không Sao Chép" #: frappe/core/doctype/data_export/exporter.py:162 #: frappe/email/doctype/auto_email_report/auto_email_report.py:309 @@ -17186,11 +17211,11 @@ msgstr "" #: frappe/public/js/frappe/utils/datatable.js:10 #: frappe/public/js/frappe/widgets/chart_widget.js:57 msgid "No Data" -msgstr "" +msgstr "Không có dữ liệu" #: frappe/public/js/frappe/widgets/quick_list_widget.js:134 msgid "No Data..." -msgstr "" +msgstr "Không có dữ liệu..." #: frappe/public/js/frappe/views/inbox/inbox_view.js:176 msgid "No Email Account" @@ -17210,11 +17235,11 @@ msgstr "" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:364 msgid "No Entry for the User {0} found within LDAP!" -msgstr "" +msgstr "Không có mục nhập nào cho Người dùng {0} được tìm thấy trong LDAP!" #: frappe/public/js/frappe/widgets/chart_widget.js:407 msgid "No Filters Set" -msgstr "" +msgstr "Không có bộ lọc nào được đặt" #: frappe/integrations/doctype/google_calendar/google_calendar.py:372 msgid "No Google Calendar Event to sync." @@ -17222,7 +17247,7 @@ msgstr "" #: frappe/public/js/frappe/ui/capture.js:263 msgid "No Images" -msgstr "" +msgstr "Không có hình ảnh" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:366 msgid "No LDAP User found for email: {0}" @@ -17237,7 +17262,7 @@ msgstr "" #: frappe/public/js/workflow_builder/components/StateNode.vue:47 #: frappe/public/js/workflow_builder/store.js:51 msgid "No Label" -msgstr "" +msgstr "Không có Nhãn" #: frappe/printing/page/print/print.js:782 #: frappe/printing/page/print/print.js:863 @@ -17245,95 +17270,95 @@ msgstr "" #: frappe/public/js/frappe/list/bulk_operations.js:170 #: frappe/utils/weasyprint.py:52 msgid "No Letterhead" -msgstr "" +msgstr "Không có tiêu đề thư" -#: frappe/model/naming.py:487 +#: frappe/model/naming.py:502 msgid "No Name Specified for {0}" -msgstr "" +msgstr "Không có tên cụ thể cho {0}" #: frappe/public/js/frappe/ui/notifications/notifications.js:355 msgid "No New notifications" -msgstr "" +msgstr "Không có thông báo mới" -#: frappe/core/doctype/doctype/doctype.py:1792 +#: frappe/core/doctype/doctype/doctype.py:1795 msgid "No Permissions Specified" -msgstr "" +msgstr "Không có quyền được chỉ định" #: frappe/core/page/permission_manager/permission_manager.js:200 msgid "No Permissions set for this criteria." -msgstr "" +msgstr "Không có quyền nào được đặt cho tiêu chí này." #: frappe/core/page/dashboard_view/dashboard_view.js:93 msgid "No Permitted Charts" -msgstr "" +msgstr "Không có biểu đồ được phép" #: frappe/core/page/dashboard_view/dashboard_view.js:92 msgid "No Permitted Charts on this Dashboard" -msgstr "" +msgstr "Không có biểu đồ nào được phép trên Bảng điều khiển này" #: frappe/printing/doctype/print_settings/print_settings.js:13 msgid "No Preview" -msgstr "" +msgstr "Không có bản xem trước" #: frappe/printing/page/print/print.js:786 msgid "No Preview Available" -msgstr "" +msgstr "Không có bản xem trước" #: frappe/printing/page/print/print.js:941 msgid "No Printer is Available." -msgstr "" +msgstr "Không có máy in nào khả dụng." #: frappe/core/doctype/rq_worker/rq_worker_list.js:3 msgid "No RQ Workers connected. Try restarting the bench." -msgstr "" +msgstr "Không có Công nhân RQ nào được kết nối. Hãy thử khởi động lại băng ghế dự bị." #: frappe/public/js/frappe/form/link_selector.js:143 msgid "No Results" -msgstr "" +msgstr "Không có kết quả" #: frappe/public/js/frappe/ui/toolbar/search.js:51 msgid "No Results found" -msgstr "" +msgstr "Không tìm thấy kết quả" #: frappe/core/doctype/user/user.py:857 msgid "No Roles Specified" -msgstr "" +msgstr "Không có vai trò nào được chỉ định" #: frappe/public/js/frappe/views/kanban/kanban_view.js:358 msgid "No Select Field Found" -msgstr "" +msgstr "Không tìm thấy trường chọn" #: frappe/core/doctype/recorder/recorder.py:179 msgid "No Suggestions" -msgstr "" +msgstr "Không có đề xuất" -#: frappe/desk/reportview.py:710 +#: frappe/desk/reportview.py:711 msgid "No Tags" -msgstr "" +msgstr "Không có thẻ" #: frappe/public/js/frappe/ui/notifications/notifications.js:482 msgid "No Upcoming Events" -msgstr "" +msgstr "Không có sự kiện sắp tới" #: frappe/public/js/frappe/form/templates/address_list.html:43 msgid "No address added yet." -msgstr "" +msgstr "Chưa có địa chỉ nào được thêm vào." #: frappe/email/doctype/notification/notification.js:246 msgid "No alerts for today" -msgstr "" +msgstr "Không có thông báo nào cho ngày hôm nay" #: frappe/core/doctype/recorder/recorder.py:178 msgid "No automatic optimization suggestions available." -msgstr "" +msgstr "Không có đề xuất tối ưu hóa tự động nào." #: frappe/public/js/frappe/form/save.js:36 msgid "No changes in document" -msgstr "" +msgstr "Không có thay đổi nào trong tài liệu" #: frappe/public/js/frappe/views/workspace/workspace.js:756 msgid "No changes made" -msgstr "" +msgstr "Không có thay đổi nào được thực hiện" #: frappe/model/rename_doc.py:369 msgid "No changes made because old and new name are the same." @@ -17341,11 +17366,11 @@ msgstr "" #: frappe/custom/doctype/doctype_layout/doctype_layout.js:59 msgid "No changes to sync" -msgstr "" +msgstr "Không có thay đổi nào để đồng bộ hóa" #: frappe/core/doctype/data_import/importer.py:298 msgid "No changes to update" -msgstr "" +msgstr "Không có thay đổi nào để cập nhật" #: frappe/templates/includes/comments/comments.html:4 msgid "No comments yet." @@ -17353,19 +17378,19 @@ msgstr "Chưa có bình luận nào." #: frappe/public/js/frappe/form/templates/contact_list.html:91 msgid "No contacts added yet." -msgstr "" +msgstr "Chưa có liên hệ nào được thêm vào." #: frappe/automation/doctype/auto_repeat/auto_repeat.py:469 msgid "No contacts linked to document" -msgstr "" +msgstr "Không có liên hệ nào được liên kết với tài liệu" #: frappe/website/doctype/web_form/web_form.js:180 msgid "No currency fields in {0}" -msgstr "" +msgstr "Không có trường tiền tệ trong {0}" #: frappe/desk/query_report.py:382 msgid "No data to export" -msgstr "" +msgstr "Không có dữ liệu để xuất" #: frappe/contacts/doctype/address/address.py:245 msgid "No default Address Template found. Please create a new one from Setup > Printing and Branding > Address Template." @@ -17373,7 +17398,7 @@ msgstr "" #: frappe/public/js/frappe/ui/toolbar/search.js:71 msgid "No documents found tagged with {0}" -msgstr "" +msgstr "Không tìm thấy tài liệu nào được gắn thẻ {0}" #: frappe/public/js/frappe/views/inbox/inbox_view.js:21 msgid "No email account associated with the User. Please add an account under User > Email Inbox." @@ -17385,7 +17410,7 @@ msgstr "" #: frappe/core/doctype/data_import/data_import.js:504 msgid "No failed logs" -msgstr "" +msgstr "Không có nhật ký nào bị lỗi" #: frappe/public/js/frappe/views/kanban/kanban_view.js:385 msgid "No fields found that can be used as a Kanban Column. Use the Customize Form to add a Custom Field of type \"Select\"." @@ -17393,32 +17418,32 @@ msgstr "" #: frappe/utils/file_manager.py:143 msgid "No file attached" -msgstr "" +msgstr "Không có tập tin đính kèm" -#: frappe/public/js/frappe/list/base_list.js:1075 +#: frappe/public/js/frappe/list/base_list.js:1077 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:100 msgid "No filters found" -msgstr "" +msgstr "Không tìm thấy bộ lọc" #: frappe/public/js/frappe/ui/filters/filter_list.js:299 msgid "No filters selected" -msgstr "" +msgstr "Không có bộ lọc nào được chọn" #: frappe/desk/form/utils.py:109 msgid "No further records" -msgstr "" +msgstr "Không có hồ sơ nào thêm" #: frappe/templates/includes/search_template.html:49 msgid "No matching records. Search something new" -msgstr "" +msgstr "Không có hồ sơ phù hợp. Tìm kiếm cái gì đó mới" #: frappe/public/js/frappe/web_form/web_form_list.js:162 msgid "No more items to display" -msgstr "" +msgstr "Không còn mục nào để hiển thị" #: frappe/utils/password_strength.py:45 msgid "No need for symbols, digits, or uppercase letters." -msgstr "" +msgstr "Không cần ký hiệu, chữ số hoặc chữ in hoa." #: frappe/integrations/doctype/google_contacts/google_contacts.py:195 msgid "No new Google Contacts synced." @@ -17426,102 +17451,102 @@ msgstr "" #: frappe/printing/page/print_format_builder/print_format_builder.js:415 msgid "No of Columns" -msgstr "" +msgstr "Số cột" #. Label of the no_of_requested_sms (Int) field in DocType 'SMS Log' #: frappe/core/doctype/sms_log/sms_log.json msgid "No of Requested SMS" -msgstr "" +msgstr "Số lượng SMS được yêu cầu" #. Label of the no_of_rows (Int) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "No of Rows (Max 500)" -msgstr "" +msgstr "Số hàng (Tối đa 500)" #. Label of the no_of_sent_sms (Int) field in DocType 'SMS Log' #: frappe/core/doctype/sms_log/sms_log.json msgid "No of Sent SMS" -msgstr "" +msgstr "Số lượng SMS đã gửi" -#: frappe/__init__.py:620 frappe/client.py:119 frappe/client.py:161 +#: frappe/__init__.py:622 frappe/client.py:119 frappe/client.py:161 msgid "No permission for {0}" -msgstr "" +msgstr "Không được phép đối với {0}" #: frappe/public/js/frappe/form/form.js:1182 msgctxt "{0} = verb, {1} = object" msgid "No permission to '{0}' {1}" -msgstr "" +msgstr "Không được phép '{0}' {1}" -#: frappe/model/db_query.py:1035 +#: frappe/model/db_query.py:1046 msgid "No permission to read {0}" -msgstr "" +msgstr "Không được phép đọc {0}" #: frappe/share.py:221 msgid "No permission to {0} {1} {2}" -msgstr "" +msgstr "Không được phép {0} {1} {2}" #: frappe/core/doctype/user_permission/user_permission_list.js:175 msgid "No records deleted" -msgstr "" +msgstr "Không có hồ sơ nào bị xóa" #: frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.py:115 msgid "No records present in {0}" -msgstr "" +msgstr "Không có bản ghi nào trong {0}" #: frappe/public/js/frappe/list/list_sidebar_stat.html:11 msgid "No records tagged." -msgstr "" +msgstr "Không có bản ghi nào được gắn thẻ." #: frappe/public/js/frappe/data_import/data_exporter.js:226 msgid "No records will be exported" -msgstr "" +msgstr "Sẽ không có bản ghi nào được xuất" #: frappe/public/js/frappe/form/grid.js:66 msgid "No rows" -msgstr "" +msgstr "Không có hàng" -#: frappe/public/js/frappe/list/list_view.js:2406 +#: frappe/public/js/frappe/list/list_view.js:2417 msgid "No rows selected" -msgstr "" +msgstr "Không có hàng nào được chọn" #: frappe/email/doctype/notification/notification.py:137 msgid "No subject" -msgstr "" +msgstr "Không có chủ đề" #: frappe/www/printview.py:464 msgid "No template found at path: {0}" -msgstr "" +msgstr "Không tìm thấy mẫu tại đường dẫn: {0}" #: frappe/core/page/permission_manager/permission_manager.js:364 msgid "No user has the role {0}" -msgstr "" +msgstr "Không có người dùng nào có vai trò {0}" #: frappe/public/js/frappe/form/controls/multiselect_list.js:276 -#: frappe/public/js/frappe/utils/utils.js:988 +#: frappe/public/js/frappe/utils/utils.js:999 msgid "No values to show" -msgstr "" +msgstr "Không có giá trị nào để hiển thị" #: frappe/website/web_template/discussions/discussions.html:2 msgid "No {0}" -msgstr "" +msgstr "Không {0}" #: frappe/public/js/frappe/web_form/web_form_list.js:234 msgid "No {0} found" -msgstr "" +msgstr "Không tìm thấy {0}" -#: frappe/public/js/frappe/list/list_view.js:503 +#: frappe/public/js/frappe/list/list_view.js:512 msgid "No {0} found with matching filters. Clear filters to see all {0}." -msgstr "" +msgstr "Không tìm thấy {0} nào có bộ lọc phù hợp. Xóa bộ lọc để xem tất cả {0}." #: frappe/public/js/frappe/views/inbox/inbox_view.js:171 msgid "No {0} mail" -msgstr "" +msgstr "Không có thư {0}" #: frappe/public/js/form_builder/utils.js:117 #: frappe/public/js/frappe/form/grid_row.js:259 msgctxt "Title of the 'row number' column" msgid "No." -msgstr "" +msgstr "Không." #. Option for the 'Provider' (Select) field in DocType 'Geolocation Settings' #: frappe/integrations/doctype/geolocation_settings/geolocation_settings.json @@ -17535,11 +17560,11 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Non Negative" -msgstr "" +msgstr "Không Tiêu Cực" #: frappe/desk/page/setup_wizard/install_fixtures.py:33 msgid "Non-Conforming" -msgstr "" +msgstr "Không phù hợp" #. Option for the 'Token Endpoint Auth Method' (Select) field in DocType 'OAuth #. Client' @@ -17549,30 +17574,30 @@ msgstr "Không" #: frappe/public/js/frappe/form/workflow.js:36 msgid "None: End of Workflow" -msgstr "" +msgstr "Không có: Kết thúc quy trình làm việc" #. Label of the normalized_copies (Int) field in DocType 'Recorder Query' #: frappe/core/doctype/recorder_query/recorder_query.json msgid "Normalized Copies" -msgstr "" +msgstr "Bản sao được chuẩn hóa" #. Label of the normalized_query (Data) field in DocType 'Recorder Query' #: frappe/core/doctype/recorder_query/recorder_query.json msgid "Normalized Query" -msgstr "" +msgstr "Truy vấn được chuẩn hóa" #: frappe/core/doctype/user/user.py:1079 #: frappe/templates/includes/login/login.js:255 frappe/utils/oauth.py:300 msgid "Not Allowed" -msgstr "" +msgstr "Không được phép" #: frappe/templates/includes/login/login.js:257 msgid "Not Allowed: Disabled User" -msgstr "" +msgstr "Không được phép: Người dùng bị vô hiệu hóa" #: frappe/public/js/frappe/ui/filters/filter.js:36 msgid "Not Ancestors Of" -msgstr "" +msgstr "Không Phải Tổ Tiên Của" #: frappe/public/js/frappe/ui/filters/filter.js:34 msgid "Not Descendants Of" @@ -17580,82 +17605,82 @@ msgstr "" #: frappe/public/js/frappe/ui/filters/filter.js:17 msgid "Not Equals" -msgstr "" +msgstr "Không bằng" #: frappe/app.py:390 frappe/www/404.html:3 msgid "Not Found" -msgstr "" +msgstr "Không tìm thấy" #. Label of the not_helpful (Int) field in DocType 'Help Article' #: frappe/website/doctype/help_article/help_article.json msgid "Not Helpful" -msgstr "" +msgstr "Không hữu ích" #: frappe/public/js/frappe/ui/filters/filter.js:21 msgid "Not In" -msgstr "" +msgstr "Không có trong" #: frappe/public/js/frappe/ui/filters/filter.js:19 msgid "Not Like" -msgstr "" +msgstr "Không thích" #: frappe/public/js/frappe/form/linked_with.js:45 msgid "Not Linked to any record" -msgstr "" +msgstr "Không liên kết với bất kỳ bản ghi nào" #. Label of the not_nullable (Check) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Not Nullable" -msgstr "" +msgstr "Không thể rỗng" -#: frappe/__init__.py:547 frappe/app.py:383 frappe/desk/calendar.py:28 +#: frappe/__init__.py:549 frappe/app.py:383 frappe/desk/calendar.py:28 #: frappe/public/js/frappe/web_form/webform_script.js:15 #: frappe/website/doctype/web_form/web_form.py:779 #: frappe/website/page_renderers/not_permitted_page.py:22 #: frappe/www/login.py:193 frappe/www/qrcode.py:22 frappe/www/qrcode.py:25 #: frappe/www/qrcode.py:37 msgid "Not Permitted" -msgstr "" +msgstr "Không được phép" #: frappe/desk/query_report.py:630 msgid "Not Permitted to read {0}" -msgstr "" +msgstr "Không được phép đọc {0}" #: frappe/website/doctype/web_form/web_form_list.js:7 #: frappe/website/doctype/web_page/web_page_list.js:7 msgid "Not Published" -msgstr "" +msgstr "Chưa được xuất bản" #: frappe/public/js/frappe/form/toolbar.js:316 -#: frappe/public/js/frappe/form/toolbar.js:852 +#: frappe/public/js/frappe/form/toolbar.js:853 #: frappe/public/js/frappe/model/indicator.js:28 #: frappe/public/js/frappe/views/kanban/kanban_view.js:183 -#: frappe/public/js/frappe/views/reports/report_view.js:203 +#: frappe/public/js/frappe/views/reports/report_view.js:205 #: frappe/public/js/print_format_builder/print_format_builder.bundle.js:39 -#: frappe/website/doctype/web_form/templates/web_form.html:85 +#: frappe/website/doctype/web_form/templates/web_form.html:94 msgid "Not Saved" -msgstr "" +msgstr "Chưa được lưu" #: frappe/core/doctype/error_log/error_log_list.js:7 msgid "Not Seen" -msgstr "" +msgstr "Chưa Xem" #. Option for the 'Status' (Select) field in DocType 'Email Queue' #. Option for the 'Status' (Select) field in DocType 'Email Queue Recipient' #: frappe/email/doctype/email_queue/email_queue.json #: frappe/email/doctype/email_queue_recipient/email_queue_recipient.json msgid "Not Sent" -msgstr "" +msgstr "Chưa được gửi" -#: frappe/public/js/frappe/list/base_list.js:944 +#: frappe/public/js/frappe/list/base_list.js:946 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:166 msgid "Not Set" -msgstr "" +msgstr "Chưa được đặt" #: frappe/public/js/frappe/ui/filters/filter.js:607 msgctxt "Field value is not set" msgid "Not Set" -msgstr "" +msgstr "Không đặt" #: frappe/utils/csvutils.py:102 msgid "Not a valid Comma Separated Value (CSV File)" @@ -17667,7 +17692,7 @@ msgstr "" #: frappe/model/workflow.py:135 msgid "Not a valid Workflow Action" -msgstr "" +msgstr "Hành động quy trình làm việc không hợp lệ" #: frappe/templates/includes/login/login.js:253 msgid "Not a valid user" @@ -17675,35 +17700,35 @@ msgstr "" #: frappe/workflow/doctype/workflow/workflow_list.js:7 msgid "Not active" -msgstr "" +msgstr "Không hoạt động" #: frappe/permissions.py:395 msgid "Not allowed for {0}: {1}" -msgstr "" +msgstr "Không được phép đối với {0}: {1}" #: frappe/email/doctype/notification/notification.py:674 msgid "Not allowed to attach {0} document, please enable Allow Print For {0} in Print Settings" -msgstr "" +msgstr "Không được phép đính kèm tài liệu {0}, vui lòng bật Cho phép in cho {0} trong Cài đặt in" #: frappe/core/doctype/doctype/doctype.py:337 msgid "Not allowed to create custom Virtual DocType." -msgstr "" +msgstr "Không được phép tạo Loại tài liệu ảo tùy chỉnh." #: frappe/www/printview.py:165 msgid "Not allowed to print cancelled documents" -msgstr "" +msgstr "Không được phép in tài liệu bị hủy" #: frappe/www/printview.py:162 msgid "Not allowed to print draft documents" -msgstr "" +msgstr "Không được phép in văn bản nháp" #: frappe/permissions.py:225 msgid "Not allowed via controller permission check" -msgstr "" +msgstr "Không được phép thông qua kiểm tra quyền của bộ điều khiển" #: frappe/public/js/frappe/request.js:145 frappe/website/js/website.js:94 msgid "Not found" -msgstr "" +msgstr "Không tìm thấy" #: frappe/core/doctype/page/page.py:62 msgid "Not in Developer Mode" @@ -17714,41 +17739,41 @@ msgid "Not in Developer Mode! Set in site_config.json or make 'Custom' DocType." msgstr "" #: frappe/core/doctype/system_settings/system_settings.py:234 -#: frappe/public/js/frappe/request.js:157 -#: frappe/public/js/frappe/request.js:168 -#: frappe/public/js/frappe/request.js:173 +#: frappe/public/js/frappe/request.js:158 +#: frappe/public/js/frappe/request.js:169 +#: frappe/public/js/frappe/request.js:174 #: frappe/public/js/frappe/views/kanban/kanban_board.bundle.js:67 #: frappe/utils/messages.py:161 frappe/website/doctype/web_form/web_form.py:792 #: frappe/website/js/website.js:97 msgid "Not permitted" -msgstr "" +msgstr "Không được phép" #: frappe/public/js/frappe/list/list_view.js:53 msgid "Not permitted to view {0}" -msgstr "" +msgstr "Không được phép xem {0}" #: frappe/public/js/frappe/file_uploader/FileUploader.vue:623 msgid "Not permitted. {0}." -msgstr "" +msgstr "Không được phép. {0}." #. Name of a DocType #: frappe/automation/doctype/auto_repeat/auto_repeat.py:438 #: frappe/desk/doctype/note/note.json msgid "Note" -msgstr "" +msgstr "Lưu ý" #. Name of a DocType #: frappe/desk/doctype/note_seen_by/note_seen_by.json msgid "Note Seen By" -msgstr "" +msgstr "Ghi chú được xem bởi" #: frappe/www/confirm_workflow_action.html:8 msgid "Note:" -msgstr "" +msgstr "Lưu ý:" -#: frappe/public/js/frappe/utils/utils.js:776 +#: frappe/public/js/frappe/utils/utils.js:787 msgid "Note: Changing the Page Name will break previous URL to this page." -msgstr "" +msgstr "Lưu ý: Việc thay đổi Tên Trang sẽ phá vỡ URL trước đó của trang này." #: frappe/core/doctype/user/user.js:35 msgid "Note: Etc timezones have their signs reversed." @@ -17764,42 +17789,42 @@ msgstr "" #. DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Note: Multiple sessions will be allowed in case of mobile device" -msgstr "" +msgstr "Lưu ý: Sẽ được phép sử dụng nhiều phiên trong trường hợp thiết bị di động" -#: frappe/core/doctype/user/user.js:394 +#: frappe/core/doctype/user/user.js:397 msgid "Note: This will be shared with user." -msgstr "" +msgstr "Lưu ý: Điều này sẽ được chia sẻ với người dùng." #: frappe/website/web_form/request_to_delete_data/request_to_delete_data.js:8 msgid "Note: Your request for account deletion will be fulfilled within {0} hours." -msgstr "" +msgstr "Lưu ý: Yêu cầu xóa tài khoản của bạn sẽ được thực hiện trong vòng {0} giờ." #: frappe/core/doctype/data_export/exporter.py:183 msgid "Notes:" -msgstr "" +msgstr "Ghi chú:" #: frappe/public/js/frappe/ui/notifications/notifications.js:532 msgid "Nothing New" -msgstr "" +msgstr "Không có gì mới" #: frappe/public/js/frappe/form/undo_manager.js:43 msgid "Nothing left to redo" -msgstr "" +msgstr "Không còn gì để làm lại" #: frappe/public/js/frappe/form/undo_manager.js:33 msgid "Nothing left to undo" -msgstr "" +msgstr "Không còn gì để hoàn tác" #: frappe/public/js/frappe/list/base_list.js:364 #: frappe/public/js/frappe/views/reports/query_report.js:106 -#: frappe/templates/includes/list/list.html:9 +#: frappe/templates/includes/list/list.html:14 #: frappe/website/doctype/help_article/templates/help_article_list.html:21 msgid "Nothing to show" -msgstr "" +msgstr "Không có gì để hiển thị" #: frappe/core/doctype/user_permission/user_permission_list.js:129 msgid "Nothing to update" -msgstr "" +msgstr "Không có gì để cập nhật" #. Label of the notification (Tab Break) field in DocType 'Auto Repeat' #. Option for the 'Type' (Select) field in DocType 'Event Notifications' @@ -17808,46 +17833,46 @@ msgstr "" #: frappe/core/doctype/communication/mixins.py:142 #: frappe/desk/doctype/event_notifications/event_notifications.json #: frappe/email/doctype/notification/notification.json -#: frappe/public/js/frappe/ui/sidebar/sidebar.js:294 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:314 msgid "Notification" -msgstr "" +msgstr "Thông báo" #. Name of a DocType #: frappe/desk/doctype/notification_log/notification_log.json msgid "Notification Log" -msgstr "" +msgstr "Nhật ký thông báo" #. Name of a DocType #: frappe/email/doctype/notification_recipient/notification_recipient.json msgid "Notification Recipient" -msgstr "" +msgstr "Người nhận thông báo" #. Name of a DocType #: frappe/desk/doctype/notification_settings/notification_settings.json #: frappe/public/js/frappe/ui/notifications/notifications.js:41 msgid "Notification Settings" -msgstr "" +msgstr "Cài đặt thông báo" #. Name of a DocType #: frappe/desk/doctype/notification_subscribed_document/notification_subscribed_document.json msgid "Notification Subscribed Document" -msgstr "" +msgstr "Thông báo Tài liệu đã đăng ký" #: frappe/public/js/frappe/form/templates/timeline_message_box.html:8 msgid "Notification sent to" -msgstr "" +msgstr "Thông báo được gửi tới" #: frappe/email/doctype/notification/notification.py:561 msgid "Notification: customer {0} has no Mobile number set" -msgstr "" +msgstr "Thông báo: khách hàng {0} chưa đặt số di động" #: frappe/email/doctype/notification/notification.py:547 msgid "Notification: document {0} has no {1} number set (field: {2})" -msgstr "" +msgstr "Thông báo: tài liệu {0} không có bộ số {1} (trường: {2})" #: frappe/email/doctype/notification/notification.py:556 msgid "Notification: user {0} has no Mobile number set" -msgstr "" +msgstr "Thông báo: người dùng {0} chưa đặt số điện thoại di động" #. Label of the notifications (Check) field in DocType 'User' #. Label of the notifications_tab (Tab Break) field in DocType 'Event' @@ -17856,11 +17881,11 @@ msgstr "" #: frappe/public/js/frappe/ui/notifications/notifications.js:68 #: frappe/public/js/frappe/ui/notifications/notifications.js:227 msgid "Notifications" -msgstr "" +msgstr "Thông báo" #: frappe/public/js/frappe/ui/notifications/notifications.js:339 msgid "Notifications Disabled" -msgstr "" +msgstr "Thông báo bị tắt" #. Description of the 'Default Outgoing' (Check) field in DocType 'Email #. Account' @@ -17871,7 +17896,7 @@ msgstr "" #. Label of the notify_on_every_login (Check) field in DocType 'Note' #: frappe/desk/doctype/note/note.json msgid "Notify Users On Every Login" -msgstr "" +msgstr "Thông báo cho người dùng mỗi lần đăng nhập" #. Label of the notify_by_email (Check) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json @@ -17886,33 +17911,33 @@ msgstr "" #. Label of the notify_if_unreplied (Check) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Notify if unreplied" -msgstr "" +msgstr "Thông báo nếu không được trả lời" #. Label of the unreplied_for_mins (Int) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Notify if unreplied for (in mins)" -msgstr "" +msgstr "Thông báo nếu không được trả lời trong (trong phút)" #. Label of the notify_on_login (Check) field in DocType 'Note' #: frappe/desk/doctype/note/note.json msgid "Notify users with a popup when they log in" -msgstr "" +msgstr "Thông báo cho người dùng bằng cửa sổ bật lên khi họ đăng nhập" #: frappe/public/js/frappe/form/controls/datetime.js:28 #: frappe/public/js/frappe/form/controls/time.js:37 msgid "Now" -msgstr "" +msgstr "Bây giờ" #. Label of the phone (Data) field in DocType 'Contact Phone' #: frappe/contacts/doctype/contact_phone/contact_phone.json msgid "Number" -msgstr "" +msgstr "Số" #. Name of a DocType #: frappe/desk/doctype/number_card/number_card.json #: frappe/public/js/frappe/widgets/widget_dialog.js:628 msgid "Number Card" -msgstr "" +msgstr "Thẻ Số" #. Name of a DocType #: frappe/desk/doctype/number_card_link/number_card_link.json @@ -17923,14 +17948,14 @@ msgstr "" #. Card' #: frappe/desk/doctype/workspace_number_card/workspace_number_card.json msgid "Number Card Name" -msgstr "" +msgstr "Số Thẻ Tên" #. Label of the number_cards_tab (Tab Break) field in DocType 'Workspace' #. Label of the number_cards (Table) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json #: frappe/public/js/frappe/widgets/widget_dialog.js:658 msgid "Number Cards" -msgstr "" +msgstr "Thẻ Số" #. Label of the number_format (Select) field in DocType 'Language' #. Label of the number_format (Select) field in DocType 'System Settings' @@ -17939,27 +17964,27 @@ msgstr "" #: frappe/core/doctype/system_settings/system_settings.json #: frappe/geo/doctype/currency/currency.json msgid "Number Format" -msgstr "" +msgstr "Định dạng số" #. Label of the backup_limit (Int) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Number of Backups" -msgstr "" +msgstr "Số lượng bản sao lưu" #. Label of the number_of_groups (Int) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Number of Groups" -msgstr "" +msgstr "Số Nhóm" #. Label of the number_of_queries (Int) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json msgid "Number of Queries" -msgstr "" +msgstr "Số lượng truy vấn" #: frappe/core/doctype/doctype/doctype.py:444 #: frappe/public/js/frappe/doctype/index.js:66 msgid "Number of attachment fields are more than {}, limit updated to {}." -msgstr "" +msgstr "Số lượng trường đính kèm nhiều hơn {}, giới hạn cập nhật ở {}." #: frappe/core/doctype/system_settings/system_settings.py:189 msgid "Number of backups must be greater than zero." @@ -17968,14 +17993,14 @@ msgstr "" #. Description of the 'Columns' (Int) field in DocType 'Customize Form Field' #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Number of columns for a field in a Grid (Total Columns in a grid should be less than 11)" -msgstr "" +msgstr "Số cột cho một trường trong Lưới (Tổng số cột trong lưới phải nhỏ hơn 11)" #. Description of the 'Columns' (Int) field in DocType 'DocField' #. Description of the 'Columns' (Int) field in DocType 'Custom Field' #: frappe/core/doctype/docfield/docfield.json #: frappe/custom/doctype/custom_field/custom_field.json msgid "Number of columns for a field in a List View or a Grid (Total Columns should be less than 11)" -msgstr "" +msgstr "Số cột cho một trường trong Chế độ xem danh sách hoặc Lưới (Tổng số cột phải nhỏ hơn 11)" #. Description of the 'Document Share Key Expiry (in Days)' (Int) field in #. DocType 'System Settings' @@ -17986,12 +18011,12 @@ msgstr "" #. Label of the cache_keys (Int) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Number of keys" -msgstr "" +msgstr "Số lượng phím" #. Label of the onsite_backups (Int) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Number of onsite backups" -msgstr "" +msgstr "Số lượng bản sao lưu tại chỗ" #. Option for the 'Method' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json @@ -18053,40 +18078,40 @@ msgstr "" #. Option for the 'Method' (Select) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json msgid "OPTIONS" -msgstr "" +msgstr "TÙY CHỌN" #: frappe/public/js/form_builder/components/Tabs.vue:190 msgid "OR" -msgstr "" +msgstr "HOẶC" #. Option for the 'Two Factor Authentication method' (Select) field in DocType #. 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "OTP App" -msgstr "" +msgstr "Ứng dụng OTP" #. Label of the otp_issuer_name (Data) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "OTP Issuer Name" -msgstr "" +msgstr "Tên tổ chức phát hành OTP" #. Label of the otp_sms_template (Small Text) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "OTP SMS Template" -msgstr "" +msgstr "Mẫu SMS OTP" #: frappe/core/doctype/system_settings/system_settings.py:168 msgid "OTP SMS Template must contain {0} placeholder to insert the OTP." -msgstr "" +msgstr "Mẫu SMS OTP phải chứa phần giữ chỗ {0} để chèn OTP." #: frappe/twofactor.py:459 msgid "OTP Secret Reset - {0}" -msgstr "" +msgstr "Đặt lại bí mật OTP - {0}" #: frappe/twofactor.py:478 msgid "OTP Secret has been reset. Re-registration will be required on next login." -msgstr "" +msgstr "Bí mật OTP đã được đặt lại. Đăng ký lại sẽ được yêu cầu vào lần đăng nhập tiếp theo." #. Description of the 'OTP SMS Template' (Small Text) field in DocType 'System #. Settings' @@ -18096,51 +18121,51 @@ msgstr "" #: frappe/templates/includes/login/login.js:354 msgid "OTP setup using OTP App was not completed. Please contact Administrator." -msgstr "" +msgstr "Thiết lập OTP bằng Ứng dụng OTP chưa hoàn tất. Vui lòng liên hệ với Quản trị viên." #. Label of the occurrences (Int) field in DocType 'System Health Report #. Errors' #: frappe/desk/doctype/system_health_report_errors/system_health_report_errors.json msgid "Occurrences" -msgstr "" +msgstr "Lần xuất hiện" #. Option for the 'SSL/TLS Mode' (Select) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "Off" -msgstr "" +msgstr "Tắt" #. Option for the 'Address Type' (Select) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Office" -msgstr "" +msgstr "Văn phòng" #. Option for the 'Social Login Provider' (Select) field in DocType 'Social #. Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Office 365" -msgstr "" +msgstr "Văn phòng 365" #: frappe/core/doctype/server_script/server_script.js:36 msgid "Official Documentation" -msgstr "" +msgstr "Tài liệu chính thức" #. Label of the offset_x (Int) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Offset X" -msgstr "" +msgstr "Bù đắp X" #. Label of the offset_y (Int) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Offset Y" -msgstr "" +msgstr "Bù đắp Y" -#: frappe/database/query.py:307 +#: frappe/database/query.py:302 msgid "Offset must be a non-negative integer" msgstr "" #: frappe/www/update-password.html:38 msgid "Old Password" -msgstr "" +msgstr "Mật khẩu cũ" #: frappe/custom/doctype/custom_field/custom_field.py:414 msgid "Old and new fieldnames are same." @@ -18150,49 +18175,49 @@ msgstr "" #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Older backups will be automatically deleted" -msgstr "" +msgstr "Các bản sao lưu cũ hơn sẽ tự động bị xóa" #. Label of the oldest_unscheduled_job (Link) field in DocType 'System Health #. Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Oldest Unscheduled Job" -msgstr "" +msgstr "Công việc đột xuất lâu đời nhất" #. Option for the 'Status' (Select) field in DocType 'Personal Data Deletion #. Request' #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.json msgid "On Hold" -msgstr "" +msgstr "Đang chờ" #. Option for the 'DocType Event' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "On Payment Authorization" -msgstr "" +msgstr "Về ủy quyền thanh toán" #. Option for the 'DocType Event' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "On Payment Charge Processed" -msgstr "" +msgstr "Về khoản phí thanh toán được xử lý" #. Option for the 'DocType Event' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "On Payment Failed" -msgstr "" +msgstr "Khi thanh toán không thành công" #. Option for the 'DocType Event' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "On Payment Mandate Acquisition Processed" -msgstr "" +msgstr "Theo ủy nhiệm thanh toán Việc mua lại đã được xử lý" #. Option for the 'DocType Event' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "On Payment Mandate Charge Processed" -msgstr "" +msgstr "Khoản phí ủy quyền thanh toán đã được xử lý" #. Option for the 'DocType Event' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "On Payment Paid" -msgstr "" +msgstr "Khi thanh toán đã thanh toán" #. Description of the 'Is Dynamic URL?' (Check) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json @@ -18202,50 +18227,50 @@ msgstr "" #: frappe/public/js/frappe/ui/filters/filter.js:66 #: frappe/public/js/frappe/ui/filters/filter.js:72 msgid "On or After" -msgstr "" +msgstr "Vào hoặc Sau" #: frappe/public/js/frappe/ui/filters/filter.js:65 #: frappe/public/js/frappe/ui/filters/filter.js:71 msgid "On or Before" -msgstr "" +msgstr "Vào hoặc Trước" -#: frappe/public/js/frappe/views/communication.js:1028 +#: frappe/public/js/frappe/views/communication.js:1029 msgid "On {0}, {1} wrote:" -msgstr "" +msgstr "Trên {0}, {1} đã viết:" #. Label of the onboard (Check) field in DocType 'Workspace Link' #: frappe/desk/doctype/workspace_link/workspace_link.json #: frappe/public/js/frappe/widgets/widget_dialog.js:335 msgid "Onboard" -msgstr "" +msgstr "Trên tàu" #: frappe/public/js/frappe/widgets/widget_dialog.js:232 msgid "Onboarding Name" -msgstr "" +msgstr "Tên giới thiệu" #. Name of a DocType #: frappe/desk/doctype/onboarding_permission/onboarding_permission.json msgid "Onboarding Permission" -msgstr "" +msgstr "Quyền giới thiệu" #. Label of the onboarding_status (Small Text) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Onboarding Status" -msgstr "" +msgstr "Trạng thái giới thiệu" #. Name of a DocType #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Onboarding Step" -msgstr "" +msgstr "Bước giới thiệu" #. Name of a DocType #: frappe/desk/doctype/onboarding_step_map/onboarding_step_map.json msgid "Onboarding Step Map" -msgstr "" +msgstr "Sơ đồ bước giới thiệu" #: frappe/public/js/frappe/widgets/onboarding_widget.js:264 msgid "Onboarding complete" -msgstr "" +msgstr "Quá trình giới thiệu hoàn tất" #. Description of the 'Is Submittable' (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -18259,19 +18284,19 @@ msgstr "" #: frappe/www/complete_signup.html:7 msgid "One Last Step" -msgstr "" +msgstr "Bước Cuối Cùng" #: frappe/twofactor.py:278 msgid "One Time Password (OTP) Registration Code from {}" -msgstr "" +msgstr "Mã đăng ký mật khẩu một lần (OTP) từ {}" #: frappe/core/doctype/data_export/exporter.py:331 msgid "One of" -msgstr "" +msgstr "Một trong" #: frappe/client.py:223 msgid "Only 200 inserts allowed in one request" -msgstr "" +msgstr "Chỉ cho phép 200 lần chèn trong một yêu cầu" #: frappe/email/doctype/email_queue/email_queue.py:91 msgid "Only Administrator can delete Email Queue" @@ -18279,7 +18304,7 @@ msgstr "" #: frappe/core/doctype/page/page.py:66 msgid "Only Administrator can edit" -msgstr "" +msgstr "Chỉ Quản trị viên mới có thể chỉnh sửa" #: frappe/core/doctype/report/report.py:76 msgid "Only Administrator can save a standard report. Please rename and save." @@ -18287,35 +18312,35 @@ msgstr "" #: frappe/recorder.py:314 msgid "Only Administrator is allowed to use Recorder" -msgstr "" +msgstr "Chỉ Quản trị viên mới được phép sử dụng Trình ghi" #. Label of the allow_edit (Link) field in DocType 'Workflow Document State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Only Allow Edit For" -msgstr "" +msgstr "Chỉ Cho phép Chỉnh sửa Đối với" -#: frappe/core/doctype/doctype/doctype.py:1649 +#: frappe/core/doctype/doctype/doctype.py:1652 msgid "Only Options allowed for Data field are:" msgstr "" #. Label of the data_modified_till (Int) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Only Send Records Updated in Last X Hours" -msgstr "" +msgstr "Chỉ gửi bản ghi được cập nhật trong X giờ qua" -#: frappe/core/doctype/file/file.py:167 +#: frappe/core/doctype/file/file.py:168 msgid "Only System Managers can make this file public." -msgstr "" +msgstr "Chỉ Người quản lý hệ thống mới có thể đặt tệp này ở chế độ công khai." #: frappe/desk/doctype/workspace/workspace.js:32 msgid "Only Workspace Manager can edit public workspaces" -msgstr "" +msgstr "Chỉ Người quản lý không gian làm việc mới có thể chỉnh sửa không gian làm việc công cộng" #. Label of the only_allow_system_managers_to_upload_public_files (Check) field #. in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Only allow System Managers to upload public files" -msgstr "" +msgstr "Chỉ cho phép Người quản lý hệ thống tải lên các tệp công khai" #: frappe/modules/utils.py:80 msgid "Only allowed to export customizations in developer mode" @@ -18323,13 +18348,13 @@ msgstr "" #: frappe/model/document.py:1287 msgid "Only draft documents can be discarded" -msgstr "" +msgstr "Chỉ có thể loại bỏ các tài liệu dự thảo" #. Label of the only_for (Link) field in DocType 'Workspace Link' #: frappe/desk/doctype/workspace_link/workspace_link.json #: frappe/public/js/frappe/widgets/widget_dialog.js:328 msgid "Only for" -msgstr "" +msgstr "Chỉ dành cho" #: frappe/core/doctype/data_export/exporter.py:192 msgid "Only mandatory fields are necessary for new records. You can delete non-mandatory columns if you wish." @@ -18338,19 +18363,19 @@ msgstr "" #: frappe/contacts/doctype/contact/contact.py:131 #: frappe/contacts/doctype/contact/contact.py:158 msgid "Only one {0} can be set as primary." -msgstr "" +msgstr "Chỉ có thể đặt một {0} làm chính." #: frappe/desk/reportview.py:360 msgid "Only reports of type Report Builder can be deleted" -msgstr "" +msgstr "Chỉ có thể xóa các báo cáo thuộc loại Trình tạo báo cáo" #: frappe/desk/reportview.py:331 msgid "Only reports of type Report Builder can be edited" -msgstr "" +msgstr "Chỉ có thể chỉnh sửa các báo cáo thuộc loại Trình tạo báo cáo" #: frappe/custom/doctype/customize_form/customize_form.py:131 msgid "Only standard DocTypes are allowed to be customized from Customize Form." -msgstr "" +msgstr "Chỉ các Loại tài liệu tiêu chuẩn mới được phép tùy chỉnh từ Biểu mẫu tùy chỉnh." #: frappe/model/delete_doc.py:283 msgid "Only the Administrator can delete a standard DocType." @@ -18358,7 +18383,7 @@ msgstr "" #: frappe/desk/form/assign_to.py:198 msgid "Only the assignee can complete this to-do." -msgstr "" +msgstr "Chỉ người được giao mới có thể hoàn thành việc cần làm này." #: frappe/email/doctype/auto_email_report/auto_email_report.py:108 msgid "Only {0} emailed reports are allowed per user." @@ -18366,7 +18391,7 @@ msgstr "" #: frappe/templates/includes/login/login.js:289 msgid "Oops! Something went wrong." -msgstr "" +msgstr "Ối! Đã xảy ra lỗi." #. Option for the 'Status' (Select) field in DocType 'Contact' #. Option for the 'Status' (Select) field in DocType 'Communication' @@ -18380,49 +18405,49 @@ msgstr "" #: frappe/desk/doctype/event/event.json frappe/desk/doctype/todo/todo.json #: frappe/workflow/doctype/workflow_action/workflow_action.json msgid "Open" -msgstr "" +msgstr "Mở" #: frappe/desk/doctype/todo/todo_list.js:14 msgctxt "Access" msgid "Open" -msgstr "" +msgstr "Mở" -#: frappe/desk/page/desktop/desktop.js:478 -#: frappe/desk/page/desktop/desktop.js:487 +#: frappe/desk/page/desktop/desktop.js:489 +#: frappe/desk/page/desktop/desktop.js:498 #: frappe/public/js/frappe/ui/keyboard.js:207 #: frappe/public/js/frappe/ui/keyboard.js:217 msgid "Open Awesomebar" -msgstr "" +msgstr "Mở Thanh tuyệt vời" #: frappe/public/js/frappe/form/templates/timeline_message_box.html:75 #: frappe/public/js/frappe/form/templates/timeline_message_box.html:96 #: frappe/public/js/frappe/form/templates/timeline_message_box.html:97 msgid "Open Communication" -msgstr "" +msgstr "Giao tiếp cởi mở" #: frappe/templates/emails/new_notification.html:10 msgid "Open Document" -msgstr "" +msgstr "Mở tài liệu" #. Label of the subscribed_documents (Table MultiSelect) field in DocType #. 'Notification Settings' #: frappe/desk/doctype/notification_settings/notification_settings.json msgid "Open Documents" -msgstr "" +msgstr "Mở tài liệu" #: frappe/public/js/frappe/ui/keyboard.js:243 msgid "Open Help" -msgstr "" +msgstr "Mở trợ giúp" #. Label of the open_reference_document (Button) field in DocType 'Notification #. Log' #: frappe/desk/doctype/notification_log/notification_log.json msgid "Open Reference Document" -msgstr "" +msgstr "Mở tài liệu tham khảo" #: frappe/public/js/frappe/ui/keyboard.js:226 msgid "Open Settings" -msgstr "" +msgstr "Mở Cài đặt" #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Open Source Applications for the Web" @@ -18436,15 +18461,15 @@ msgstr "" #. Description of the 'Quick Entry' (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Open a dialog with mandatory fields to create a new record quickly. There must be at least one mandatory field to show in dialog." -msgstr "" +msgstr "Mở hộp thoại có các trường bắt buộc để tạo bản ghi mới một cách nhanh chóng. Phải có ít nhất một trường bắt buộc để hiển thị trong hộp thoại." #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:245 msgid "Open a module or tool" -msgstr "" +msgstr "Mở một mô-đun hoặc công cụ" #: frappe/public/js/frappe/ui/keyboard.js:367 msgid "Open console" -msgstr "" +msgstr "Mở bảng điều khiển" #: frappe/public/js/print_format_builder/Preview.vue:17 msgid "Open in a new tab" @@ -18454,18 +18479,18 @@ msgstr "" msgid "Open in new tab" msgstr "" -#: frappe/public/js/frappe/list/list_view.js:1451 +#: frappe/public/js/frappe/list/list_view.js:1462 msgctxt "Description of a list view shortcut" msgid "Open list item" -msgstr "" +msgstr "Mở mục danh sách" #: frappe/core/doctype/error_log/error_log.js:15 msgid "Open reference document" -msgstr "" +msgstr "Mở tài liệu tham khảo" #: frappe/www/qrcode.html:13 msgid "Open your authentication app on your mobile phone." -msgstr "" +msgstr "Mở ứng dụng xác thực trên điện thoại di động của bạn." #: frappe/desk/doctype/todo/todo_list.js:17 #: frappe/public/js/frappe/form/templates/form_links.html:18 @@ -18480,7 +18505,7 @@ msgstr "" #: frappe/public/js/frappe/ui/toolbar/search_utils.js:340 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:341 msgid "Open {0}" -msgstr "" +msgstr "Mở {0}" #. Label of the openid_configuration (Data) field in DocType 'Connected App' #: frappe/integrations/doctype/connected_app/connected_app.json @@ -18499,18 +18524,18 @@ msgstr "" #. Option for the 'Delivery Status' (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Opened" -msgstr "" +msgstr "Đã mở" #. Label of the operation (Select) field in DocType 'Activity Log' #: frappe/core/doctype/activity_log/activity_log.json msgid "Operation" -msgstr "" +msgstr "Hoạt động" #: frappe/utils/data.py:2225 msgid "Operator must be one of {0}" msgstr "" -#: frappe/database/query.py:2127 +#: frappe/database/query.py:2206 msgid "Operator {0} requires exactly 2 arguments (left and right operands)" msgstr "" @@ -18518,25 +18543,25 @@ msgstr "" #: frappe/core/report/database_storage_usage_by_tables/database_storage_usage_by_tables.js:8 #: frappe/public/js/frappe/file_uploader/FilePreview.vue:31 msgid "Optimize" -msgstr "" +msgstr "Tối ưu hóa" #: frappe/core/doctype/file/file.js:110 msgid "Optimizing image..." -msgstr "" +msgstr "Tối ưu hóa hình ảnh..." #: frappe/custom/doctype/custom_field/custom_field.js:100 msgid "Option 1" -msgstr "" +msgstr "Phương án 1" #: frappe/custom/doctype/custom_field/custom_field.js:102 msgid "Option 2" -msgstr "" +msgstr "Phương án 2" #: frappe/custom/doctype/custom_field/custom_field.js:104 msgid "Option 3" -msgstr "" +msgstr "Phương án 3" -#: frappe/core/doctype/doctype/doctype.py:1667 +#: frappe/core/doctype/doctype/doctype.py:1670 msgid "Option {0} for field {1} is not a child table" msgstr "" @@ -18548,7 +18573,7 @@ msgstr "" #. Description of the 'Condition' (Code) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Optional: The alert will be sent if this expression is true" -msgstr "" +msgstr "Tùy chọn: Cảnh báo sẽ được gửi nếu biểu thức này đúng" #. Label of the options (Small Text) field in DocType 'DocField' #. Label of the options (Data) field in DocType 'Report Column' @@ -18568,50 +18593,50 @@ msgstr "" #: frappe/website/doctype/web_form_list_column/web_form_list_column.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Options" -msgstr "" +msgstr "Tùy chọn" -#: frappe/core/doctype/doctype/doctype.py:1395 +#: frappe/core/doctype/doctype/doctype.py:1398 msgid "Options 'Dynamic Link' type of field must point to another Link Field with options as 'DocType'" msgstr "" #. Label of the options_help (HTML) field in DocType 'Custom Field' #: frappe/custom/doctype/custom_field/custom_field.json msgid "Options Help" -msgstr "" +msgstr "Tùy chọn Trợ giúp" -#: frappe/core/doctype/doctype/doctype.py:1696 +#: frappe/core/doctype/doctype/doctype.py:1699 msgid "Options for Rating field can range from 3 to 10" -msgstr "" +msgstr "Các tùy chọn cho trường Xếp hạng có thể dao động từ 3 đến 10" #: frappe/custom/doctype/custom_field/custom_field.js:96 msgid "Options for select. Each option on a new line." -msgstr "" +msgstr "Tùy chọn để chọn. Mỗi tùy chọn trên một dòng mới." -#: frappe/core/doctype/doctype/doctype.py:1412 +#: frappe/core/doctype/doctype/doctype.py:1415 msgid "Options for {0} must be set before setting the default value." -msgstr "" +msgstr "Các tùy chọn cho {0} phải được đặt trước khi đặt giá trị mặc định." #: frappe/public/js/form_builder/store.js:205 msgid "Options is required for field {0} of type {1}" -msgstr "" +msgstr "Cần có các tùy chọn cho trường {0} thuộc loại {1}" -#: frappe/model/base_document.py:986 +#: frappe/model/base_document.py:999 msgid "Options not set for link field {0}" -msgstr "" +msgstr "Tùy chọn chưa được đặt cho trường liên kết {0}" #. Option for the 'Color' (Select) field in DocType 'DocType State' #. Option for the 'Indicator' (Select) field in DocType 'Kanban Board Column' #: frappe/core/doctype/doctype_state/doctype_state.json #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Orange" -msgstr "" +msgstr "Cam" #. Label of the order (Code) field in DocType 'Kanban Board Column' #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Order" -msgstr "" +msgstr "Đặt hàng" -#: frappe/database/query.py:1258 +#: frappe/database/query.py:1273 msgid "Order By must be a string" msgstr "" @@ -18619,26 +18644,26 @@ msgstr "" #. Label of the company_history (Table) field in DocType 'About Us Settings' #: frappe/website/doctype/about_us_settings/about_us_settings.json msgid "Org History" -msgstr "" +msgstr "Lịch sử tổ chức" #. Label of the company_history_heading (Data) field in DocType 'About Us #. Settings' #: frappe/website/doctype/about_us_settings/about_us_settings.json msgid "Org History Heading" -msgstr "" +msgstr "Tiêu đề lịch sử tổ chức" #: frappe/public/js/frappe/form/print_utils.js:22 msgid "Orientation" -msgstr "" +msgstr "Định hướng" #: frappe/core/doctype/version/version.py:241 msgid "Original" -msgstr "" +msgstr "Bản gốc" #: frappe/core/doctype/version/version_view.html:74 #: frappe/core/doctype/version/version_view.html:139 msgid "Original Value" -msgstr "" +msgstr "Giá trị gốc" #. Option for the 'Address Type' (Select) field in DocType 'Address' #. Option for the 'Type' (Select) field in DocType 'Communication' @@ -18650,18 +18675,18 @@ msgstr "" #: frappe/desk/doctype/event/event.json #: frappe/desk/page/setup_wizard/install_fixtures.py:30 msgid "Other" -msgstr "" +msgstr "Khác" #. Label of the outgoing_tab (Tab Break) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Outgoing" -msgstr "" +msgstr "Đi" #. Label of the outgoing_mail_settings (Section Break) field in DocType 'Email #. Account' #: frappe/email/doctype/email_account/email_account.json msgid "Outgoing (SMTP) Settings" -msgstr "" +msgstr "Cài đặt gửi đi (SMTP)" #. Label of the outgoing_emails_column (Column Break) field in DocType 'System #. Health Report' @@ -18674,13 +18699,13 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "Outgoing Server" -msgstr "" +msgstr "Máy chủ thư đi" #. Label of the outgoing_mail_settings (Section Break) field in DocType 'Email #. Domain' #: frappe/email/doctype/email_domain/email_domain.json msgid "Outgoing Settings" -msgstr "" +msgstr "Cài đặt gửi đi" #: frappe/email/doctype/email_domain/email_domain.py:33 msgid "Outgoing email account not correct" @@ -18689,7 +18714,7 @@ msgstr "" #. Option for the 'Service' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Outlook.com" -msgstr "" +msgstr "Outlook.com" #. Label of the output (Code) field in DocType 'Permission Inspector' #. Label of the output (Code) field in DocType 'System Console' @@ -18698,16 +18723,16 @@ msgstr "" #: frappe/desk/doctype/system_console/system_console.json #: frappe/integrations/doctype/integration_request/integration_request.json msgid "Output" -msgstr "" +msgstr "Đầu ra" #: frappe/public/js/frappe/form/templates/form_dashboard.html:5 msgid "Overview" -msgstr "" +msgstr "Tổng quan" #. Option for the 'Method' (Select) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json msgid "PATCH" -msgstr "" +msgstr "VÁ" #. Option for the 'Format' (Select) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json @@ -18715,18 +18740,18 @@ msgstr "" #: frappe/public/js/frappe/form/templates/print_layout.html:44 #: frappe/public/js/frappe/views/reports/query_report.js:1911 msgid "PDF" -msgstr "" +msgstr "PDF" -#: frappe/utils/print_format.py:148 frappe/utils/print_format.py:192 +#: frappe/utils/print_format.py:149 frappe/utils/print_format.py:193 msgid "PDF Generation in Progress" -msgstr "" +msgstr "Đang tạo PDF" #. Label of the pdf_generator (Select) field in DocType 'Print Format' #. Label of the pdf_generator (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_format/print_format.json #: frappe/printing/doctype/print_settings/print_settings.json msgid "PDF Generator" -msgstr "" +msgstr "Trình tạo PDF" #. Label of the pdf_page_height (Float) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json @@ -18736,7 +18761,7 @@ msgstr "" #. Label of the pdf_page_size (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "PDF Page Size" -msgstr "" +msgstr "Kích thước trang PDF" #. Label of the pdf_page_width (Float) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json @@ -18746,27 +18771,31 @@ msgstr "" #. Label of the pdf_settings (Section Break) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "PDF Settings" -msgstr "" +msgstr "Cài đặt PDF" -#: frappe/utils/print_format.py:334 +#: frappe/utils/print_format.py:343 msgid "PDF generation failed" -msgstr "" +msgstr "Tạo PDF không thành công" #: frappe/utils/pdf.py:107 msgid "PDF generation failed because of broken image links" -msgstr "" +msgstr "Tạo PDF không thành công do liên kết hình ảnh bị hỏng" #: frappe/printing/page/print/print.js:683 msgid "PDF generation may not work as expected." -msgstr "" +msgstr "Việc tạo PDF có thể không hoạt động như mong đợi." #: frappe/printing/page/print/print.js:601 msgid "PDF printing via \"Raw Print\" is not supported." -msgstr "" +msgstr "In PDF qua \"In thô\" không được hỗ trợ." #. Label of the pid (Data) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "PID" +msgstr "PID" + +#: frappe/email/oauth.py:75 +msgid "POP3 OAuth authentication failed for Email Account {0}" msgstr "" #. Option for the 'Method' (Select) field in DocType 'Recorder' @@ -18774,14 +18803,14 @@ msgstr "" #: frappe/core/doctype/recorder/recorder.json #: frappe/integrations/doctype/webhook/webhook.json msgid "POST" -msgstr "" +msgstr "ĐĂNG" #. Option for the 'Method' (Select) field in DocType 'Recorder' #. Option for the 'Request Method' (Select) field in DocType 'Webhook' #: frappe/core/doctype/recorder/recorder.json #: frappe/integrations/doctype/webhook/webhook.json msgid "PUT" -msgstr "" +msgstr "ĐẶT" #. Label of the package (Link) field in DocType 'Module Def' #. Name of a DocType @@ -18792,29 +18821,29 @@ msgstr "" #: frappe/core/doctype/package_release/package_release.json #: frappe/core/workspace/build/build.json frappe/www/attribution.html:34 msgid "Package" -msgstr "" +msgstr "Gói" #. Name of a DocType #. Label of a Link in the Build Workspace #: frappe/core/doctype/package_import/package_import.json #: frappe/core/workspace/build/build.json msgid "Package Import" -msgstr "" +msgstr "Nhập gói" #. Label of the package_name (Data) field in DocType 'Package' #: frappe/core/doctype/package/package.json msgid "Package Name" -msgstr "" +msgstr "Tên gói" #. Name of a DocType #: frappe/core/doctype/package_release/package_release.json msgid "Package Release" -msgstr "" +msgstr "Phát hành gói" #. Label of a Card Break in the Build Workspace #: frappe/core/workspace/build/build.json msgid "Packages" -msgstr "" +msgstr "Gói" #. Description of a Card Break in the Build Workspace #: frappe/core/workspace/build/build.json @@ -18844,29 +18873,29 @@ msgstr "" #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Page" -msgstr "" +msgstr "Trang" #. Option for the 'Fieldtype' (Select) field in DocType 'Web Form Field' #: frappe/public/js/print_format_builder/PrintFormatSection.vue:63 #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Page Break" -msgstr "" +msgstr "Ngắt trang" #. Option for the 'Content Type' (Select) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.js:92 #: frappe/website/doctype/web_page/web_page.json msgid "Page Builder" -msgstr "" +msgstr "Trình tạo trang" #. Label of the page_blocks (Table) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Page Building Blocks" -msgstr "" +msgstr "Khối xây dựng trang" #. Label of the page_html (Section Break) field in DocType 'Page' #: frappe/core/doctype/page/page.json msgid "Page HTML" -msgstr "" +msgstr "Trang HTML" #: frappe/public/js/frappe/list/bulk_operations.js:73 msgid "Page Height (in mm)" @@ -18874,42 +18903,42 @@ msgstr "" #: frappe/public/js/print_format_builder/PrintFormatControls.vue:5 msgid "Page Margins" -msgstr "" +msgstr "Lề trang" #. Label of the page_name (Data) field in DocType 'Page' #: frappe/core/doctype/page/page.json msgid "Page Name" -msgstr "" +msgstr "Tên trang" #. Label of the page_number (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json #: frappe/public/js/print_format_builder/PrintFormatControls.vue:63 msgid "Page Number" -msgstr "" +msgstr "Số trang" #. Label of the page_route (Small Text) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Page Route" -msgstr "" +msgstr "Lộ trình trang" #. Label of the view_link_in_email (Section Break) field in DocType 'Print #. Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Page Settings" -msgstr "" +msgstr "Cài đặt trang" #: frappe/public/js/frappe/ui/keyboard.js:125 msgid "Page Shortcuts" -msgstr "" +msgstr "Phím tắt trang" #: frappe/public/js/frappe/list/bulk_operations.js:66 msgid "Page Size" -msgstr "" +msgstr "Kích thước trang" #. Label of the page_title (Data) field in DocType 'About Us Settings' #: frappe/website/doctype/about_us_settings/about_us_settings.json msgid "Page Title" -msgstr "" +msgstr "Tiêu đề trang" #: frappe/public/js/frappe/list/bulk_operations.js:80 msgid "Page Width (in mm)" @@ -18917,7 +18946,7 @@ msgstr "" #: frappe/www/qrcode.py:35 msgid "Page has expired!" -msgstr "" +msgstr "Trang đã hết hạn!" #: frappe/printing/doctype/print_settings/print_settings.py:71 #: frappe/public/js/frappe/list/bulk_operations.js:106 @@ -18926,7 +18955,7 @@ msgstr "" #: frappe/public/js/frappe/views/container.js:52 frappe/www/404.html:23 msgid "Page not found" -msgstr "" +msgstr "Không tìm thấy trang" #. Description of a DocType #: frappe/website/doctype/web_page/web_page.json @@ -18938,29 +18967,29 @@ msgstr "" #: frappe/public/js/frappe/web_form/web_form.js:284 #: frappe/templates/print_formats/standard.html:34 msgid "Page {0} of {1}" -msgstr "" +msgstr "Trang {0} của {1}" #. Label of the parameter (Data) field in DocType 'SMS Parameter' #: frappe/core/doctype/sms_parameter/sms_parameter.json msgid "Parameter" -msgstr "" +msgstr "Tham số" #: frappe/public/js/frappe/model/model.js:142 #: frappe/public/js/frappe/views/workspace/workspace.js:496 msgid "Parent" -msgstr "" +msgstr "Phụ huynh" #. Label of the parent_doctype (Link) field in DocType 'DocType Link' #: frappe/core/doctype/doctype_link/doctype_link.json msgid "Parent DocType" -msgstr "" +msgstr "Loại tài liệu gốc" #. Label of the parent_document_type (Link) field in DocType 'Dashboard Chart' #. Label of the parent_document_type (Link) field in DocType 'Number Card' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/desk/doctype/number_card/number_card.json msgid "Parent Document Type" -msgstr "" +msgstr "Loại tài liệu gốc" #: frappe/desk/doctype/number_card/number_card.py:66 msgid "Parent Document Type is required to create a number card" @@ -18970,49 +18999,49 @@ msgstr "" #. Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Parent Element Selector" -msgstr "" +msgstr "Bộ chọn phần tử gốc" #. Label of the parent_fieldname (Select) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Parent Field" -msgstr "" +msgstr "Trường gốc" #. Label of the nsm_parent_field (Data) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json -#: frappe/core/doctype/doctype/doctype.py:951 +#: frappe/core/doctype/doctype/doctype.py:954 msgid "Parent Field (Tree)" -msgstr "" +msgstr "Trường gốc (Cây)" -#: frappe/core/doctype/doctype/doctype.py:957 +#: frappe/core/doctype/doctype/doctype.py:960 msgid "Parent Field must be a valid fieldname" msgstr "" #. Label of the parent_icon (Link) field in DocType 'Desktop Icon' #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Parent Icon" -msgstr "" +msgstr "Biểu tượng gốc" #. Label of the parent_label (Select) field in DocType 'Top Bar Item' #: frappe/website/doctype/top_bar_item/top_bar_item.json msgid "Parent Label" -msgstr "" +msgstr "Nhãn gốc" -#: frappe/core/doctype/doctype/doctype.py:1215 +#: frappe/core/doctype/doctype/doctype.py:1218 msgid "Parent Missing" -msgstr "" +msgstr "Phụ huynh Thiếu" #. Label of the parent_page (Link) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "Parent Page" -msgstr "" +msgstr "Trang mẹ" #: frappe/core/doctype/data_export/exporter.py:24 msgid "Parent Table" -msgstr "" +msgstr "Bảng cha" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.py:404 msgid "Parent document type is required to create a dashboard chart" -msgstr "" +msgstr "Cần có loại tài liệu gốc để tạo biểu đồ trang tổng quan" #: frappe/core/doctype/data_export/exporter.py:253 msgid "Parent is the name of the document to which the data will get added to." @@ -19024,7 +19053,7 @@ msgstr "" #: frappe/permissions.py:841 msgid "Parentfield not specified in {0}: {1}" -msgstr "" +msgstr "Trường cha không được chỉ định trong {0}: {1}" #: frappe/client.py:519 msgid "Parenttype, Parent and Parentfield are required to insert a child record" @@ -19038,28 +19067,28 @@ msgstr "" #. Option for the 'Status' (Select) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Partial Success" -msgstr "" +msgstr "Thành công một phần" #. Option for the 'Status' (Select) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json msgid "Partially Sent" -msgstr "" +msgstr "Đã gửi một phần" #. Label of the participants_tab (Tab Break) field in DocType 'Event' #: frappe/desk/doctype/event/event.js:30 frappe/desk/doctype/event/event.json msgid "Participants" -msgstr "" +msgstr "Người tham gia" #. Option for the 'SocketIO Ping Check' (Select) field in DocType 'System #. Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Pass" -msgstr "" +msgstr "Vượt qua" #. Option for the 'Status' (Select) field in DocType 'Contact' #: frappe/contacts/doctype/contact/contact.json msgid "Passive" -msgstr "" +msgstr "Bị động" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Label of the password_settings (Section Break) field in DocType 'System @@ -19071,16 +19100,16 @@ msgstr "" #. Option for the 'Fieldtype' (Select) field in DocType 'Web Form Field' #: frappe/core/doctype/docfield/docfield.json #: frappe/core/doctype/system_settings/system_settings.json -#: frappe/core/doctype/user/user.js:170 frappe/core/doctype/user/user.js:217 -#: frappe/core/doctype/user/user.js:237 +#: frappe/core/doctype/user/user.js:173 frappe/core/doctype/user/user.js:220 +#: frappe/core/doctype/user/user.js:240 #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json -#: frappe/desk/page/setup_wizard/setup_wizard.js:493 +#: frappe/desk/page/setup_wizard/setup_wizard.js:487 #: frappe/email/doctype/email_account/email_account.json #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/www/login.html:22 msgid "Password" -msgstr "" +msgstr "Mật khẩu" #: frappe/core/doctype/user/user.py:1144 msgid "Password Email Sent" @@ -19088,33 +19117,33 @@ msgstr "" #: frappe/core/doctype/user/user.py:500 msgid "Password Reset" -msgstr "" +msgstr "Đặt lại mật khẩu" #. Label of the password_reset_limit (Int) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Password Reset Link Generation Limit" -msgstr "" +msgstr "Đặt lại mật khẩu Giới hạn tạo liên kết" #: frappe/public/js/frappe/form/grid_row.js:895 msgid "Password cannot be filtered" -msgstr "" +msgstr "Không thể lọc mật khẩu" #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:360 msgid "Password changed successfully." -msgstr "" +msgstr "Mật khẩu đã được thay đổi thành công." #. Label of the password (Password) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "Password for Base DN" -msgstr "" +msgstr "Mật khẩu cho DN cơ sở" -#: frappe/email/doctype/email_account/email_account.py:189 +#: frappe/email/doctype/email_account/email_account.py:190 msgid "Password is required or select Awaiting Password" -msgstr "" +msgstr "Cần có mật khẩu hoặc chọn Đang chờ mật khẩu" #: frappe/www/update-password.html:94 msgid "Password is valid. 👍" -msgstr "" +msgstr "Mật khẩu hợp lệ. 👍" #: frappe/public/js/frappe/desk.js:212 msgid "Password missing in Email Account" @@ -19122,11 +19151,11 @@ msgstr "" #: frappe/utils/password.py:47 msgid "Password not found for {0} {1} {2}" -msgstr "" +msgstr "Không tìm thấy mật khẩu cho {0} {1} {2}" #: frappe/core/doctype/user/user.py:1310 msgid "Password requirements not met" -msgstr "" +msgstr "Yêu cầu về mật khẩu không được đáp ứng" #: frappe/core/doctype/user/user.py:1143 msgid "Password reset instructions have been sent to {}'s email" @@ -19134,43 +19163,43 @@ msgstr "" #: frappe/www/update-password.html:191 msgid "Password set" -msgstr "" +msgstr "Mật khẩu đã được thiết lập" #: frappe/auth.py:264 msgid "Password size exceeded the maximum allowed size" -msgstr "" +msgstr "Kích thước mật khẩu vượt quá kích thước tối đa cho phép" #: frappe/core/doctype/user/user.py:929 msgid "Password size exceeded the maximum allowed size." -msgstr "" +msgstr "Kích thước mật khẩu vượt quá kích thước tối đa cho phép." #: frappe/www/update-password.html:93 msgid "Passwords do not match" -msgstr "" +msgstr "Mật khẩu không khớp" -#: frappe/core/doctype/user/user.js:203 +#: frappe/core/doctype/user/user.js:206 msgid "Passwords do not match!" -msgstr "" +msgstr "Mật khẩu không khớp!" #: frappe/public/js/frappe/views/file/file_view.js:151 msgid "Paste" -msgstr "" +msgstr "Dán" #. Label of the patch (Int) field in DocType 'Package Release' #. Label of the patch (Code) field in DocType 'Patch Log' #: frappe/core/doctype/package_release/package_release.json #: frappe/core/doctype/patch_log/patch_log.json msgid "Patch" -msgstr "" +msgstr "Bản vá" #. Name of a DocType #: frappe/core/doctype/patch_log/patch_log.json msgid "Patch Log" -msgstr "" +msgstr "Nhật ký bản vá" #: frappe/modules/patch_handler.py:136 msgid "Patch type {} not found in patches.txt" -msgstr "" +msgstr "Không tìm thấy loại bản vá {} trong Patch.txt" #. Label of the path (Data) field in DocType 'API Request Log' #. Label of the path (Small Text) field in DocType 'Package Release' @@ -19184,27 +19213,27 @@ msgstr "" #: frappe/website/doctype/web_page_view/web_page_view.json #: frappe/website/report/website_analytics/website_analytics.js:35 msgid "Path" -msgstr "" +msgstr "Đường dẫn" #. Label of the local_ca_certs_file (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "Path to CA Certs File" -msgstr "" +msgstr "Đường dẫn đến tệp chứng chỉ CA" #. Label of the local_server_certificate_file (Data) field in DocType 'LDAP #. Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "Path to Server Certificate" -msgstr "" +msgstr "Đường dẫn đến chứng chỉ máy chủ" #. Label of the local_private_key_file (Data) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "Path to private Key File" -msgstr "" +msgstr "Đường dẫn đến tệp khóa riêng" #: frappe/modules/utils.py:252 msgid "Path {0} is not within module {1}" -msgstr "" +msgstr "Đường dẫn {0} không nằm trong mô-đun {1}" #: frappe/website/path_resolver.py:230 msgid "Path {0} it not a valid path" @@ -19213,12 +19242,12 @@ msgstr "" #. Label of the payload_count (Int) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Payload Count" -msgstr "" +msgstr "Số lượng tải trọng" #. Label of the peak_memory_usage (Int) field in DocType 'Prepared Report' #: frappe/core/doctype/prepared_report/prepared_report.json msgid "Peak Memory Usage" -msgstr "" +msgstr "Mức sử dụng bộ nhớ cao nhất" #. Option for the 'Status' (Select) field in DocType 'Data Import' #. Option for the 'Contribution Status' (Select) field in DocType 'Translation' @@ -19230,13 +19259,13 @@ msgstr "" #: frappe/core/doctype/user_invitation/user_invitation.json #: frappe/website/doctype/personal_data_deletion_step/personal_data_deletion_step.json msgid "Pending" -msgstr "" +msgstr "Đang chờ xử lý" #. Option for the 'Status' (Select) field in DocType 'Personal Data Deletion #. Request' #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.json msgid "Pending Approval" -msgstr "" +msgstr "Đang chờ phê duyệt" #. Label of the pending_emails (Int) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json @@ -19247,13 +19276,13 @@ msgstr "" #. Queue' #: frappe/desk/doctype/system_health_report_queue/system_health_report_queue.json msgid "Pending Jobs" -msgstr "" +msgstr "Công việc đang chờ xử lý" #. Option for the 'Status' (Select) field in DocType 'Personal Data Deletion #. Request' #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.json msgid "Pending Verification" -msgstr "" +msgstr "Đang chờ xác minh" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -19262,7 +19291,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Percent" -msgstr "" +msgstr "Phần trăm" #. Option for the 'Type' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json @@ -19273,7 +19302,7 @@ msgstr "" #. Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Period" -msgstr "" +msgstr "Thời kỳ" #. Label of the permlevel (Int) field in DocType 'DocField' #. Label of the permlevel (Int) field in DocType 'Customize Form Field' @@ -19285,61 +19314,61 @@ msgstr "" #. Option for the 'Address Type' (Select) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Permanent" -msgstr "" +msgstr "Thường trực" #: frappe/public/js/frappe/form/form.js:1068 msgid "Permanently Cancel {0}?" -msgstr "" +msgstr "Hủy vĩnh viễn {0}?" #: frappe/public/js/frappe/form/form.js:1114 msgid "Permanently Discard {0}?" -msgstr "" +msgstr "Loại bỏ vĩnh viễn {0}?" #: frappe/public/js/frappe/form/form.js:901 msgid "Permanently Submit {0}?" -msgstr "" +msgstr "Gửi vĩnh viễn {0}?" -#: frappe/public/js/frappe/model/model.js:684 +#: frappe/public/js/frappe/model/model.js:696 msgid "Permanently delete {0}?" -msgstr "" +msgstr "Xóa vĩnh viễn {0}?" #: frappe/core/page/permission_manager/permission_manager_help.html:19 msgid "Permission" -msgstr "" +msgstr "Quyền" -#: frappe/core/doctype/user_type/user_type.py:84 frappe/database/query.py:957 +#: frappe/core/doctype/user_type/user_type.py:84 frappe/database/query.py:977 msgid "Permission Error" -msgstr "" +msgstr "Lỗi cấp phép" #. Name of a DocType #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "Permission Inspector" -msgstr "" +msgstr "Thanh tra giấy phép" #. Label of the permlevel (Int) field in DocType 'Custom Field' #: frappe/core/page/permission_manager/permission_manager.js:515 #: frappe/custom/doctype/custom_field/custom_field.json msgid "Permission Level" -msgstr "" +msgstr "Cấp phép" #: frappe/core/page/permission_manager/permission_manager_help.html:89 msgid "Permission Levels" -msgstr "" +msgstr "Cấp phép" #. Name of a DocType #: frappe/core/doctype/permission_log/permission_log.json msgid "Permission Log" -msgstr "" +msgstr "Nhật ký cấp phép" #. Option for the 'Script Type' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "Permission Query" -msgstr "" +msgstr "Truy vấn quyền" #. Label of the permission_rules (Section Break) field in DocType 'Custom Role' #: frappe/core/doctype/custom_role/custom_role.json msgid "Permission Rules" -msgstr "" +msgstr "Quy tắc cấp phép" #. Label of the permission_type (Select) field in DocType 'Permission #. Inspector' @@ -19348,11 +19377,11 @@ msgstr "" #: frappe/core/doctype/permission_inspector/permission_inspector.json #: frappe/core/doctype/permission_type/permission_type.json msgid "Permission Type" -msgstr "" +msgstr "Loại quyền" #: frappe/core/doctype/permission_type/permission_type.py:40 msgid "Permission Type '{0}' is reserved. Please choose another name." -msgstr "" +msgstr "Loại quyền '{0}' được bảo lưu. Vui lòng chọn tên khác." #. Label of the section_break_4 (Section Break) field in DocType 'Custom #. DocPerm' @@ -19368,17 +19397,17 @@ msgstr "" #: frappe/core/doctype/docperm/docperm.json #: frappe/core/doctype/doctype/doctype.json #: frappe/core/doctype/system_settings/system_settings.json -#: frappe/core/doctype/user/user.js:136 frappe/core/doctype/user/user.js:145 -#: frappe/core/doctype/user/user.js:154 +#: frappe/core/doctype/user/user.js:139 frappe/core/doctype/user/user.js:148 +#: frappe/core/doctype/user/user.js:157 #: frappe/core/page/permission_manager/permission_manager.js:222 #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Permissions" -msgstr "" +msgstr "Quyền" -#: frappe/core/doctype/doctype/doctype.py:1933 -#: frappe/core/doctype/doctype/doctype.py:1943 +#: frappe/core/doctype/doctype/doctype.py:1936 +#: frappe/core/doctype/doctype/doctype.py:1946 msgid "Permissions Error" -msgstr "" +msgstr "Lỗi quyền" #: frappe/core/page/permission_manager/permission_manager_help.html:10 msgid "Permissions are automatically applied to Standard Reports and searches." @@ -19405,33 +19434,33 @@ msgstr "" #: frappe/core/report/permitted_documents_for_user/permitted_documents_for_user.json #: frappe/core/workspace/users/users.json msgid "Permitted Documents For User" -msgstr "" +msgstr "Tài liệu được phép cho người dùng" #. Label of the permitted_roles (Table MultiSelect) field in DocType 'Workflow #. Action' #: frappe/workflow/doctype/workflow_action/workflow_action.json msgid "Permitted Roles" -msgstr "" +msgstr "Vai trò được phép" #. Option for the 'Address Type' (Select) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Personal" -msgstr "" +msgstr "Cá nhân" #. Name of a DocType #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.json msgid "Personal Data Deletion Request" -msgstr "" +msgstr "Yêu cầu xóa dữ liệu cá nhân" #. Name of a DocType #: frappe/website/doctype/personal_data_deletion_step/personal_data_deletion_step.json msgid "Personal Data Deletion Step" -msgstr "" +msgstr "Bước xóa dữ liệu cá nhân" #. Name of a DocType #: frappe/website/doctype/personal_data_download_request/personal_data_download_request.json msgid "Personal Data Download Request" -msgstr "" +msgstr "Yêu cầu tải xuống dữ liệu cá nhân" #. Label of the phone (Data) field in DocType 'Address' #. Label of the phone (Data) field in DocType 'Contact' @@ -19455,7 +19484,7 @@ msgstr "" #: frappe/website/doctype/contact_us_settings/contact_us_settings.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Phone" -msgstr "" +msgstr "Điện thoại" #. Label of the phone_no (Data) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json @@ -19464,30 +19493,30 @@ msgstr "" #: frappe/utils/__init__.py:115 msgid "Phone Number {0} set in field {1} is not valid." -msgstr "" +msgstr "Số điện thoại {0} được đặt trong trường {1} không hợp lệ." #: frappe/public/js/frappe/form/print_utils.js:69 -#: frappe/public/js/frappe/views/reports/report_view.js:1571 -#: frappe/public/js/frappe/views/reports/report_view.js:1574 +#: frappe/public/js/frappe/views/reports/report_view.js:1577 +#: frappe/public/js/frappe/views/reports/report_view.js:1580 msgid "Pick Columns" -msgstr "" +msgstr "Chọn cột" #. Option for the 'Type' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Pie" -msgstr "" +msgstr "Bánh" #. Label of the pincode (Data) field in DocType 'Contact Us Settings' #: frappe/website/doctype/contact_us_settings/contact_us_settings.json msgid "Pincode" -msgstr "" +msgstr "Mã pin" #. Option for the 'Color' (Select) field in DocType 'DocType State' #. Option for the 'Indicator' (Select) field in DocType 'Kanban Board Column' #: frappe/core/doctype/doctype_state/doctype_state.json #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Pink" -msgstr "" +msgstr "Hồng" #. Label of the placeholder (Data) field in DocType 'DocField' #. Label of the placeholder (Data) field in DocType 'Custom Field' @@ -19498,19 +19527,19 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Placeholder" -msgstr "" +msgstr "Phần giữ chỗ" #. Option for the 'Message Type' (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Plain Text" -msgstr "" +msgstr "Văn bản thuần túy" #. Option for the 'Address Type' (Select) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Plant" -msgstr "" +msgstr "Thực vật" -#: frappe/email/doctype/email_account/email_account.py:544 +#: frappe/email/doctype/email_account/email_account.py:545 msgid "Please Authorize OAuth for Email Account {0}" msgstr "" @@ -19528,11 +19557,11 @@ msgstr "" #: frappe/public/js/frappe/views/reports/query_report.js:309 msgid "Please Set Chart" -msgstr "" +msgstr "Hãy Đặt Biểu Đồ" #: frappe/core/doctype/sms_settings/sms_settings.py:88 msgid "Please Update SMS Settings" -msgstr "" +msgstr "Vui lòng cập nhật cài đặt SMS" #: frappe/automation/doctype/auto_repeat/auto_repeat.py:614 msgid "Please add a subject to your email" @@ -19540,15 +19569,15 @@ msgstr "" #: frappe/templates/includes/comments/comments.html:168 msgid "Please add a valid comment." -msgstr "" +msgstr "Vui lòng thêm một nhận xét hợp lệ." #: frappe/core/doctype/user/user.py:1126 msgid "Please ask your administrator to verify your sign-up" -msgstr "" +msgstr "Vui lòng yêu cầu quản trị viên của bạn xác minh đăng ký của bạn" #: frappe/public/js/frappe/form/controls/select.js:101 msgid "Please attach a file first." -msgstr "" +msgstr "Vui lòng đính kèm một tập tin đầu tiên." #: frappe/printing/doctype/letter_head/letter_head.py:89 msgid "Please attach an image file to set HTML for Footer." @@ -19556,19 +19585,19 @@ msgstr "" #: frappe/printing/doctype/letter_head/letter_head.py:77 msgid "Please attach an image file to set HTML for Letter Head." -msgstr "" +msgstr "Vui lòng đính kèm tệp hình ảnh để đặt HTML cho Tiêu đề thư." #: frappe/core/doctype/package_import/package_import.py:39 msgid "Please attach the package" -msgstr "" +msgstr "Vui lòng đính kèm gói" #: frappe/utils/dashboard.py:58 msgid "Please check the filter values set for Dashboard Chart: {}" -msgstr "" +msgstr "Vui lòng kiểm tra các giá trị bộ lọc được đặt cho Biểu đồ trang tổng quan: {}" -#: frappe/model/base_document.py:1066 +#: frappe/model/base_document.py:1079 msgid "Please check the value of \"Fetch From\" set for field {0}" -msgstr "" +msgstr "Vui lòng kiểm tra giá trị của \"Tìm nạp từ\" được đặt cho trường {0}" #: frappe/core/doctype/user/user.py:1124 msgid "Please check your email for verification" @@ -19596,35 +19625,35 @@ msgstr "" #: frappe/templates/emails/password_reset.html:2 msgid "Please click on the following link to set your new password" -msgstr "" +msgstr "Vui lòng nhấp vào liên kết sau để đặt mật khẩu mới" #: frappe/www/confirm_workflow_action.html:4 msgid "Please confirm your action to {0} this document." -msgstr "" +msgstr "Vui lòng xác nhận hành động của bạn với {0} tài liệu này." #: frappe/printing/page/print/print.js:685 msgid "Please contact your system manager to install correct version." -msgstr "" +msgstr "Vui lòng liên hệ với người quản lý hệ thống của bạn để cài đặt phiên bản chính xác." #: frappe/desk/doctype/number_card/number_card.js:45 msgid "Please create Card first" -msgstr "" +msgstr "Vui lòng tạo Thẻ trước" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.js:42 msgid "Please create chart first" -msgstr "" +msgstr "Hãy tạo biểu đồ trước" #: frappe/desk/form/meta.py:193 msgid "Please delete the field from {0} or add the required doctype." -msgstr "" +msgstr "Vui lòng xóa trường khỏi {0} hoặc thêm loại tài liệu được yêu cầu." #: frappe/core/doctype/data_export/exporter.py:184 msgid "Please do not change the template headings." -msgstr "" +msgstr "Vui lòng không thay đổi tiêu đề mẫu." #: frappe/printing/doctype/print_format/print_format.js:19 msgid "Please duplicate this to make changes" -msgstr "" +msgstr "Vui lòng sao chép thông tin này để thực hiện thay đổi" #: frappe/core/doctype/system_settings/system_settings.py:182 msgid "Please enable atleast one Social Login Key or LDAP or Login With Email Link before disabling username/password based login." @@ -19635,18 +19664,18 @@ msgstr "" #: frappe/printing/page/print/print.js:705 #: frappe/printing/page/print/print.js:747 #: frappe/public/js/frappe/list/bulk_operations.js:161 -#: frappe/public/js/frappe/utils/utils.js:1696 +#: frappe/public/js/frappe/utils/utils.js:1706 msgid "Please enable pop-ups" -msgstr "" +msgstr "Vui lòng bật cửa sổ bật lên" #: frappe/public/js/frappe/microtemplate.js:162 #: frappe/public/js/frappe/microtemplate.js:177 msgid "Please enable pop-ups in your browser" -msgstr "" +msgstr "Vui lòng bật cửa sổ bật lên trong trình duyệt của bạn" #: frappe/integrations/google_oauth.py:55 msgid "Please enable {} before continuing." -msgstr "" +msgstr "Vui lòng bật {} trước khi tiếp tục." #: frappe/utils/oauth.py:222 msgid "Please ensure that your profile has an email address" @@ -19654,23 +19683,23 @@ msgstr "" #: frappe/integrations/doctype/social_login_key/social_login_key.py:83 msgid "Please enter Access Token URL" -msgstr "" +msgstr "Vui lòng nhập URL mã thông báo truy cập" #: frappe/integrations/doctype/social_login_key/social_login_key.py:81 msgid "Please enter Authorize URL" -msgstr "" +msgstr "Vui lòng nhập URL ủy quyền" #: frappe/integrations/doctype/social_login_key/social_login_key.py:79 msgid "Please enter Base URL" -msgstr "" +msgstr "Vui lòng nhập URL cơ sở" #: frappe/integrations/doctype/social_login_key/social_login_key.py:87 msgid "Please enter Client ID before social login is enabled" -msgstr "" +msgstr "Vui lòng nhập ID khách hàng trước khi bật đăng nhập mạng xã hội" #: frappe/integrations/doctype/social_login_key/social_login_key.py:90 msgid "Please enter Client Secret before social login is enabled" -msgstr "" +msgstr "Vui lòng nhập Bí mật khách hàng trước khi bật đăng nhập mạng xã hội" #: frappe/integrations/doctype/connected_app/connected_app.py:54 msgid "Please enter OpenID Configuration URL" @@ -19678,7 +19707,7 @@ msgstr "" #: frappe/integrations/doctype/social_login_key/social_login_key.py:85 msgid "Please enter Redirect URL" -msgstr "" +msgstr "Vui lòng nhập URL chuyển hướng" #: frappe/templates/includes/comments/comments.html:163 msgid "Please enter a valid email address." @@ -19690,41 +19719,41 @@ msgstr "" #: frappe/www/update-password.html:259 msgid "Please enter the password" -msgstr "" +msgstr "Vui lòng nhập mật khẩu" #: frappe/public/js/frappe/desk.js:217 msgctxt "Email Account" msgid "Please enter the password for: {0}" -msgstr "" +msgstr "Vui lòng nhập mật khẩu cho: {0}" #: frappe/core/doctype/sms_settings/sms_settings.py:43 msgid "Please enter valid mobile nos" -msgstr "" +msgstr "Vui lòng nhập số điện thoại di động hợp lệ" #: frappe/www/update-password.html:142 msgid "Please enter your new password." -msgstr "" +msgstr "Vui lòng nhập mật khẩu mới của bạn." #: frappe/www/update-password.html:135 msgid "Please enter your old password." -msgstr "" +msgstr "Vui lòng nhập mật khẩu cũ của bạn." #: frappe/automation/doctype/auto_repeat/auto_repeat.py:444 msgid "Please find attached {0}: {1}" -msgstr "" +msgstr "Vui lòng tìm {0} đính kèm: {1}" #: frappe/templates/includes/comments/comments.py:42 #: frappe/templates/includes/comments/comments.py:45 msgid "Please login to post a comment." -msgstr "" +msgstr "Vui lòng đăng nhập để gửi bình luận." #: frappe/core/doctype/communication/communication.py:186 msgid "Please make sure the Reference Communication Docs are not circularly linked." -msgstr "" +msgstr "Vui lòng đảm bảo rằng Tài liệu liên lạc tham khảo không được liên kết vòng tròn." #: frappe/model/document.py:1036 msgid "Please refresh to get the latest document." -msgstr "" +msgstr "Hãy làm mới để có được tài liệu mới nhất." #: frappe/printing/page/print/print.js:602 msgid "Please remove the printer mapping in Printer Settings and try again." @@ -19732,27 +19761,27 @@ msgstr "" #: frappe/public/js/frappe/form/form.js:360 msgid "Please save before attaching." -msgstr "" +msgstr "Hãy lưu lại trước khi đính kèm." -#: frappe/public/js/frappe/form/sidebar/assign_to.js:55 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:63 msgid "Please save the document before assignment" -msgstr "" +msgstr "Hãy lưu lại tài liệu trước khi làm bài" -#: frappe/public/js/frappe/form/sidebar/assign_to.js:75 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:83 msgid "Please save the document before removing assignment" -msgstr "" +msgstr "Vui lòng lưu tài liệu trước khi xóa bài tập" #: frappe/automation/doctype/auto_repeat/auto_repeat.js:89 msgid "Please save the form before previewing the message" -msgstr "" +msgstr "Vui lòng lưu lại biểu mẫu trước khi xem trước tin nhắn" -#: frappe/public/js/frappe/views/reports/report_view.js:1723 +#: frappe/public/js/frappe/views/reports/report_view.js:1729 msgid "Please save the report first" -msgstr "" +msgstr "Hãy lưu báo cáo trước" #: frappe/website/doctype/web_template/web_template.js:22 msgid "Please save to edit the template." -msgstr "" +msgstr "Hãy lưu lại để chỉnh sửa mẫu." #: frappe/printing/doctype/print_format/print_format.js:31 msgid "Please select DocType first" @@ -19760,11 +19789,11 @@ msgstr "" #: frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.js:27 msgid "Please select Entity Type first" -msgstr "" +msgstr "Vui lòng chọn Loại thực thể trước" #: frappe/core/doctype/system_settings/system_settings.py:118 msgid "Please select Minimum Password Score" -msgstr "" +msgstr "Vui lòng chọn Điểm mật khẩu tối thiểu" #: frappe/public/js/frappe/views/reports/query_report.js:1228 msgid "Please select X and Y fields" @@ -19772,53 +19801,53 @@ msgstr "" #: frappe/public/js/form_builder/components/Field.vue:158 msgid "Please select a DocType in options before setting filters" -msgstr "" +msgstr "Vui lòng chọn Loại tài liệu trong tùy chọn trước khi cài đặt bộ lọc" #: frappe/utils/__init__.py:122 msgid "Please select a country code for field {1}." -msgstr "" +msgstr "Vui lòng chọn mã quốc gia cho trường {1}." #: frappe/public/js/frappe/file_uploader/FileUploader.vue:527 msgid "Please select a file first." -msgstr "" +msgstr "Vui lòng chọn một tập tin đầu tiên." #: frappe/utils/file_manager.py:50 msgid "Please select a file or url" msgstr "" -#: frappe/model/rename_doc.py:684 +#: frappe/model/rename_doc.py:687 msgid "Please select a valid csv file with data" msgstr "" #: frappe/utils/data.py:309 msgid "Please select a valid date filter" -msgstr "" +msgstr "Vui lòng chọn bộ lọc ngày hợp lệ" #: frappe/core/doctype/user_permission/user_permission_list.js:203 msgid "Please select applicable Doctypes" -msgstr "" +msgstr "Vui lòng chọn Loại tài liệu phù hợp" -#: frappe/model/db_query.py:1249 +#: frappe/model/db_query.py:1260 msgid "Please select atleast 1 column from {0} to sort/group" -msgstr "" +msgstr "Vui lòng chọn ít nhất 1 cột từ {0} để sắp xếp/nhóm" #: frappe/core/doctype/document_naming_settings/document_naming_settings.py:214 msgid "Please select prefix first" -msgstr "" +msgstr "Vui lòng chọn tiền tố trước" #: frappe/core/doctype/data_export/data_export.js:42 msgid "Please select the Document Type." -msgstr "" +msgstr "Vui lòng chọn Loại tài liệu." #. Description of the 'Directory Server' (Select) field in DocType 'LDAP #. Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "Please select the LDAP Directory being used" -msgstr "" +msgstr "Vui lòng chọn Thư mục LDAP đang được sử dụng" #: frappe/website/doctype/website_settings/website_settings.js:100 msgid "Please select {0}" -msgstr "" +msgstr "Hãy chọn {0}" #: frappe/contacts/doctype/contact/contact.py:298 msgid "Please set Email Address" @@ -19826,112 +19855,112 @@ msgstr "" #: frappe/printing/page/print/print.js:616 msgid "Please set a printer mapping for this print format in the Printer Settings" -msgstr "" +msgstr "Vui lòng đặt ánh xạ máy in cho định dạng in này trong Cài đặt máy in" #: frappe/public/js/frappe/views/reports/query_report.js:1451 msgid "Please set filters" -msgstr "" +msgstr "Vui lòng đặt bộ lọc" #: frappe/email/doctype/auto_email_report/auto_email_report.py:271 msgid "Please set filters value in Report Filter table." -msgstr "" +msgstr "Vui lòng đặt giá trị bộ lọc trong bảng Bộ lọc Báo cáo." -#: frappe/model/naming.py:578 +#: frappe/model/naming.py:593 msgid "Please set the document name" -msgstr "" +msgstr "Hãy đặt tên tài liệu" #: frappe/desk/doctype/dashboard/dashboard.py:120 msgid "Please set the following documents in this Dashboard as standard first." -msgstr "" +msgstr "Trước tiên, vui lòng đặt các tài liệu sau trong Bảng điều khiển này làm tiêu chuẩn." #: frappe/core/doctype/document_naming_settings/document_naming_settings.py:120 msgid "Please set the series to be used." -msgstr "" +msgstr "Vui lòng thiết lập loạt phim sẽ được sử dụng." #: frappe/core/doctype/system_settings/system_settings.py:132 msgid "Please setup SMS before setting it as an authentication method, via SMS Settings" -msgstr "" +msgstr "Vui lòng thiết lập SMS trước khi đặt nó làm phương thức xác thực, thông qua Cài đặt SMS" #: frappe/automation/doctype/auto_repeat/auto_repeat.js:107 msgid "Please setup a message first" -msgstr "" +msgstr "Vui lòng thiết lập tin nhắn trước" #: frappe/core/doctype/user/user.py:465 msgid "Please setup default outgoing Email Account from Settings > Email Account" msgstr "" -#: frappe/email/doctype/email_account/email_account.py:432 +#: frappe/email/doctype/email_account/email_account.py:433 msgid "Please setup default outgoing Email Account from Tools > Email Account" msgstr "" -#: frappe/public/js/frappe/model/model.js:774 +#: frappe/public/js/frappe/model/model.js:786 msgid "Please specify" -msgstr "" +msgstr "Hãy chỉ rõ" #: frappe/permissions.py:815 msgid "Please specify a valid parent DocType for {0}" -msgstr "" +msgstr "Vui lòng chỉ định Loại tài liệu gốc hợp lệ cho {0}" #: frappe/email/doctype/notification/notification.py:165 msgid "Please specify at least 10 minutes due to the trigger cadence of the scheduler" -msgstr "" +msgstr "Vui lòng chỉ định ít nhất 10 phút do nhịp kích hoạt của bộ lập lịch" #: frappe/email/doctype/notification/notification.py:172 msgid "Please specify the field from which to attach files" -msgstr "" +msgstr "Vui lòng chỉ định trường để đính kèm tệp" #: frappe/email/doctype/notification/notification.py:162 msgid "Please specify the minutes offset" -msgstr "" +msgstr "Vui lòng chỉ định độ lệch phút" #: frappe/email/doctype/notification/notification.py:156 msgid "Please specify which date field must be checked" -msgstr "" +msgstr "Vui lòng chỉ định trường ngày nào phải được kiểm tra" #: frappe/email/doctype/notification/notification.py:160 msgid "Please specify which datetime field must be checked" -msgstr "" +msgstr "Vui lòng chỉ định trường ngày giờ nào phải được kiểm tra" #: frappe/email/doctype/notification/notification.py:169 msgid "Please specify which value field must be checked" -msgstr "" +msgstr "Vui lòng chỉ định trường giá trị nào phải được kiểm tra" -#: frappe/public/js/frappe/request.js:185 +#: frappe/public/js/frappe/request.js:186 #: frappe/public/js/frappe/views/translation_manager.js:102 msgid "Please try again" -msgstr "" +msgstr "Vui lòng thử lại" #: frappe/integrations/google_oauth.py:58 msgid "Please update {} before continuing." -msgstr "" +msgstr "Vui lòng cập nhật {} trước khi tiếp tục." #: frappe/integrations/doctype/ldap_settings/ldap_settings.py:335 msgid "Please use a valid LDAP search filter" -msgstr "" +msgstr "Vui lòng sử dụng bộ lọc tìm kiếm LDAP hợp lệ" #: frappe/templates/emails/file_backup_notification.html:4 msgid "Please use following links to download file backup." -msgstr "" +msgstr "Vui lòng sử dụng các liên kết sau để tải xuống tập tin sao lưu." #: frappe/utils/password.py:217 msgid "Please visit https://frappecloud.com/docs/sites/migrate-an-existing-site#encryption-key for more information." -msgstr "" +msgstr "Vui lòng truy cập https://frappecloud.com/docs/sites/migrate-an-being-site#encryption-key để biết thêm thông tin." #. Label of the policy_uri (Data) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Policy URI" -msgstr "" +msgstr "URI chính sách" #. Option for the 'SocketIO Transport Mode' (Select) field in DocType 'System #. Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Polling" -msgstr "" +msgstr "Bỏ phiếu" #. Label of the popover_element (Check) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Popover Element" -msgstr "" +msgstr "Phần tử bật lên" #. Label of the ondemand_description (HTML Editor) field in DocType 'Form Tour #. Step' @@ -19948,11 +19977,11 @@ msgstr "" #: frappe/email/doctype/email_domain/email_domain.json #: frappe/printing/doctype/network_printer_settings/network_printer_settings.json msgid "Port" -msgstr "" +msgstr "Cảng" #: frappe/www/me.html:81 msgid "Portal" -msgstr "" +msgstr "Cổng thông tin" #. Label of the menu (Table) field in DocType 'Portal Settings' #: frappe/website/doctype/portal_settings/portal_settings.json @@ -19967,16 +19996,16 @@ msgstr "" #. Name of a DocType #: frappe/website/doctype/portal_settings/portal_settings.json msgid "Portal Settings" -msgstr "" +msgstr "Cài đặt cổng thông tin" #: frappe/public/js/frappe/form/print_utils.js:25 msgid "Portrait" -msgstr "" +msgstr "Chân dung" #. Label of the position (Select) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Position" -msgstr "" +msgstr "Vị trí" #: frappe/templates/discussions/comment_box.html:29 #: frappe/templates/discussions/reply_card.html:15 @@ -19984,27 +20013,27 @@ msgstr "" #: frappe/templates/discussions/reply_section.html:53 #: frappe/templates/discussions/topic_modal.html:11 msgid "Post" -msgstr "" +msgstr "Đăng" #: frappe/templates/discussions/reply_section.html:40 msgid "Post it here, our mentors will help you out." -msgstr "" +msgstr "Đăng nó ở đây, cố vấn của chúng tôi sẽ giúp bạn." #. Option for the 'Address Type' (Select) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Postal" -msgstr "" +msgstr "Bưu chính" #. Label of the pincode (Data) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json #: frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.py:41 msgid "Postal Code" -msgstr "" +msgstr "Mã Bưu Chính" #. Label of the posting_timestamp (Datetime) field in DocType 'Changelog Feed' #: frappe/desk/doctype/changelog_feed/changelog_feed.json msgid "Posting Timestamp" -msgstr "" +msgstr "Dấu thời gian đăng bài" #. Label of the precision (Select) field in DocType 'DocField' #. Label of the precision (Select) field in DocType 'Custom Field' @@ -20015,33 +20044,33 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Precision" -msgstr "" +msgstr "Độ chính xác" -#: frappe/core/doctype/doctype/doctype.py:1705 +#: frappe/core/doctype/doctype/doctype.py:1708 msgid "Precision ({0}) for {1} cannot be greater than its length ({2})." -msgstr "" +msgstr "Độ chính xác ({0}) của {1} không thể lớn hơn độ dài của nó ({2})." -#: frappe/core/doctype/doctype/doctype.py:1429 +#: frappe/core/doctype/doctype/doctype.py:1432 msgid "Precision should be between 1 and 6" -msgstr "" +msgstr "Độ chính xác phải nằm trong khoảng từ 1 đến 6" #: frappe/utils/password_strength.py:187 msgid "Predictable substitutions like '@' instead of 'a' don't help very much." -msgstr "" +msgstr "Những sự thay thế có thể dự đoán được như '@' thay vì 'a' không giúp ích được gì nhiều." #: frappe/desk/page/setup_wizard/install_fixtures.py:34 msgid "Prefer not to say" -msgstr "" +msgstr "Không muốn nói" #. Label of the is_primary_address (Check) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Preferred Billing Address" -msgstr "" +msgstr "Địa chỉ thanh toán ưa thích" #. Label of the is_shipping_address (Check) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Preferred Shipping Address" -msgstr "" +msgstr "Địa chỉ giao hàng ưa thích" #. Label of the prefix (Data) field in DocType 'Document Naming Rule' #. Label of the prefix (Autocomplete) field in DocType 'Document Naming @@ -20049,7 +20078,7 @@ msgstr "" #: frappe/core/doctype/document_naming_rule/document_naming_rule.json #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Prefix" -msgstr "" +msgstr "Tiền tố" #. Name of a DocType #. Label of the prepared_report (Check) field in DocType 'Report' @@ -20057,25 +20086,25 @@ msgstr "" #: frappe/core/doctype/report/report.json #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.py:32 msgid "Prepared Report" -msgstr "" +msgstr "Báo cáo đã chuẩn bị" #. Name of a report #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.json msgid "Prepared Report Analytics" -msgstr "" +msgstr "Báo cáo phân tích đã chuẩn bị" #. Name of a role #: frappe/core/doctype/prepared_report/prepared_report.json msgid "Prepared Report User" -msgstr "" +msgstr "Người dùng báo cáo đã chuẩn bị" #: frappe/desk/query_report.py:309 msgid "Prepared report render failed" -msgstr "" +msgstr "Kết xuất báo cáo đã chuẩn bị không thành công" #: frappe/public/js/frappe/views/reports/query_report.js:479 msgid "Preparing Report" -msgstr "" +msgstr "Chuẩn bị báo cáo" #: frappe/public/js/frappe/views/communication.js:484 msgid "Prepend the template to the email message" @@ -20105,39 +20134,39 @@ msgstr "" #: frappe/public/js/frappe/form/controls/markdown_editor.js:31 #: frappe/public/js/frappe/ui/capture.js:237 msgid "Preview" -msgstr "" +msgstr "Xem trước" #. Label of the preview_html (HTML) field in DocType 'File' #: frappe/core/doctype/file/file.json msgid "Preview HTML" -msgstr "" +msgstr "Xem trước HTML" #. Label of the preview_message (Button) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json msgid "Preview Message" -msgstr "" +msgstr "Xem trước tin nhắn" #: frappe/public/js/form_builder/form_builder.bundle.js:83 msgid "Preview Mode" -msgstr "" +msgstr "Chế độ xem trước" #. Label of the series_preview (Text) field in DocType 'Document Naming #. Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Preview of generated names" -msgstr "" +msgstr "Xem trước tên được tạo" #: frappe/public/js/frappe/views/render_preview.js:19 msgid "Preview on {0}" -msgstr "" +msgstr "Xem trước trên {0}" #: frappe/public/js/print_format_builder/Preview.vue:103 msgid "Preview type" -msgstr "" +msgstr "Loại xem trước" #: frappe/email/doctype/email_group/email_group.js:81 msgid "Preview:" -msgstr "" +msgstr "Xem trước:" #: frappe/public/js/frappe/form/form_tour.js:15 #: frappe/public/js/frappe/web_form/web_form.js:97 @@ -20145,20 +20174,20 @@ msgstr "" #: frappe/templates/includes/slideshow.html:34 #: frappe/website/web_template/slideshow/slideshow.html:40 msgid "Previous" -msgstr "" +msgstr "Trước" #: frappe/public/js/frappe/ui/slides.js:365 msgctxt "Go to previous slide" msgid "Previous" -msgstr "" +msgstr "Trước" #: frappe/public/js/frappe/form/toolbar.js:349 msgid "Previous Document" -msgstr "" +msgstr "Tài liệu trước đó" #: frappe/public/js/frappe/form/form.js:2271 msgid "Previous Submission" -msgstr "" +msgstr "Bài gửi trước đó" #. Option for the 'Button Color' (Select) field in DocType 'DocField' #. Option for the 'Button Color' (Select) field in DocType 'Custom Field' @@ -20170,20 +20199,20 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Primary" -msgstr "" +msgstr "Chính" #: frappe/public/js/frappe/form/templates/address_list.html:27 msgid "Primary Address" -msgstr "" +msgstr "Địa chỉ chính" #. Label of the primary_color (Link) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "Primary Color" -msgstr "" +msgstr "Màu Chính" #: frappe/public/js/frappe/form/templates/contact_list.html:23 msgid "Primary Contact" -msgstr "" +msgstr "Liên hệ chính" #: frappe/public/js/frappe/form/templates/contact_list.html:69 msgid "Primary Email" @@ -20191,16 +20220,16 @@ msgstr "" #: frappe/public/js/frappe/form/templates/contact_list.html:49 msgid "Primary Mobile" -msgstr "" +msgstr "Điện thoại di động chính" #: frappe/public/js/frappe/form/templates/contact_list.html:41 msgid "Primary Phone" -msgstr "" +msgstr "Điện thoại chính" #: frappe/database/mariadb/schema.py:156 frappe/database/postgres/schema.py:202 #: frappe/database/sqlite/schema.py:141 msgid "Primary key of doctype {0} can not be changed as there are existing values." -msgstr "" +msgstr "Không thể thay đổi khóa chính của loại tài liệu {0} vì có các giá trị hiện có." #. Label of the print (Check) field in DocType 'Custom DocPerm' #. Label of the print (Check) field in DocType 'DocPerm' @@ -20216,19 +20245,19 @@ msgstr "" #: frappe/public/js/frappe/form/templates/print_layout.html:46 #: frappe/public/js/frappe/list/bulk_operations.js:95 #: frappe/public/js/frappe/views/reports/query_report.js:1896 -#: frappe/public/js/frappe/views/reports/report_view.js:1533 +#: frappe/public/js/frappe/views/reports/report_view.js:1539 #: frappe/public/js/frappe/views/treeview.js:500 frappe/www/printview.html:18 msgid "Print" -msgstr "" +msgstr "In" -#: frappe/public/js/frappe/list/list_view.js:2253 +#: frappe/public/js/frappe/list/list_view.js:2264 msgctxt "Button in list view actions menu" msgid "Print" -msgstr "" +msgstr "In" #: frappe/public/js/frappe/list/bulk_operations.js:48 msgid "Print Documents" -msgstr "" +msgstr "In tài liệu" #. Label of the print_format (Link) field in DocType 'Auto Repeat' #. Label of a Link in the Build Workspace @@ -20245,7 +20274,7 @@ msgstr "" #: frappe/public/js/frappe/list/bulk_operations.js:59 #: frappe/website/doctype/web_form/web_form.json msgid "Print Format" -msgstr "" +msgstr "Định dạng in" #. Label of the print_format_builder (Check) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json @@ -20253,7 +20282,7 @@ msgstr "" #: frappe/printing/page/print_format_builder/print_format_builder.js:67 #: frappe/printing/page/print_format_builder_beta/print_format_builder_beta.js:4 msgid "Print Format Builder" -msgstr "" +msgstr "Trình tạo định dạng in" #. Label of the print_format_builder_beta (Check) field in DocType 'Print #. Format' @@ -20263,41 +20292,41 @@ msgstr "" #: frappe/utils/pdf.py:64 msgid "Print Format Error" -msgstr "" +msgstr "Lỗi Định Dạng In" #. Name of a DocType #: frappe/printing/doctype/print_format_field_template/print_format_field_template.json msgid "Print Format Field Template" -msgstr "" +msgstr "Mẫu trường định dạng in" #. Label of the print_format_for (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Print Format For" -msgstr "" +msgstr "Định dạng in cho" #. Label of the print_format_help (HTML) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Print Format Help" -msgstr "" +msgstr "Trợ giúp về định dạng in" #. Label of the print_format_type (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Print Format Type" -msgstr "" +msgstr "Loại định dạng in" #: frappe/public/js/frappe/views/reports/query_report.js:1645 msgid "Print Format not found" -msgstr "" +msgstr "Không tìm thấy định dạng in" #: frappe/www/printview.py:443 msgid "Print Format {0} is disabled" -msgstr "" +msgstr "Định dạng in {0} bị tắt" #. Name of a DocType #. Label of the print_heading (Data) field in DocType 'Print Heading' #: frappe/printing/doctype/print_heading/print_heading.json msgid "Print Heading" -msgstr "" +msgstr "Tiêu đề in" #. Label of the print_hide (Check) field in DocType 'DocField' #. Label of the print_hide (Check) field in DocType 'Custom Field' @@ -20306,7 +20335,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Print Hide" -msgstr "" +msgstr "In Ẩn" #. Label of the print_hide_if_no_value (Check) field in DocType 'DocField' #. Label of the print_hide_if_no_value (Check) field in DocType 'Custom Field' @@ -20316,21 +20345,21 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Print Hide If No Value" -msgstr "" +msgstr "In Ẩn Nếu Không Có Giá Trị" #: frappe/public/js/frappe/views/communication.js:186 msgid "Print Language" -msgstr "" +msgstr "Ngôn ngữ in" #: frappe/public/js/frappe/form/print_utils.js:245 msgid "Print Sent to the printer!" -msgstr "" +msgstr "In Đã gửi tới máy in!" #. Label of the server_printer (Section Break) field in DocType 'Print #. Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Print Server" -msgstr "" +msgstr "Máy chủ in" #. Name of a DocType #: frappe/printing/doctype/print_settings/print_settings.json @@ -20339,7 +20368,7 @@ msgstr "" #: frappe/public/js/frappe/form/print_utils.js:119 #: frappe/public/js/frappe/form/templates/print_layout.html:35 msgid "Print Settings" -msgstr "" +msgstr "Cài đặt in" #. Label of the print_style_section (Section Break) field in DocType 'Print #. Settings' @@ -20348,17 +20377,17 @@ msgstr "" #: frappe/printing/doctype/print_settings/print_settings.json #: frappe/printing/doctype/print_style/print_style.json msgid "Print Style" -msgstr "" +msgstr "Kiểu in" #. Label of the print_style_name (Data) field in DocType 'Print Style' #: frappe/printing/doctype/print_style/print_style.json msgid "Print Style Name" -msgstr "" +msgstr "Tên kiểu in" #. Label of the print_style_preview (HTML) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Print Style Preview" -msgstr "" +msgstr "Xem trước kiểu in" #. Label of the print_width (Data) field in DocType 'DocField' #. Label of the print_width (Data) field in DocType 'Custom Field' @@ -20367,7 +20396,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Print Width" -msgstr "" +msgstr "Chiều rộng in" #. Description of the 'Print Width' (Data) field in DocType 'Customize Form #. Field' @@ -20377,38 +20406,38 @@ msgstr "" #: frappe/public/js/frappe/form/form.js:172 msgid "Print document" -msgstr "" +msgstr "In tài liệu" #. Label of the with_letterhead (Check) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Print with letterhead" -msgstr "" +msgstr "In có tiêu đề thư" #: frappe/printing/page/print/print.js:909 msgid "Printer" -msgstr "" +msgstr "Máy in" #: frappe/printing/page/print/print.js:886 msgid "Printer Mapping" -msgstr "" +msgstr "Bản đồ máy in" #. Label of the printer_name (Select) field in DocType 'Network Printer #. Settings' #: frappe/printing/doctype/network_printer_settings/network_printer_settings.json msgid "Printer Name" -msgstr "" +msgstr "Tên máy in" #: frappe/printing/page/print/print.js:878 msgid "Printer Settings" -msgstr "" +msgstr "Cài đặt máy in" #: frappe/printing/page/print/print.js:615 msgid "Printer mapping not set." -msgstr "" +msgstr "Ánh xạ máy in chưa được đặt." -#: frappe/utils/print_format.py:336 +#: frappe/utils/print_format.py:345 msgid "Printing failed" -msgstr "" +msgstr "In không thành công" #. Label of the priority (Int) field in DocType 'Assignment Rule' #. Label of the priority (Int) field in DocType 'Document Naming Rule' @@ -20419,10 +20448,10 @@ msgstr "" #: frappe/core/doctype/document_naming_rule/document_naming_rule.json #: frappe/desk/doctype/todo/todo.json frappe/desk/report/todo/todo.py:37 #: frappe/email/doctype/email_queue/email_queue.json -#: frappe/public/js/frappe/form/sidebar/assign_to.js:214 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:222 #: frappe/website/doctype/web_page/web_page.json msgid "Priority" -msgstr "" +msgstr "Ưu tiên" #. Label of the private (Check) field in DocType 'Custom HTML Block' #. Option for the 'Event Type' (Select) field in DocType 'Event' @@ -20433,17 +20462,17 @@ msgstr "" #: frappe/desk/doctype/note/note_list.js:8 #: frappe/public/js/frappe/file_uploader/FilePreview.vue:42 msgid "Private" -msgstr "" +msgstr "Riêng tư" #. Label of the private_files_size (Float) field in DocType 'System Health #. Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Private Files (MB)" -msgstr "" +msgstr "Tệp riêng tư (MB)" #: frappe/templates/emails/file_backup_notification.html:6 msgid "Private Files Backup:" -msgstr "" +msgstr "Sao lưu tập tin riêng tư:" #. Description of the 'Auto Reply Message' (Text Editor) field in DocType #. 'Email Account' @@ -20453,46 +20482,46 @@ msgstr "" #: frappe/core/doctype/document_naming_rule/document_naming_rule.js:22 msgid "Proceed" -msgstr "" +msgstr "Tiếp tục" #: frappe/public/js/frappe/views/reports/query_report.js:956 msgid "Proceed Anyway" -msgstr "" +msgstr "Vẫn tiếp tục" #: frappe/public/js/frappe/form/controls/table.js:104 msgid "Processing" -msgstr "" +msgstr "Đang xử lý" #: frappe/email/doctype/email_queue/email_queue_list.js:52 msgid "Processing..." -msgstr "" +msgstr "Đang xử lý..." #: frappe/desk/page/setup_wizard/install_fixtures.py:51 msgid "Prof" -msgstr "" +msgstr "Giáo sư" #. Group in User's connections #: frappe/core/doctype/user/user.json msgid "Profile" -msgstr "" +msgstr "Hồ sơ" #. Label of a field in the edit-profile Web Form #: frappe/core/web_form/edit_profile/edit_profile.json msgid "Profile Picture" -msgstr "" +msgstr "Ảnh hồ sơ" #. Success message of the edit-profile Web Form #: frappe/core/web_form/edit_profile/edit_profile.json msgid "Profile updated successfully." -msgstr "" +msgstr "Hồ sơ được cập nhật thành công." -#: frappe/public/js/frappe/socketio_client.js:82 +#: frappe/public/js/frappe/socketio_client.js:86 msgid "Progress" -msgstr "" +msgstr "Tiến độ" #: frappe/public/js/frappe/views/kanban/kanban_view.js:422 msgid "Project" -msgstr "" +msgstr "Dự án" #. Label of the property (Data) field in DocType 'Property Setter' #: frappe/core/doctype/version/version_view.html:73 @@ -20500,7 +20529,7 @@ msgstr "" #: frappe/core/doctype/version/version_view.html:138 #: frappe/custom/doctype/property_setter/property_setter.json msgid "Property" -msgstr "" +msgstr "Tài sản" #. Label of the property_depends_on_section (Section Break) field in DocType #. 'Customize Form Field' @@ -20509,12 +20538,12 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Property Depends On" -msgstr "" +msgstr "Tài sản phụ thuộc vào" #. Name of a DocType #: frappe/custom/doctype/property_setter/property_setter.json msgid "Property Setter" -msgstr "" +msgstr "Người định đoạt tài sản" #. Description of a DocType #: frappe/custom/doctype/property_setter/property_setter.json @@ -20524,7 +20553,7 @@ msgstr "" #. Label of the property_type (Data) field in DocType 'Property Setter' #: frappe/custom/doctype/property_setter/property_setter.json msgid "Property Type" -msgstr "" +msgstr "Loại tài sản" #. Label of the protect_attached_files (Check) field in DocType 'DocType' #. Label of the protect_attached_files (Check) field in DocType 'Customize @@ -20532,17 +20561,17 @@ msgstr "" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Protect Attached Files" -msgstr "" +msgstr "Bảo vệ các tập tin đính kèm" -#: frappe/core/doctype/file/file.py:533 +#: frappe/core/doctype/file/file.py:534 msgid "Protected File" -msgstr "" +msgstr "Tệp được bảo vệ" #. Description of the 'Allowed File Extensions' (Small Text) field in DocType #. 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Provide a list of allowed file extensions for file uploads. Each line should contain one allowed file type. If unset, all file extensions are allowed. Example:
CSV
JPG
PNG" -msgstr "" +msgstr "Cung cấp danh sách các phần mở rộng tệp được phép tải lên tệp. Mỗi dòng phải chứa một loại tệp được phép. Nếu không được đặt, tất cả các phần mở rộng tệp đều được phép. Ví dụ:
CSV
JPG
PNG" #. Label of the provider (Data) field in DocType 'User Social Login' #. Label of the provider (Select) field in DocType 'Geolocation Settings' @@ -20569,24 +20598,24 @@ msgstr "" #: frappe/public/js/frappe/views/interaction.js:78 #: frappe/public/js/frappe/views/workspace/workspace.js:502 msgid "Public" -msgstr "" +msgstr "Công khai" #. Label of the public_files_size (Float) field in DocType 'System Health #. Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Public Files (MB)" -msgstr "" +msgstr "Tệp công khai (MB)" #: frappe/templates/emails/file_backup_notification.html:5 msgid "Public Files Backup:" -msgstr "" +msgstr "Sao lưu tập tin công cộng:" #. Label of the publish (Check) field in DocType 'Package Release' #: frappe/core/doctype/package_release/package_release.json #: frappe/public/js/frappe/form/footer/form_timeline.js:633 #: frappe/website/doctype/web_form/web_form.js:86 msgid "Publish" -msgstr "" +msgstr "Xuất bản" #. Label of the published (Check) field in DocType 'Comment' #. Label of the published (Check) field in DocType 'Help Article' @@ -20602,7 +20631,7 @@ msgstr "" #: frappe/website/doctype/web_page/web_page.json #: frappe/website/doctype/web_page/web_page_list.js:5 msgid "Published" -msgstr "" +msgstr "Đã xuất bản" #. Label of a number card in the Website Workspace #: frappe/website/workspace/website/website.json @@ -20618,7 +20647,7 @@ msgstr "" #. Page' #: frappe/website/doctype/web_page/web_page.json msgid "Publishing Dates" -msgstr "" +msgstr "Ngày xuất bản" #: frappe/email/doctype/email_account/email_account.js:208 msgid "Pull Emails" @@ -20653,38 +20682,38 @@ msgstr "" #. Name of a role #: frappe/contacts/doctype/contact/contact.json msgid "Purchase Manager" -msgstr "" +msgstr "Người quản lý mua hàng" #. Name of a role #: frappe/contacts/doctype/contact/contact.json msgid "Purchase Master Manager" -msgstr "" +msgstr "Người quản lý chính mua hàng" #. Name of a role #: frappe/contacts/doctype/address/address.json #: frappe/contacts/doctype/contact/contact.json #: frappe/geo/doctype/currency/currency.json msgid "Purchase User" -msgstr "" +msgstr "Người dùng mua hàng" #. Option for the 'Color' (Select) field in DocType 'DocType State' #. Option for the 'Indicator' (Select) field in DocType 'Kanban Board Column' #: frappe/core/doctype/doctype_state/doctype_state.json #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Purple" -msgstr "" +msgstr "Màu tím" #. Name of a DocType #. Label of a Link in the Integrations Workspace #: frappe/integrations/doctype/push_notification_settings/push_notification_settings.json #: frappe/integrations/workspace/integrations/integrations.json msgid "Push Notification Settings" -msgstr "" +msgstr "Cài đặt thông báo đẩy" #. Label of a Card Break in the Integrations Workspace #: frappe/integrations/workspace/integrations/integrations.json msgid "Push Notifications" -msgstr "" +msgstr "Thông báo đẩy" #. Label of the push_to_google_calendar (Check) field in DocType 'Google #. Calendar' @@ -20700,7 +20729,7 @@ msgstr "" #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.js:23 msgid "Put on Hold" -msgstr "" +msgstr "Giữ lại" #. Option for the 'Type' (Select) field in DocType 'System Console' #. Option for the 'Condition Type' (Select) field in DocType 'Notification' @@ -20711,15 +20740,15 @@ msgstr "" #: frappe/www/qrcode.html:3 msgid "QR Code" -msgstr "" +msgstr "Mã QR" #: frappe/www/qrcode.html:6 msgid "QR Code for Login Verification" -msgstr "" +msgstr "Mã QR để xác minh đăng nhập" #: frappe/public/js/frappe/form/print_utils.js:254 msgid "QZ Tray Failed:" -msgstr "" +msgstr "Khay QZ không thành công:" #. Option for the 'Frequency' (Select) field in DocType 'Auto Repeat' #. Option for the 'Time Interval' (Select) field in DocType 'Dashboard Chart' @@ -20731,74 +20760,70 @@ msgstr "" #: frappe/email/doctype/auto_email_report/auto_email_report.json #: frappe/public/js/frappe/utils/common.js:410 msgid "Quarterly" -msgstr "" +msgstr "Hàng quý" #. Label of the query (Data) field in DocType 'Recorder Query' #. Label of the query (Code) field in DocType 'Report' #: frappe/core/doctype/recorder_query/recorder_query.json #: frappe/core/doctype/report/report.json msgid "Query" -msgstr "" +msgstr "Truy vấn" #. Label of the section_break_6 (Section Break) field in DocType 'Report' #: frappe/core/doctype/report/report.json msgid "Query / Script" -msgstr "" +msgstr "Truy vấn / Tập lệnh" #. Label of the query_options (Small Text) field in DocType 'Contact Us #. Settings' #: frappe/website/doctype/contact_us_settings/contact_us_settings.json msgid "Query Options" -msgstr "" +msgstr "Tùy chọn truy vấn" #. Label of the query_parameters (Table) field in DocType 'Connected App' #. Name of a DocType #: frappe/integrations/doctype/connected_app/connected_app.json #: frappe/integrations/doctype/query_parameters/query_parameters.json msgid "Query Parameters" -msgstr "" +msgstr "Tham số truy vấn" #. Option for the 'Report Type' (Select) field in DocType 'Report' #: frappe/core/doctype/report/report.json #: frappe/public/js/frappe/views/reports/query_report.js:17 msgid "Query Report" -msgstr "" +msgstr "Báo cáo truy vấn" #: frappe/core/doctype/recorder/recorder.py:188 msgid "Query analysis complete. Check suggested indexes." -msgstr "" - -#: frappe/utils/safe_exec.py:497 -msgid "Query must be of SELECT or read-only WITH type." -msgstr "" +msgstr "Phân tích truy vấn hoàn tất. Kiểm tra các chỉ mục được đề xuất." #. Label of the queue (Select) field in DocType 'RQ Job' #. Label of the queue (Data) field in DocType 'System Health Report Queue' #: frappe/core/doctype/rq_job/rq_job.json #: frappe/desk/doctype/system_health_report_queue/system_health_report_queue.json msgid "Queue" -msgstr "" +msgstr "Xếp hàng" #: frappe/utils/background_jobs.py:737 msgid "Queue Overloaded" -msgstr "" +msgstr "Hàng đợi quá tải" #. Label of the queue_status (Table) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Queue Status" -msgstr "" +msgstr "Trạng thái hàng đợi" #. Label of the queue_type (Select) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "Queue Type(s)" -msgstr "" +msgstr "(Các) loại hàng đợi" #. Label of the queue_in_background (Check) field in DocType 'DocType' #. Label of the queue_in_background (Check) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Queue in Background (BETA)" -msgstr "" +msgstr "Hàng đợi trong nền (BETA)" #: frappe/utils/background_jobs.py:562 msgid "Queue should be one of {0}" @@ -20807,7 +20832,7 @@ msgstr "" #. Label of the queue (Data) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "Queue(s)" -msgstr "" +msgstr "(Các) hàng đợi" #. Option for the 'Status' (Select) field in DocType 'Prepared Report' #. Option for the 'Status' (Select) field in DocType 'Submission Queue' @@ -20816,21 +20841,21 @@ msgstr "" #: frappe/core/doctype/submission_queue/submission_queue.json #: frappe/integrations/doctype/integration_request/integration_request.json msgid "Queued" -msgstr "" +msgstr "Đang xếp hàng" #. Label of the queued_at (Datetime) field in DocType 'Prepared Report' #: frappe/core/doctype/prepared_report/prepared_report.json msgid "Queued At" -msgstr "" +msgstr "Xếp hàng tại" #. Label of the queued_by (Data) field in DocType 'Prepared Report' #: frappe/core/doctype/prepared_report/prepared_report.json msgid "Queued By" -msgstr "" +msgstr "Xếp hàng theo" #: frappe/core/doctype/submission_queue/submission_queue.py:186 msgid "Queued for Submission. You can track the progress over {0}." -msgstr "" +msgstr "Xếp hàng chờ nộp bài. Bạn có thể theo dõi tiến trình trên {0}." #: frappe/desk/page/backups/backups.py:96 msgid "Queued for backup. You will receive an email with the download link" @@ -20839,65 +20864,65 @@ msgstr "" #. Label of the queues (Data) field in DocType 'System Health Report Workers' #: frappe/desk/doctype/system_health_report_workers/system_health_report_workers.json msgid "Queues" -msgstr "" +msgstr "Hàng đợi" #: frappe/desk/doctype/bulk_update/bulk_update.py:86 msgid "Queuing {0} for Submission" -msgstr "" +msgstr "Đang xếp hàng {0} để gửi bài" #. Label of the quick_entry (Check) field in DocType 'DocType' #. Label of the quick_entry (Check) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Quick Entry" -msgstr "" +msgstr "Vào nhanh" #: frappe/core/page/permission_manager/permission_manager_help.html:3 msgid "Quick Help for Setting Permissions" -msgstr "" +msgstr "Trợ giúp nhanh để thiết lập quyền" #. Label of the quick_list_filter (Code) field in DocType 'Workspace Quick #. List' #: frappe/desk/doctype/workspace_quick_list/workspace_quick_list.json msgid "Quick List Filter" -msgstr "" +msgstr "Bộ lọc danh sách nhanh" #. Label of the quick_lists_tab (Tab Break) field in DocType 'Workspace' #. Label of the quick_lists (Table) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "Quick Lists" -msgstr "" +msgstr "Danh sách nhanh" #: frappe/public/js/frappe/views/reports/report_utils.js:314 msgid "Quoting must be between 0 and 3" -msgstr "" +msgstr "Trích dẫn phải nằm trong khoảng từ 0 đến 3" #. Label of the raw_information_log_section (Section Break) field in DocType #. 'Access Log' #: frappe/core/doctype/access_log/access_log.json msgid "RAW Information Log" -msgstr "" +msgstr "Nhật ký thông tin RAW" #. Name of a DocType #: frappe/core/doctype/rq_job/rq_job.json msgid "RQ Job" -msgstr "" +msgstr "Công việc RQ" #. Name of a DocType #: frappe/core/doctype/rq_worker/rq_worker.json msgid "RQ Worker" -msgstr "" +msgstr "Công nhân RQ" #. Option for the 'Naming Rule' (Select) field in DocType 'DocType' #. Option for the 'Naming Rule' (Select) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Random" -msgstr "" +msgstr "Ngẫu nhiên" #: frappe/website/report/website_analytics/website_analytics.js:20 msgid "Range" -msgstr "" +msgstr "Phạm vi" #. Label of the rate_limiting_section (Section Break) field in DocType 'Server #. Script' @@ -20920,20 +20945,20 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Rating" -msgstr "" +msgstr "Đánh giá" #. Label of the raw_commands (Code) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json #: frappe/printing/doctype/print_format/print_format.py:98 msgid "Raw Commands" -msgstr "" +msgstr "Lệnh thô" #. Label of the raw (Code) field in DocType 'Unhandled Email' #: frappe/email/doctype/unhandled_email/unhandled_email.json msgid "Raw Email" msgstr "" -#: frappe/core/doctype/communication/email.py:95 +#: frappe/core/doctype/communication/email.py:97 msgid "Raw HTML can be used only with Email Templates having 'Use HTML' checked. Proceeding with plain text email." msgstr "" @@ -20948,29 +20973,29 @@ msgstr "" #: frappe/printing/doctype/print_format/print_format.json #: frappe/printing/doctype/print_settings/print_settings.json msgid "Raw Printing" -msgstr "" +msgstr "In thô" #: frappe/printing/page/print/print.js:187 msgid "Raw Printing Setting" -msgstr "" +msgstr "Cài đặt in thô" #: frappe/public/js/frappe/form/templates/print_layout.html:37 msgid "Raw Printing Settings" -msgstr "" +msgstr "Cài đặt in thô" #: frappe/desk/doctype/console_log/console_log.js:6 msgid "Re-Run in Console" msgstr "" -#: frappe/email/doctype/email_account/email_account.py:726 +#: frappe/email/doctype/email_account/email_account.py:727 msgid "Re:" -msgstr "" +msgstr "Re:" #: frappe/core/doctype/communication/communication.js:268 #: frappe/public/js/frappe/form/footer/form_timeline.js:601 #: frappe/public/js/frappe/views/communication.js:419 msgid "Re: {0}" -msgstr "" +msgstr "Re: {0}" #. Option for the 'Delivery Status' (Select) field in DocType 'Communication' #. Label of the read (Check) field in DocType 'Custom DocPerm' @@ -20989,7 +21014,7 @@ msgstr "" #: frappe/email/doctype/email_flag_queue/email_flag_queue.json #: frappe/public/js/frappe/form/templates/set_sharing.html:2 msgid "Read" -msgstr "" +msgstr "Đọc" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Label of the read_only (Check) field in DocType 'DocField' @@ -21004,7 +21029,7 @@ msgstr "" #: frappe/public/js/form_builder/form_builder.bundle.js:83 #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Read Only" -msgstr "" +msgstr "Chỉ đọc" #. Label of the read_only_depends_on (Code) field in DocType 'Custom Field' #. Label of the read_only_depends_on (Code) field in DocType 'Customize Form @@ -21014,41 +21039,45 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Read Only Depends On" -msgstr "" +msgstr "Chỉ đọc Phụ thuộc vào" #. Label of the read_only_depends_on (Code) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Read Only Depends On (JS)" -msgstr "" +msgstr "Chỉ đọc phụ thuộc vào (JS)" #: frappe/public/js/frappe/ui/page.html:45 #: frappe/templates/includes/navbar/navbar_items.html:97 msgid "Read Only Mode" -msgstr "" +msgstr "Chế độ chỉ đọc" #. Label of the read_by_recipient (Check) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Read by Recipient" -msgstr "" +msgstr "Được đọc bởi Người nhận" #. Label of the read_by_recipient_on (Datetime) field in DocType #. 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Read by Recipient On" -msgstr "" +msgstr "Đọc bởi Người nhận Trên" #: frappe/desk/doctype/note/note.js:10 msgid "Read mode" -msgstr "" +msgstr "Chế độ đọc" #: frappe/utils/safe_exec.py:99 msgid "Read the documentation to know more" -msgstr "" +msgstr "Đọc tài liệu để biết thêm" + +#: frappe/utils/safe_exec.py:494 +msgid "Read-Only queries are allowed" +msgstr "Chỉ cho phép các truy vấn chỉ đọc" #. Label of the readme (Markdown Editor) field in DocType 'Package' #: frappe/core/doctype/package/package.json msgid "Readme" -msgstr "" +msgstr "Đọc tôi" #. Label of the realtime_socketio_section (Section Break) field in DocType #. 'System Health Report' @@ -21059,45 +21088,45 @@ msgstr "" #. Label of the reason (Long Text) field in DocType 'Unhandled Email' #: frappe/email/doctype/unhandled_email/unhandled_email.json msgid "Reason" -msgstr "" +msgstr "Lý do" #: frappe/public/js/frappe/views/reports/query_report.js:910 msgid "Rebuild" -msgstr "" +msgstr "Xây dựng lại" #: frappe/public/js/frappe/views/treeview.js:519 msgid "Rebuild Tree" -msgstr "" +msgstr "Xây dựng lại cây" #: frappe/utils/nestedset.py:177 msgid "Rebuilding of tree is not supported for {}" -msgstr "" +msgstr "Việc xây dựng lại cây không được hỗ trợ cho {}" #. Option for the 'Sent or Received' (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Received" -msgstr "" +msgstr "Đã nhận" #: frappe/integrations/doctype/token_cache/token_cache.py:49 msgid "Received an invalid token type." -msgstr "" +msgstr "Đã nhận được loại mã thông báo không hợp lệ." #. Label of the receiver_by_document_field (Select) field in DocType #. 'Notification Recipient' #: frappe/email/doctype/notification_recipient/notification_recipient.json msgid "Receiver By Document Field" -msgstr "" +msgstr "Người nhận theo trường tài liệu" #. Label of the receiver_by_role (Link) field in DocType 'Notification #. Recipient' #: frappe/email/doctype/notification_recipient/notification_recipient.json msgid "Receiver By Role" -msgstr "" +msgstr "Người nhận theo vai trò" #. Label of the receiver_parameter (Data) field in DocType 'SMS Settings' #: frappe/core/doctype/sms_settings/sms_settings.json msgid "Receiver Parameter" -msgstr "" +msgstr "Thông số máy thu" #: frappe/utils/password_strength.py:123 msgid "Recent years are easy to guess." @@ -21105,14 +21134,14 @@ msgstr "" #: frappe/public/js/frappe/ui/toolbar/search_utils.js:546 msgid "Recents" -msgstr "" +msgstr "Gần đây" #. Label of the recipients (Table) field in DocType 'Email Queue' #. Label of the recipient (Data) field in DocType 'Email Queue Recipient' #: frappe/email/doctype/email_queue/email_queue.json #: frappe/email/doctype/email_queue_recipient/email_queue_recipient.json msgid "Recipient" -msgstr "" +msgstr "Người nhận" #. Label of the recipient_account_field (Data) field in DocType 'DocType' #. Label of the recipient_account_field (Data) field in DocType 'Customize @@ -21120,12 +21149,12 @@ msgstr "" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Recipient Account Field" -msgstr "" +msgstr "Trường tài khoản người nhận" #. Option for the 'Delivery Status' (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Recipient Unsubscribed" -msgstr "" +msgstr "Người nhận Hủy đăng ký" #. Label of the recipients (Small Text) field in DocType 'Auto Repeat' #. Label of the column_break_5 (Section Break) field in DocType 'Notification' @@ -21133,88 +21162,88 @@ msgstr "" #: frappe/automation/doctype/auto_repeat/auto_repeat.json #: frappe/email/doctype/notification/notification.json msgid "Recipients" -msgstr "" +msgstr "Người nhận" #. Name of a DocType #: frappe/core/doctype/recorder/recorder.json msgid "Recorder" -msgstr "" +msgstr "Trình ghi lại" #. Name of a DocType #: frappe/core/doctype/recorder_query/recorder_query.json msgid "Recorder Query" -msgstr "" +msgstr "Truy vấn máy ghi" #. Name of a DocType #: frappe/core/doctype/recorder_suggested_index/recorder_suggested_index.json msgid "Recorder Suggested Index" -msgstr "" +msgstr "Chỉ mục đề xuất ghi âm" #: frappe/core/doctype/user_permission/user_permission_help.html:2 msgid "Records for following doctypes will be filtered" -msgstr "" +msgstr "Bản ghi cho các loại tài liệu sau sẽ được lọc" -#: frappe/core/doctype/doctype/doctype.py:1637 +#: frappe/core/doctype/doctype/doctype.py:1640 msgid "Recursive Fetch From" -msgstr "" +msgstr "Tìm nạp đệ quy từ" #. Option for the 'Color' (Select) field in DocType 'DocType State' #. Option for the 'Indicator' (Select) field in DocType 'Kanban Board Column' #: frappe/core/doctype/doctype_state/doctype_state.json #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Red" -msgstr "" +msgstr "Đỏ" #. Label of the redirect_http_status (Select) field in DocType 'Website Route #. Redirect' #: frappe/website/doctype/website_route_redirect/website_route_redirect.json msgid "Redirect HTTP Status" -msgstr "" +msgstr "Chuyển hướng trạng thái HTTP" #. Label of the redirect_to_path (Data) field in DocType 'User Invitation' #: frappe/core/doctype/user_invitation/user_invitation.json msgid "Redirect To Path" -msgstr "" +msgstr "Chuyển hướng đến đường dẫn" #. Label of the redirect_uri (Data) field in DocType 'Connected App' #: frappe/integrations/doctype/connected_app/connected_app.json msgid "Redirect URI" -msgstr "" +msgstr "URI chuyển hướng" #. Label of the redirect_uri_bound_to_authorization_code (Data) field in #. DocType 'OAuth Authorization Code' #: frappe/integrations/doctype/oauth_authorization_code/oauth_authorization_code.json msgid "Redirect URI Bound To Auth Code" -msgstr "" +msgstr "Chuyển hướng URI được liên kết với mã xác thực" #. Label of the redirect_uris (Text) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Redirect URIs" -msgstr "" +msgstr "URI chuyển hướng" #. Label of the redirect_url (Small Text) field in DocType 'User' #. Label of the redirect_url (Data) field in DocType 'Social Login Key' #: frappe/core/doctype/user/user.json #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Redirect URL" -msgstr "" +msgstr "URL chuyển hướng" #. Description of the 'Default App' (Select) field in DocType 'System Settings' #. Description of the 'Default App' (Select) field in DocType 'User' #: frappe/core/doctype/system_settings/system_settings.json #: frappe/core/doctype/user/user.json msgid "Redirect to the selected app after login" -msgstr "" +msgstr "Chuyển hướng đến ứng dụng đã chọn sau khi đăng nhập" #. Description of the 'Welcome URL' (Data) field in DocType 'Email Group' #: frappe/email/doctype/email_group/email_group.json msgid "Redirect to this URL after successful confirmation." -msgstr "" +msgstr "Chuyển hướng đến URL này sau khi xác nhận thành công." #. Label of the redirects_tab (Tab Break) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Redirects" -msgstr "" +msgstr "Chuyển hướng" #: frappe/sessions.py:149 msgid "Redis cache server not running. Please contact Administrator / Tech support" @@ -21222,17 +21251,17 @@ msgstr "" #: frappe/public/js/frappe/form/toolbar.js:566 msgid "Redo" -msgstr "" +msgstr "Làm lại" #: frappe/public/js/frappe/form/form.js:165 #: frappe/public/js/frappe/form/toolbar.js:574 msgid "Redo last action" -msgstr "" +msgstr "Làm lại hành động cuối cùng" #. Label of the ref_doctype (Link) field in DocType 'Report' #: frappe/core/doctype/report/report.json msgid "Ref DocType" -msgstr "" +msgstr "Loại tài liệu tham chiếu" #: frappe/desk/doctype/form_tour/form_tour.js:38 msgid "Referance Doctype and Dashboard Name both can't be used at the same time." @@ -21258,34 +21287,34 @@ msgstr "" #: frappe/integrations/doctype/integration_request/integration_request.json #: frappe/public/js/frappe/views/interaction.js:54 msgid "Reference" -msgstr "" +msgstr "Tham khảo" #. Label of the date_changed (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Reference Date" -msgstr "" +msgstr "Ngày tham chiếu" #. Label of the datetime_changed (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Reference Datetime" -msgstr "" +msgstr "Ngày giờ tham chiếu" #. Label of the reference_docname (Dynamic Link) field in DocType 'Event' #: frappe/desk/doctype/event/event.json msgid "Reference Doc" -msgstr "" +msgstr "Tài liệu tham khảo" #. Label of the reference_name (Data) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json msgid "Reference DocName" -msgstr "" +msgstr "Tên tài liệu tham khảo" #. Label of the reference_doctype (Link) field in DocType 'Error Log' #. Label of the ref_doctype (Link) field in DocType 'Submission Queue' #: frappe/core/doctype/error_log/error_log.json #: frappe/core/doctype/submission_queue/submission_queue.json msgid "Reference DocType" -msgstr "" +msgstr "Loại tài liệu tham khảo" #: frappe/email/doctype/email_unsubscribe/email_unsubscribe.py:26 msgid "Reference DocType and Reference Name are required" @@ -21297,7 +21326,7 @@ msgstr "" #: frappe/core/doctype/submission_queue/submission_queue.json #: frappe/website/doctype/discussion_topic/discussion_topic.json msgid "Reference Docname" -msgstr "" +msgstr "Tên tài liệu tham khảo" #. Label of the reference_doctype (Data) field in DocType 'Webhook Request Log' #. Label of the reference_doctype (Link) field in DocType 'Discussion Topic' @@ -21306,7 +21335,7 @@ msgstr "" #: frappe/public/js/frappe/views/render_preview.js:34 #: frappe/website/doctype/discussion_topic/discussion_topic.json msgid "Reference Doctype" -msgstr "" +msgstr "Loại tài liệu tham khảo" #. Label of the reference_document (Dynamic Link) field in DocType 'Auto #. Repeat' @@ -21322,7 +21351,7 @@ msgstr "" #: frappe/desk/doctype/onboarding_step/onboarding_step.json #: frappe/integrations/doctype/webhook_request_log/webhook_request_log.json msgid "Reference Document" -msgstr "" +msgstr "Tài liệu tham khảo" #. Label of the reference_docname (Dynamic Link) field in DocType 'Document #. Share Key' @@ -21331,7 +21360,7 @@ msgstr "" #: frappe/core/doctype/document_share_key/document_share_key.json #: frappe/integrations/doctype/integration_request/integration_request.json msgid "Reference Document Name" -msgstr "" +msgstr "Tên tài liệu tham khảo" #. Label of the reference_doctype (Link) field in DocType 'Auto Repeat' #. Label of the reference_doctype (Link) field in DocType 'Activity Log' @@ -21374,7 +21403,7 @@ msgstr "" #: frappe/website/doctype/portal_menu_item/portal_menu_item.json #: frappe/workflow/doctype/workflow_action/workflow_action.json msgid "Reference Document Type" -msgstr "" +msgstr "Loại tài liệu tham khảo" #. Label of the reference_name (Dynamic Link) field in DocType 'Activity Log' #. Label of the reference_name (Dynamic Link) field in DocType 'Comment' @@ -21399,7 +21428,7 @@ msgstr "" #: frappe/email/doctype/email_unsubscribe/email_unsubscribe.json #: frappe/workflow/doctype/workflow_action/workflow_action.json msgid "Reference Name" -msgstr "" +msgstr "Tên tham chiếu" #. Label of the reference_owner (Read Only) field in DocType 'Activity Log' #. Label of the reference_owner (Data) field in DocType 'Comment' @@ -21408,7 +21437,7 @@ msgstr "" #: frappe/core/doctype/comment/comment.json #: frappe/core/doctype/communication/communication.json msgid "Reference Owner" -msgstr "" +msgstr "Chủ sở hữu tài liệu tham khảo" #. Label of the reference_report (Data) field in DocType 'Report' #. Label of the reference_report (Link) field in DocType 'Onboarding Step' @@ -21417,29 +21446,29 @@ msgstr "" #: frappe/desk/doctype/onboarding_step/onboarding_step.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Reference Report" -msgstr "" +msgstr "Báo cáo tham khảo" #. Label of the reference_type (Link) field in DocType 'Permission Log' #. Label of the reference_type (Link) field in DocType 'ToDo' #: frappe/core/doctype/permission_log/permission_log.json #: frappe/desk/doctype/todo/todo.json msgid "Reference Type" -msgstr "" +msgstr "Loại tham chiếu" #. Label of the reference_name (Dynamic Link) field in DocType 'View Log' #: frappe/core/doctype/view_log/view_log.json msgid "Reference name" -msgstr "" +msgstr "Tên tham chiếu" #: frappe/templates/emails/auto_reply.html:3 msgid "Reference: {0} {1}" -msgstr "" +msgstr "Tham khảo: {0} {1}" #. Label of the referrer (Data) field in DocType 'Web Page View' #: frappe/website/doctype/web_page_view/web_page_view.json #: frappe/website/report/website_analytics/website_analytics.js:37 msgid "Referrer" -msgstr "" +msgstr "Người giới thiệu" #: frappe/printing/page/print/print.js:93 frappe/public/js/frappe/desk.js:168 #: frappe/public/js/frappe/desk.js:552 @@ -21452,11 +21481,11 @@ msgstr "" #: frappe/public/js/frappe/widgets/number_card_widget.js:352 #: frappe/public/js/print_format_builder/Preview.vue:24 msgid "Refresh" -msgstr "" +msgstr "Làm mới" #: frappe/core/page/dashboard_view/dashboard_view.js:177 msgid "Refresh All" -msgstr "" +msgstr "Làm mới tất cả" #. Label of the refresh_google_sheet (Button) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json @@ -21465,7 +21494,7 @@ msgstr "" #: frappe/printing/page/print/print.js:398 msgid "Refresh Print Preview" -msgstr "" +msgstr "Làm mới Xem trước bản in" #. Label of the refresh_token (Password) field in DocType 'Google Calendar' #. Label of the refresh_token (Password) field in DocType 'Google Contacts' @@ -21476,81 +21505,81 @@ msgstr "" #: frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json #: frappe/integrations/doctype/token_cache/token_cache.json msgid "Refresh Token" -msgstr "" +msgstr "Làm mới mã thông báo" -#: frappe/public/js/frappe/list/list_view.js:540 +#: frappe/public/js/frappe/list/list_view.js:549 msgctxt "Document count in list view" msgid "Refreshing" -msgstr "" +msgstr "Làm mới" #: frappe/core/doctype/system_settings/system_settings.js:57 -#: frappe/core/doctype/user/user.js:369 +#: frappe/core/doctype/user/user.js:372 #: frappe/desk/page/setup_wizard/setup_wizard.js:211 msgid "Refreshing..." -msgstr "" +msgstr "Tươi mát..." #: frappe/core/doctype/user/user.py:1086 msgid "Registered but disabled" -msgstr "" +msgstr "Đã đăng ký nhưng bị vô hiệu hóa" #. Option for the 'Delivery Status' (Select) field in DocType 'Communication' #. Option for the 'Contribution Status' (Select) field in DocType 'Translation' #: frappe/core/doctype/communication/communication.json #: frappe/core/doctype/translation/translation.json msgid "Rejected" -msgstr "" +msgstr "Bị từ chối" #: frappe/integrations/doctype/push_notification_settings/push_notification_settings.py:30 msgid "Relay Server URL missing" -msgstr "" +msgstr "Thiếu URL máy chủ chuyển tiếp" #. Label of the section_break_qgjr (Section Break) field in DocType 'Push #. Notification Settings' #: frappe/integrations/doctype/push_notification_settings/push_notification_settings.json msgid "Relay Settings" -msgstr "" +msgstr "Cài đặt chuyển tiếp" #. Group in Package's connections #: frappe/core/doctype/package/package.json msgid "Release" -msgstr "" +msgstr "Phát hành" #. Label of the release_notes (Markdown Editor) field in DocType 'Package #. Release' #: frappe/core/doctype/package_release/package_release.json msgid "Release Notes" -msgstr "" +msgstr "Ghi chú phát hành" #: frappe/core/doctype/communication/communication.js:48 #: frappe/core/doctype/communication/communication.js:159 msgid "Relink" -msgstr "" +msgstr "Liên kết lại" #: frappe/core/doctype/communication/communication.js:138 msgid "Relink Communication" -msgstr "" +msgstr "Liên kết lại Truyền thông" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #: frappe/core/doctype/comment/comment.json msgid "Relinked" -msgstr "" +msgstr "Đã liên kết lại" #: frappe/custom/doctype/customize_form/customize_form.js:120 #: frappe/public/js/frappe/form/toolbar.js:483 msgid "Reload" -msgstr "" +msgstr "Tải lại" #: frappe/public/js/frappe/form/controls/attach.js:16 msgid "Reload File" -msgstr "" +msgstr "Tải lại tập tin" #: frappe/public/js/frappe/list/base_list.js:249 msgid "Reload List" -msgstr "" +msgstr "Tải lại danh sách" #: frappe/public/js/frappe/views/reports/query_report.js:101 msgid "Reload Report" -msgstr "" +msgstr "Tải lại báo cáo" #. Label of the remember_last_selected_value (Check) field in DocType #. 'DocField' @@ -21559,83 +21588,83 @@ msgstr "" #: frappe/core/doctype/docfield/docfield.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Remember Last Selected Value" -msgstr "" +msgstr "Ghi nhớ giá trị được chọn lần cuối" #. Label of the remind_at (Datetime) field in DocType 'Reminder' #: frappe/automation/doctype/reminder/reminder.json #: frappe/public/js/frappe/form/reminders.js:33 msgid "Remind At" -msgstr "" +msgstr "Nhắc nhở Tại" #: frappe/public/js/frappe/form/toolbar.js:515 msgid "Remind Me" -msgstr "" +msgstr "Nhắc tôi" #: frappe/public/js/frappe/form/reminders.js:13 msgid "Remind Me In" -msgstr "" +msgstr "Nhắc tôi vào" #. Name of a DocType #: frappe/automation/doctype/reminder/reminder.json msgid "Reminder" -msgstr "" +msgstr "Nhắc nhở" #: frappe/automation/doctype/reminder/reminder.py:39 msgid "Reminder cannot be created in past." -msgstr "" +msgstr "Không thể tạo lời nhắc trong quá khứ." #: frappe/public/js/frappe/form/reminders.js:96 msgid "Reminder set at {0}" -msgstr "" +msgstr "Lời nhắc được đặt lúc {0}" #: frappe/public/js/frappe/form/templates/form_sidebar.html:14 #: frappe/public/js/frappe/ui/filters/edit_filter.html:4 #: frappe/public/js/frappe/ui/group_by/group_by.html:4 msgid "Remove" -msgstr "" +msgstr "Xóa" #: frappe/core/doctype/rq_job/rq_job_list.js:8 msgid "Remove Failed Jobs" -msgstr "" +msgstr "Xóa công việc thất bại" #: frappe/printing/page/print_format_builder/print_format_builder.js:493 msgid "Remove Field" -msgstr "" +msgstr "Xóa trường" #: frappe/printing/page/print_format_builder/print_format_builder.js:427 msgid "Remove Section" -msgstr "" +msgstr "Xóa phần" #: frappe/custom/doctype/customize_form/customize_form.js:138 msgid "Remove all customizations?" -msgstr "" +msgstr "Xóa tất cả các tùy chỉnh?" #: frappe/public/js/form_builder/components/Section.vue:286 msgid "Remove all fields in the column" -msgstr "" +msgstr "Xóa tất cả các trường trong cột" #: frappe/public/js/form_builder/components/Section.vue:278 #: frappe/public/js/frappe/utils/datatable.js:9 #: frappe/public/js/print_format_builder/PrintFormatSection.vue:120 msgid "Remove column" -msgstr "" +msgstr "Xóa cột" #: frappe/public/js/form_builder/components/Field.vue:265 msgid "Remove field" -msgstr "" +msgstr "Xóa trường" #: frappe/public/js/form_builder/components/Section.vue:279 msgid "Remove last column" -msgstr "" +msgstr "Xóa cột cuối cùng" #: frappe/public/js/print_format_builder/PrintFormatSection.vue:130 msgid "Remove page break" -msgstr "" +msgstr "Xóa ngắt trang" #: frappe/public/js/form_builder/components/Section.vue:266 #: frappe/public/js/print_format_builder/PrintFormatSection.vue:135 msgid "Remove section" -msgstr "" +msgstr "Xóa phần" #: frappe/public/js/form_builder/components/Tabs.vue:140 msgid "Remove tab" @@ -21644,25 +21673,25 @@ msgstr "" #. Option for the 'Status' (Select) field in DocType 'Permission Log' #: frappe/core/doctype/permission_log/permission_log.json msgid "Removed" -msgstr "" +msgstr "Đã xóa" #: frappe/custom/doctype/custom_field/custom_field.js:138 #: frappe/public/js/frappe/form/toolbar.js:282 #: frappe/public/js/frappe/form/toolbar.js:286 #: frappe/public/js/frappe/form/toolbar.js:458 -#: frappe/public/js/frappe/model/model.js:723 +#: frappe/public/js/frappe/model/model.js:735 #: frappe/public/js/frappe/views/treeview.js:319 msgid "Rename" -msgstr "" +msgstr "Đổi tên" #: frappe/custom/doctype/custom_field/custom_field.js:117 #: frappe/custom/doctype/custom_field/custom_field.js:137 msgid "Rename Fieldname" -msgstr "" +msgstr "Đổi tên tên trường" -#: frappe/public/js/frappe/model/model.js:710 +#: frappe/public/js/frappe/model/model.js:722 msgid "Rename {0}" -msgstr "" +msgstr "Đổi tên {0}" #: frappe/core/doctype/doctype/doctype.py:712 msgid "Renamed files and replaced code in controllers, please check!" @@ -21675,11 +21704,11 @@ msgstr "" #: frappe/core/doctype/communication/communication.js:43 #: frappe/desk/doctype/todo/todo.js:36 msgid "Reopen" -msgstr "" +msgstr "Mở lại" #: frappe/public/js/frappe/form/toolbar.js:583 msgid "Repeat" -msgstr "" +msgstr "Lặp lại" #. Label of the repeat_header_footer (Check) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json @@ -21689,32 +21718,32 @@ msgstr "" #. Label of the repeat_on (Select) field in DocType 'Event' #: frappe/desk/doctype/event/event.json msgid "Repeat On" -msgstr "" +msgstr "Lặp lại trên" #. Label of the repeat_till (Date) field in DocType 'Event' #: frappe/desk/doctype/event/event.json msgid "Repeat Till" -msgstr "" +msgstr "Lặp lại cho đến" #. Label of the repeat_on_day (Int) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json msgid "Repeat on Day" -msgstr "" +msgstr "Lặp lại vào ngày" #. Label of the repeat_on_days (Table) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json msgid "Repeat on Days" -msgstr "" +msgstr "Lặp lại vào ngày" #. Label of the repeat_on_last_day (Check) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json msgid "Repeat on Last Day of the Month" -msgstr "" +msgstr "Lặp lại vào ngày cuối cùng của tháng" #. Label of the repeat_this_event (Check) field in DocType 'Event' #: frappe/desk/doctype/event/event.json msgid "Repeat this Event" -msgstr "" +msgstr "Lặp lại sự kiện này" #: frappe/utils/password_strength.py:110 msgid "Repeats like \"aaa\" are easy to guess" @@ -21726,38 +21755,38 @@ msgstr "" #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:196 msgid "Repeats {0}" -msgstr "" +msgstr "Lặp lại {0}" #: frappe/core/doctype/role_replication/role_replication.js:7 #: frappe/core/doctype/role_replication/role_replication.js:14 msgid "Replicate" -msgstr "" +msgstr "Sao chép" #: frappe/core/doctype/role_replication/role_replication.js:8 msgid "Replicating..." -msgstr "" +msgstr "Nhân rộng..." #: frappe/core/doctype/role_replication/role_replication.js:13 msgid "Replication completed." -msgstr "" +msgstr "Sao chép hoàn tất." #. Option for the 'Status' (Select) field in DocType 'Contact' #. Option for the 'Status' (Select) field in DocType 'Communication' #: frappe/contacts/doctype/contact/contact.json #: frappe/core/doctype/communication/communication.json msgid "Replied" -msgstr "" +msgstr "Đã trả lời" #. Label of the reply (Text Editor) field in DocType 'Discussion Reply' #: frappe/core/doctype/communication/communication.js:57 #: frappe/public/js/frappe/form/footer/form_timeline.js:563 #: frappe/website/doctype/discussion_reply/discussion_reply.json msgid "Reply" -msgstr "" +msgstr "Trả lời" #: frappe/core/doctype/communication/communication.js:62 msgid "Reply All" -msgstr "" +msgstr "Trả lời tất cả" #. Label of the report (Check) field in DocType 'Custom DocPerm' #. Label of the report (Link) field in DocType 'Custom Role' @@ -21802,11 +21831,11 @@ msgstr "" #: frappe/email/doctype/auto_email_report/auto_email_report.json #: frappe/printing/doctype/print_format/print_format.json #: frappe/printing/doctype/print_format/print_format.py:104 -#: frappe/public/js/frappe/request.js:614 +#: frappe/public/js/frappe/request.js:615 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:95 -#: frappe/public/js/frappe/utils/utils.js:947 +#: frappe/public/js/frappe/utils/utils.js:958 msgid "Report" -msgstr "" +msgstr "Báo cáo" #. Option for the 'Report Type' (Select) field in DocType 'Report' #. Option for the 'DocType View' (Select) field in DocType 'Workspace Shortcut' @@ -21814,32 +21843,32 @@ msgstr "" #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json #: frappe/public/js/frappe/list/list_view_select.js:66 msgid "Report Builder" -msgstr "" +msgstr "Trình tạo báo cáo" #. Name of a DocType #: frappe/core/doctype/report_column/report_column.json msgid "Report Column" -msgstr "" +msgstr "Cột Báo cáo" #. Label of the report_description (Data) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Report Description" -msgstr "" +msgstr "Mô tả báo cáo" #: frappe/core/doctype/report/report.py:156 msgid "Report Document Error" -msgstr "" +msgstr "Báo cáo tài liệu lỗi" #. Name of a DocType #: frappe/core/doctype/report_filter/report_filter.json msgid "Report Filter" -msgstr "" +msgstr "Bộ lọc báo cáo" #. Label of the report_filters (Section Break) field in DocType 'Auto Email #. Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Report Filters" -msgstr "" +msgstr "Bộ lọc Báo cáo" #. Label of the report_hide (Check) field in DocType 'DocField' #. Label of the report_hide (Check) field in DocType 'Custom Field' @@ -21848,19 +21877,19 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Report Hide" -msgstr "" +msgstr "Báo cáo Ẩn" #. Label of the report_information_section (Section Break) field in DocType #. 'Access Log' #: frappe/core/doctype/access_log/access_log.json msgid "Report Information" -msgstr "" +msgstr "Thông tin báo cáo" #. Name of a role #: frappe/core/doctype/report/report.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Report Manager" -msgstr "" +msgstr "Người quản lý báo cáo" #. Label of the report_name (Data) field in DocType 'Access Log' #. Label of the report_name (Data) field in DocType 'Prepared Report' @@ -21875,7 +21904,7 @@ msgstr "" #: frappe/desk/doctype/number_card/number_card.json #: frappe/public/js/frappe/views/reports/query_report.js:2076 msgid "Report Name" -msgstr "" +msgstr "Tên báo cáo" #: frappe/desk/doctype/number_card/number_card.py:70 msgid "Report Name, Report Field and Fucntion are required to create a number card" @@ -21892,7 +21921,7 @@ msgstr "" #. Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Report Reference Doctype" -msgstr "" +msgstr "Loại tài liệu tham khảo báo cáo" #. Label of the report_type (Select) field in DocType 'Report' #. Label of the report_type (Data) field in DocType 'Onboarding Step' @@ -21901,90 +21930,90 @@ msgstr "" #: frappe/desk/doctype/onboarding_step/onboarding_step.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Report Type" -msgstr "" +msgstr "Loại báo cáo" #: frappe/public/js/frappe/list/base_list.js:204 msgid "Report View" -msgstr "" +msgstr "Xem báo cáo" #: frappe/public/js/frappe/form/templates/form_sidebar.html:64 msgid "Report bug" -msgstr "" +msgstr "Báo cáo lỗi" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.js:208 #: frappe/desk/doctype/number_card/number_card.js:194 msgid "Report has no data, please modify the filters or change the Report Name" -msgstr "" +msgstr "Báo cáo không có dữ liệu, vui lòng sửa đổi bộ lọc hoặc thay đổi Tên báo cáo" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.js:196 #: frappe/desk/doctype/number_card/number_card.js:189 msgid "Report has no numeric fields, please change the Report Name" -msgstr "" +msgstr "Báo cáo không có trường số, vui lòng thay đổi Tên Báo cáo" #: frappe/public/js/frappe/views/reports/query_report.js:1037 msgid "Report initiated, click to view status" -msgstr "" +msgstr "Đã bắt đầu báo cáo, nhấp để xem trạng thái" #: frappe/email/doctype/auto_email_report/auto_email_report.py:110 msgid "Report limit reached" -msgstr "" +msgstr "Đã đạt đến giới hạn báo cáo" #: frappe/core/doctype/prepared_report/prepared_report.py:248 msgid "Report timed out." -msgstr "" +msgstr "Đã hết thời gian báo cáo." #: frappe/desk/query_report.py:685 msgid "Report updated successfully" -msgstr "" +msgstr "Báo cáo được cập nhật thành công" -#: frappe/public/js/frappe/views/reports/report_view.js:1353 +#: frappe/public/js/frappe/views/reports/report_view.js:1359 msgid "Report was not saved (there were errors)" -msgstr "" +msgstr "Báo cáo chưa được lưu (có lỗi)" #: frappe/public/js/frappe/views/reports/query_report.js:2114 msgid "Report with more than 10 columns looks better in Landscape mode." -msgstr "" +msgstr "Báo cáo có hơn 10 cột trông đẹp hơn ở chế độ Ngang." #: frappe/public/js/frappe/ui/toolbar/search_utils.js:262 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:263 msgid "Report {0}" -msgstr "" +msgstr "Báo cáo {0}" #: frappe/desk/reportview.py:367 msgid "Report {0} deleted" -msgstr "" +msgstr "Báo cáo {0} đã xóa" #: frappe/desk/query_report.py:55 msgid "Report {0} is disabled" -msgstr "" +msgstr "Báo cáo {0} bị tắt" #: frappe/desk/reportview.py:344 msgid "Report {0} saved" -msgstr "" +msgstr "Đã lưu báo cáo {0}" -#: frappe/public/js/frappe/views/reports/report_view.js:20 +#: frappe/public/js/frappe/views/reports/report_view.js:21 msgid "Report:" -msgstr "" +msgstr "Báo cáo:" #. 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:561 msgid "Reports" -msgstr "" +msgstr "Báo cáo" #: frappe/patches/v14_0/update_workspace2.py:50 msgid "Reports & Masters" -msgstr "" +msgstr "Báo cáo & Bản gốc" #: frappe/public/js/frappe/views/reports/query_report.js:953 msgid "Reports already in Queue" -msgstr "" +msgstr "Báo cáo đã có trong hàng đợi" #. Description of a DocType #: frappe/core/doctype/user/user.json msgid "Represents a User in the system." -msgstr "" +msgstr "Đại diện cho Người dùng trong hệ thống." #. Description of a DocType #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json @@ -21993,7 +22022,7 @@ msgstr "" #: frappe/integrations/doctype/webhook/webhook.js:101 msgid "Request Body" -msgstr "" +msgstr "Nội dung yêu cầu" #. Label of the data (Code) field in DocType 'Integration Request' #. Title of the request-data Web Form @@ -22001,71 +22030,71 @@ msgstr "" #: frappe/integrations/doctype/integration_request/integration_request.json #: frappe/website/web_form/request_data/request_data.json msgid "Request Data" -msgstr "" +msgstr "Yêu cầu dữ liệu" #. Label of the request_description (Data) field in DocType 'Integration #. Request' #: frappe/integrations/doctype/integration_request/integration_request.json msgid "Request Description" -msgstr "" +msgstr "Yêu cầu Mô tả" #. Label of the request_headers (Code) field in DocType 'Recorder' #. Label of the request_headers (Code) field in DocType 'Integration Request' #: frappe/core/doctype/recorder/recorder.json #: frappe/integrations/doctype/integration_request/integration_request.json msgid "Request Headers" -msgstr "" +msgstr "Tiêu đề yêu cầu" #. Label of the request_id (Data) field in DocType 'Integration Request' #: frappe/integrations/doctype/integration_request/integration_request.json msgid "Request ID" -msgstr "" +msgstr "ID yêu cầu" #. Label of the rate_limit_count (Int) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "Request Limit" -msgstr "" +msgstr "Giới hạn yêu cầu" #. Label of the request_method (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "Request Method" -msgstr "" +msgstr "Phương thức yêu cầu" #. Label of the request_structure (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "Request Structure" -msgstr "" +msgstr "Cấu trúc yêu cầu" -#: frappe/public/js/frappe/request.js:229 +#: frappe/public/js/frappe/request.js:230 msgid "Request Timed Out" -msgstr "" +msgstr "Yêu cầu đã hết thời gian" #. Label of the timeout (Int) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json -#: frappe/public/js/frappe/request.js:242 +#: frappe/public/js/frappe/request.js:243 msgid "Request Timeout" -msgstr "" +msgstr "Yêu cầu hết thời gian" #. Label of the request_url (Small Text) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "Request URL" -msgstr "" +msgstr "URL yêu cầu" #. Title of the request-to-delete-data Web Form #: frappe/website/web_form/request_to_delete_data/request_to_delete_data.json msgid "Request for Account Deletion" -msgstr "" +msgstr "Yêu cầu xóa tài khoản" #. Label of the requested_numbers (Code) field in DocType 'SMS Log' #: frappe/core/doctype/sms_log/sms_log.json msgid "Requested Numbers" -msgstr "" +msgstr "Số được yêu cầu" #. Label of the require_trusted_certificate (Select) field in DocType 'LDAP #. Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "Require Trusted Certificate" -msgstr "" +msgstr "Yêu cầu chứng chỉ tin cậy" #. Description of the 'LDAP search path for Groups' (Data) field in DocType #. 'LDAP Settings' @@ -22088,112 +22117,112 @@ msgstr "" #: frappe/desk/doctype/module_onboarding/module_onboarding.js:17 #: frappe/website/doctype/portal_settings/portal_settings.js:19 msgid "Reset" -msgstr "" +msgstr "Đặt lại" #: frappe/custom/doctype/customize_form/customize_form.js:136 msgid "Reset All Customizations" -msgstr "" +msgstr "Đặt lại tất cả các tùy chỉnh" #: frappe/public/js/print_format_builder/print_format_builder.bundle.js:21 #: frappe/public/js/workflow_builder/workflow_builder.bundle.js:37 msgid "Reset Changes" -msgstr "" +msgstr "Đặt lại các thay đổi" #: frappe/public/js/frappe/widgets/chart_widget.js:306 msgid "Reset Chart" -msgstr "" +msgstr "Đặt lại biểu đồ" #: frappe/public/js/frappe/views/dashboard/dashboard_view.js:39 msgid "Reset Dashboard Customizations" -msgstr "" +msgstr "Đặt lại các tùy chỉnh bảng điều khiển" #: frappe/public/js/frappe/list/list_settings.js:228 msgid "Reset Fields" -msgstr "" +msgstr "Đặt lại trường" -#: frappe/core/doctype/user/user.js:177 frappe/core/doctype/user/user.js:180 +#: frappe/core/doctype/user/user.js:180 frappe/core/doctype/user/user.js:183 msgid "Reset LDAP Password" -msgstr "" +msgstr "Đặt lại mật khẩu LDAP" #: frappe/custom/doctype/customize_form/customize_form.js:128 msgid "Reset Layout" -msgstr "" +msgstr "Đặt lại bố cục" -#: frappe/core/doctype/user/user.js:228 +#: frappe/core/doctype/user/user.js:231 msgid "Reset OTP Secret" -msgstr "" +msgstr "Đặt lại bí mật OTP" -#: frappe/core/doctype/user/user.js:161 frappe/www/login.html:194 +#: frappe/core/doctype/user/user.js:164 frappe/www/login.html:194 #: frappe/www/me.html:48 frappe/www/update-password.html:3 #: frappe/www/update-password.html:32 msgid "Reset Password" -msgstr "" +msgstr "Đặt lại mật khẩu" #. Label of the reset_password_key (Data) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Reset Password Key" -msgstr "" +msgstr "Đặt lại khóa mật khẩu" #. Label of the reset_password_link_expiry_duration (Duration) field in DocType #. 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Reset Password Link Expiry Duration" -msgstr "" +msgstr "Đặt lại mật khẩu Liên kết Thời hạn hết hạn" #. Label of the reset_password_template (Link) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Reset Password Template" -msgstr "" +msgstr "Đặt lại mẫu mật khẩu" #: frappe/core/page/permission_manager/permission_manager.js:116 msgid "Reset Permissions for {0}?" -msgstr "" +msgstr "Đặt lại quyền cho {0}?" #: frappe/public/js/form_builder/components/Field.vue:111 msgid "Reset To Default" -msgstr "" +msgstr "Đặt lại về mặc định" #: frappe/public/js/frappe/utils/datatable.js:8 msgid "Reset sorting" -msgstr "" +msgstr "Đặt lại sắp xếp" #: frappe/public/js/frappe/form/grid_row.js:435 msgid "Reset to default" -msgstr "" +msgstr "Đặt lại về mặc định" #: frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js:19 msgid "Reset to defaults" -msgstr "" +msgstr "Đặt lại về mặc định" #: frappe/templates/emails/password_reset.html:3 msgid "Reset your password" -msgstr "" +msgstr "Đặt lại mật khẩu của bạn" #. Label of the resource_tab (Tab Break) field in DocType 'OAuth Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "Resource" -msgstr "" +msgstr "Tài nguyên" #. Label of the resource_documentation (Data) field in DocType 'OAuth Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "Resource Documentation" -msgstr "" +msgstr "Tài liệu tài nguyên" #. Label of the resource_name (Data) field in DocType 'OAuth Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "Resource Name" -msgstr "" +msgstr "Tên tài nguyên" #. Label of the resource_policy_uri (Data) field in DocType 'OAuth Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "Resource Policy URI" -msgstr "" +msgstr "URI chính sách tài nguyên" #. Label of the resource_tos_uri (Data) field in DocType 'OAuth Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "Resource TOS URI" -msgstr "" +msgstr "URI tài nguyên TOS" #. Label of the response (Text Editor) field in DocType 'Email Template' #. Label of the response_html (Code) field in DocType 'Email Template' @@ -22204,53 +22233,53 @@ msgstr "" #: frappe/integrations/doctype/integration_request/integration_request.json #: frappe/integrations/doctype/webhook_request_log/webhook_request_log.json msgid "Response" -msgstr "" +msgstr "Phản hồi" #. Label of the response_headers (Code) field in DocType 'Integration Request' #: frappe/integrations/doctype/integration_request/integration_request.json msgid "Response Headers" -msgstr "" +msgstr "Tiêu đề phản hồi" #. Label of the response_type (Select) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Response Type" -msgstr "" +msgstr "Loại phản hồi" #: frappe/public/js/frappe/ui/notifications/notifications.js:454 msgid "Rest of the day" -msgstr "" +msgstr "Phần còn lại của ngày" #: frappe/core/doctype/deleted_document/deleted_document.js:11 #: frappe/core/doctype/deleted_document/deleted_document_list.js:48 msgid "Restore" -msgstr "" +msgstr "Khôi phục" #: frappe/core/page/permission_manager/permission_manager.js:561 msgid "Restore Original Permissions" -msgstr "" +msgstr "Khôi phục quyền ban đầu" #: frappe/website/doctype/portal_settings/portal_settings.js:20 msgid "Restore to default settings?" -msgstr "" +msgstr "Khôi phục về cài đặt mặc định?" #. Label of the restored (Check) field in DocType 'Deleted Document' #: frappe/core/doctype/deleted_document/deleted_document.json msgid "Restored" -msgstr "" +msgstr "Đã khôi phục" #: frappe/core/doctype/deleted_document/deleted_document.py:74 msgid "Restoring Deleted Document" -msgstr "" +msgstr "Khôi phục tài liệu đã xóa" #. Label of the restrict_ip (Small Text) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Restrict IP" -msgstr "" +msgstr "Hạn chế IP" #. Label of the restrict_removal (Check) field in DocType 'Desktop Icon' #: frappe/desk/doctype/desktop_icon/desktop_icon.json msgid "Restrict Removal" -msgstr "" +msgstr "Hạn chế loại bỏ" #. Label of the restrict_to_domain (Link) field in DocType 'DocType' #. Label of the restrict_to_domain (Link) field in DocType 'Module Def' @@ -22260,44 +22289,44 @@ msgstr "" #: frappe/core/doctype/module_def/module_def.json #: frappe/core/doctype/page/page.json frappe/core/doctype/role/role.json msgid "Restrict To Domain" -msgstr "" +msgstr "Hạn chế đối với tên miền" #. Label of the restrict_to_domain (Link) field in DocType 'Workspace' #. Label of the restrict_to_domain (Link) field in DocType 'Workspace Shortcut' #: frappe/desk/doctype/workspace/workspace.json #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json msgid "Restrict to Domain" -msgstr "" +msgstr "Giới hạn đối với tên miền" #. Description of the 'Restrict IP' (Small Text) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Restrict user from this IP address only. Multiple IP addresses can be added by separating with commas. Also accepts partial IP addresses like (111.111.111)" msgstr "" -#: frappe/public/js/frappe/list/list_view.js:199 +#: frappe/public/js/frappe/list/list_view.js:205 msgctxt "Title of message showing restrictions in list view" msgid "Restrictions" -msgstr "" +msgstr "Hạn chế" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:457 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:472 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:448 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:463 msgid "Result" -msgstr "" +msgstr "Kết quả" #: frappe/email/doctype/email_queue/email_queue_list.js:27 msgid "Resume Sending" -msgstr "" +msgstr "Tiếp tục gửi" #. Label of the retry (Int) field in DocType 'Email Queue' #: frappe/core/doctype/data_import/data_import.js:111 #: frappe/desk/page/setup_wizard/setup_wizard.js:297 #: frappe/email/doctype/email_queue/email_queue.json msgid "Retry" -msgstr "" +msgstr "Thử lại" #: frappe/email/doctype/email_queue/email_queue_list.js:47 msgid "Retry Sending" -msgstr "" +msgstr "Thử gửi lại" #: frappe/www/qrcode.html:15 msgid "Return to the Verification screen and enter the code displayed by your authentication app" @@ -22310,22 +22339,22 @@ msgstr "" #. Label of the revocation_uri (Data) field in DocType 'Connected App' #: frappe/integrations/doctype/connected_app/connected_app.json msgid "Revocation URI" -msgstr "" +msgstr "URI thu hồi" #: frappe/www/third_party_apps.html:47 msgid "Revoke" -msgstr "" +msgstr "Thu hồi" #. Option for the 'Status' (Select) field in DocType 'OAuth Bearer Token' #: frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json msgid "Revoked" -msgstr "" +msgstr "Đã thu hồi" #. Option for the 'Content Type' (Select) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.js:92 #: frappe/website/doctype/web_page/web_page.json msgid "Rich Text" -msgstr "" +msgstr "Văn bản phong phú" #. Option for the 'Alignment' (Select) field in DocType 'DocField' #. Option for the 'Alignment' (Select) field in DocType 'Custom Field' @@ -22340,28 +22369,28 @@ msgstr "" #: frappe/printing/doctype/letter_head/letter_head.json #: frappe/website/doctype/web_page/web_page.json msgid "Right" -msgstr "" +msgstr "Đúng" #: frappe/printing/page/print_format_builder/print_format_builder.js:484 #: frappe/public/js/print_format_builder/PrintFormatControls.vue:156 msgctxt "alignment" msgid "Right" -msgstr "" +msgstr "Đúng" #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Right Bottom" -msgstr "" +msgstr "Dưới cùng bên phải" #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "Right Center" -msgstr "" +msgstr "Chính giữa bên phải" #. Label of the robots_txt (Code) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Robots.txt" -msgstr "" +msgstr "Robots.txt" #. Label of the role (Link) field in DocType 'Custom DocPerm' #. Label of the roles (Table) field in DocType 'Custom Role' @@ -22391,7 +22420,7 @@ msgstr "" #: frappe/website/doctype/portal_menu_item/portal_menu_item.json #: frappe/workflow/doctype/workflow_action_permitted_role/workflow_action_permitted_role.json msgid "Role" -msgstr "" +msgstr "Vai trò" #: frappe/core/doctype/role/role.js:8 msgid "Role 'All' will be given to all system + website users." @@ -22399,14 +22428,14 @@ msgstr "" #: frappe/core/doctype/role/role.js:13 msgid "Role 'Desk User' will be given to all system users." -msgstr "" +msgstr "Vai trò 'Người dùng bàn' sẽ được trao cho tất cả người dùng hệ thống." #. Label of the role_name (Data) field in DocType 'Role' #. Label of the role_profile (Data) field in DocType 'Role Profile' #: frappe/core/doctype/role/role.json #: frappe/core/doctype/role_profile/role_profile.json msgid "Role Name" -msgstr "" +msgstr "Tên vai trò" #. Name of a DocType #. Label of a Link in the Users Workspace @@ -22420,18 +22449,18 @@ msgstr "" #: frappe/core/doctype/user_document_type/user_document_type.json #: frappe/public/js/frappe/roles_editor.js:114 msgid "Role Permissions" -msgstr "" +msgstr "Quyền của vai trò" #. Label of a Link in the Users Workspace #: frappe/core/page/permission_manager/permission_manager.js:4 #: frappe/core/workspace/users/users.json msgid "Role Permissions Manager" -msgstr "" +msgstr "Trình quản lý quyền của vai trò" -#: frappe/public/js/frappe/list/list_view.js:1946 +#: frappe/public/js/frappe/list/list_view.js:1957 msgctxt "Button in list view menu" msgid "Role Permissions Manager" -msgstr "" +msgstr "Quản lý vai trò" #. Name of a DocType #. Label of the role_profile_name (Link) field in DocType 'User' @@ -22440,17 +22469,17 @@ msgstr "" #: frappe/core/doctype/user/user.json #: frappe/core/doctype/user_role_profile/user_role_profile.json msgid "Role Profile" -msgstr "" +msgstr "Hồ sơ vai trò" #. Label of the role_profiles (Table MultiSelect) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Role Profiles" -msgstr "" +msgstr "Hồ sơ vai trò" #. Name of a DocType #: frappe/core/doctype/role_replication/role_replication.json msgid "Role Replication" -msgstr "" +msgstr "Sao chép vai trò" #. Label of the role_and_level (Section Break) field in DocType 'Custom #. DocPerm' @@ -22462,7 +22491,7 @@ msgstr "" #: frappe/core/doctype/user/user.py:406 msgid "Role has been set as per the user type {0}" -msgstr "" +msgstr "Vai trò đã được đặt theo loại người dùng {0}" #. Label of the roles (Table) field in DocType 'Page' #. Label of the roles (Table) field in DocType 'Report' @@ -22488,26 +22517,26 @@ msgstr "" #: frappe/desk/doctype/desktop_icon/desktop_icon.json #: frappe/desk/doctype/workspace/workspace.json msgid "Roles" -msgstr "" +msgstr "Vai trò" #. Label of the roles_permissions_tab (Tab Break) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Roles & Permissions" -msgstr "" +msgstr "Vai trò & Quyền" #. Label of the roles (Table) field in DocType 'Role Profile' #. Label of the roles (Table) field in DocType 'User' #: frappe/core/doctype/role_profile/role_profile.json #: frappe/core/doctype/user/user.json msgid "Roles Assigned" -msgstr "" +msgstr "Vai trò được giao" #. Label of the roles_html (HTML) field in DocType 'Role Profile' #. Label of the roles_html (HTML) field in DocType 'User' #: frappe/core/doctype/role_profile/role_profile.json #: frappe/core/doctype/user/user.json msgid "Roles HTML" -msgstr "" +msgstr "Vai trò HTML" #. Label of the roles_html (HTML) field in DocType 'Role Permission for Page #. and Report' @@ -22517,7 +22546,7 @@ msgstr "" #: frappe/core/page/permission_manager/permission_manager_help.html:7 msgid "Roles can be set for users from their User page." -msgstr "" +msgstr "Vai trò có thể được đặt cho người dùng từ trang Người dùng của họ." #: frappe/utils/nestedset.py:293 msgid "Root {0} cannot be deleted" @@ -22531,7 +22560,7 @@ msgstr "" #. Label of the rounding_method (Select) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Rounding Method" -msgstr "" +msgstr "Phương pháp làm tròn" #. Label of the route (Data) field in DocType 'DocType' #. Option for the 'Action Type' (Select) field in DocType 'DocType Action' @@ -22557,97 +22586,97 @@ msgstr "" #: frappe/website/doctype/web_page/web_page.json #: frappe/website/doctype/website_sidebar_item/website_sidebar_item.json msgid "Route" -msgstr "" +msgstr "Tuyến đường" #. Name of a DocType #: frappe/desk/doctype/route_history/route_history.json msgid "Route History" -msgstr "" +msgstr "Lịch sử lộ trình" #. Label of the route_options (Code) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Route Options" -msgstr "" +msgstr "Tùy chọn tuyến đường" #. Label of the route_redirects (Table) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Route Redirects" -msgstr "" +msgstr "Chuyển hướng tuyến đường" #. Description of the 'Home Page' (Data) field in DocType 'Role' #: frappe/core/doctype/role/role.json msgid "Route: Example \"/desk\"" -msgstr "" +msgstr "Lộ trình: Ví dụ \"/desk\"" -#: frappe/model/base_document.py:969 frappe/model/document.py:821 +#: frappe/model/base_document.py:982 frappe/model/document.py:821 msgid "Row" -msgstr "" +msgstr "Hàng" #: frappe/core/doctype/version/version_view.html:137 msgid "Row #" -msgstr "" +msgstr "Hàng #" -#: frappe/core/doctype/doctype/doctype.py:1930 -#: frappe/core/doctype/doctype/doctype.py:1940 +#: frappe/core/doctype/doctype/doctype.py:1933 +#: frappe/core/doctype/doctype/doctype.py:1943 msgid "Row # {0}: Non-administrator users cannot add the role {1} to a custom DocType." -msgstr "" +msgstr "Hàng # {0}: Người dùng không phải quản trị viên không thể thêm vai trò {1} vào Loại tài liệu tùy chỉnh." -#: frappe/model/base_document.py:1097 +#: frappe/model/base_document.py:1110 msgid "Row #{0}:" -msgstr "" +msgstr "Hàng #{0}:" #: frappe/core/doctype/doctype/doctype.py:505 msgid "Row #{}: Fieldname is required" -msgstr "" +msgstr "Hàng #{}: Bắt buộc phải có tên trường" #. Label of the row_format (Select) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Row Format" -msgstr "" +msgstr "Định dạng hàng" #. Label of the row_indexes (Code) field in DocType 'Data Import Log' #: frappe/core/doctype/data_import_log/data_import_log.json msgid "Row Indexes" -msgstr "" +msgstr "Chỉ mục hàng" #. Label of the row_name (Data) field in DocType 'Property Setter' #: frappe/custom/doctype/property_setter/property_setter.json msgid "Row Name" -msgstr "" +msgstr "Tên hàng" #: frappe/core/doctype/data_import/data_import.js:509 msgid "Row Number" -msgstr "" +msgstr "Số hàng" #: frappe/core/doctype/version/version_view.html:132 msgid "Row Values Changed" -msgstr "" +msgstr "Giá trị hàng đã thay đổi" #: frappe/core/doctype/data_import/data_import.js:393 msgid "Row {0}" -msgstr "" +msgstr "Hàng {0}" #: frappe/custom/doctype/customize_form/customize_form.py:357 msgid "Row {0}: Not allowed to disable Mandatory for standard fields" -msgstr "" +msgstr "Hàng {0}: Không được phép tắt Bắt buộc đối với các trường tiêu chuẩn" #: frappe/custom/doctype/customize_form/customize_form.py:346 msgid "Row {0}: Not allowed to enable Allow on Submit for standard fields" -msgstr "" +msgstr "Hàng {0}: Không được phép bật Cho phép gửi đối với các trường tiêu chuẩn" #. Label of the rows_added_section (Section Break) field in DocType 'Audit #. Trail' #: frappe/core/doctype/audit_trail/audit_trail.json #: frappe/core/doctype/version/version_view.html:96 msgid "Rows Added" -msgstr "" +msgstr "Hàng đã thêm" #. Label of the rows_removed_section (Section Break) field in DocType 'Audit #. Trail' #: frappe/core/doctype/audit_trail/audit_trail.json #: frappe/core/doctype/version/version_view.html:96 msgid "Rows Removed" -msgstr "" +msgstr "Hàng đã bị xóa" #. Label of the rows_threshold_for_grid_search (Int) field in DocType 'DocType' #. Label of the rows_threshold_for_grid_search (Int) field in DocType @@ -22655,18 +22684,18 @@ msgstr "" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Rows Threshold for Grid Search" -msgstr "" +msgstr "Ngưỡng hàng cho tìm kiếm lưới" #. Label of the rule (Select) field in DocType 'Assignment Rule' #: frappe/automation/doctype/assignment_rule/assignment_rule.json msgid "Rule" -msgstr "" +msgstr "Quy tắc" #. Label of the section_break_3 (Section Break) field in DocType 'Document #. Naming Rule' #: frappe/core/doctype/document_naming_rule/document_naming_rule.json msgid "Rule Conditions" -msgstr "" +msgstr "Điều kiện quy tắc" #: frappe/permissions.py:687 msgid "Rule for this doctype, role, permlevel and if-owner combination already exists." @@ -22675,12 +22704,12 @@ msgstr "" #. Group in DocType's connections #: frappe/core/doctype/doctype/doctype.json msgid "Rules" -msgstr "" +msgstr "Quy tắc" #. Description of the 'Transitions' (Table) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "Rules defining transition of state in the workflow." -msgstr "" +msgstr "Các quy tắc xác định sự chuyển đổi trạng thái trong quy trình làm việc." #. Description of the 'Transition Rules' (Section Break) field in DocType #. 'Workflow' @@ -22691,26 +22720,26 @@ msgstr "" #. Description of the 'Priority' (Int) field in DocType 'Document Naming Rule' #: frappe/core/doctype/document_naming_rule/document_naming_rule.json msgid "Rules with higher priority number will be applied first." -msgstr "" +msgstr "Các quy tắc có số ưu tiên cao hơn sẽ được áp dụng trước." #. Label of the dormant_days (Int) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Run Jobs only Daily if Inactive For (Days)" -msgstr "" +msgstr "Chỉ chạy công việc hàng ngày nếu không hoạt động trong (Ngày)" #. Description of the 'Enable Scheduled Jobs' (Check) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Run scheduled jobs only if checked" -msgstr "" +msgstr "Chỉ chạy các công việc đã lên lịch nếu được chọn" #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.py:57 msgid "Runtime in Minutes" -msgstr "" +msgstr "Thời gian chạy tính bằng phút" #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.py:57 msgid "Runtime in Seconds" -msgstr "" +msgstr "Thời gian chạy tính bằng giây" #. Option for the 'Type' (Select) field in DocType 'Communication' #. Option for the 'Two Factor Authentication method' (Select) field in DocType @@ -22725,98 +22754,98 @@ msgstr "" #. Label of the sms_gateway_url (Small Text) field in DocType 'SMS Settings' #: frappe/core/doctype/sms_settings/sms_settings.json msgid "SMS Gateway URL" -msgstr "" +msgstr "URL cổng SMS" #. Name of a DocType #: frappe/core/doctype/sms_log/sms_log.json msgid "SMS Log" -msgstr "" +msgstr "Nhật ký SMS" #. Name of a DocType #: frappe/core/doctype/sms_parameter/sms_parameter.json msgid "SMS Parameter" -msgstr "" +msgstr "Thông số SMS" #. Name of a DocType #. Label of a Link in the Integrations Workspace #: frappe/core/doctype/sms_settings/sms_settings.json #: frappe/integrations/workspace/integrations/integrations.json msgid "SMS Settings" -msgstr "" +msgstr "Cài đặt SMS" #: frappe/core/doctype/sms_settings/sms_settings.py:114 msgid "SMS sent successfully" -msgstr "" +msgstr "Đã gửi SMS thành công" #: frappe/templates/includes/login/login.js:368 msgid "SMS was not sent. Please contact Administrator." -msgstr "" +msgstr "SMS không được gửi. Vui lòng liên hệ với Quản trị viên." -#: frappe/email/doctype/email_account/email_account.py:212 +#: frappe/email/doctype/email_account/email_account.py:213 msgid "SMTP Server is required" -msgstr "" +msgstr "Cần có máy chủ SMTP" #. Option for the 'Type' (Select) field in DocType 'System Console' #: frappe/desk/doctype/system_console/system_console.json msgid "SQL" -msgstr "" +msgstr "SQL" #. Description of the 'Condition' (Small Text) field in DocType 'Bulk Update' #: frappe/desk/doctype/bulk_update/bulk_update.json msgid "SQL Conditions. Example: status=\"Open\"" -msgstr "" +msgstr "Điều kiện SQL. Ví dụ: trạng thái=\"Mở\"" #. Label of the sql_explain_html (HTML) field in DocType 'Recorder Query' #: frappe/core/doctype/recorder/recorder.js:85 #: frappe/core/doctype/recorder_query/recorder_query.json msgid "SQL Explain" -msgstr "" +msgstr "Giải thích SQL" #. Label of the sql_output (HTML) field in DocType 'System Console' #: frappe/desk/doctype/system_console/system_console.json msgid "SQL Output" -msgstr "" +msgstr "Đầu ra SQL" #. Label of the sql_queries (Table) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json msgid "SQL Queries" -msgstr "" +msgstr "Truy vấn SQL" -#: frappe/database/query.py:1972 +#: frappe/database/query.py:2051 msgid "SQL functions are not allowed as strings in SELECT: {0}. Use dict syntax like {{'COUNT': '*'}} instead." -msgstr "" +msgstr "Các hàm SQL không được phép dưới dạng chuỗi trong CHỌN: {0}. Thay vào đó, hãy sử dụng cú pháp chính tả như {{'COUNT': '*'}}." #. Label of the ssl_tls_mode (Select) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json msgid "SSL/TLS Mode" -msgstr "" +msgstr "Chế độ SSL/TLS" #: frappe/public/js/frappe/color_picker/color_picker.js:20 msgid "SWATCHES" -msgstr "" +msgstr "MẪU" #. Name of a role #: frappe/contacts/doctype/contact/contact.json msgid "Sales Manager" -msgstr "" +msgstr "Giám đốc bán hàng" #. Name of a role #: frappe/contacts/doctype/contact/contact.json msgid "Sales Master Manager" -msgstr "" +msgstr "Trưởng phòng kinh doanh" #. Name of a role #: frappe/contacts/doctype/address/address.json #: frappe/contacts/doctype/contact/contact.json #: frappe/geo/doctype/currency/currency.json msgid "Sales User" -msgstr "" +msgstr "Người dùng bán hàng" #. Option for the 'Social Login Provider' (Select) field in DocType 'Social #. Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Salesforce" -msgstr "" +msgstr "Lực lượng bán hàng" #. Label of the salutation (Link) field in DocType 'Contact' #. Name of a DocType @@ -22824,16 +22853,16 @@ msgstr "" #: frappe/contacts/doctype/contact/contact.json #: frappe/contacts/doctype/salutation/salutation.json msgid "Salutation" -msgstr "" +msgstr "Lời chào" #: frappe/integrations/doctype/webhook/webhook.py:113 msgid "Same Field is entered more than once" -msgstr "" +msgstr "Cùng một trường được nhập nhiều lần" #. Label of the sample (HTML) field in DocType 'Client Script' #: frappe/custom/doctype/client_script/client_script.json msgid "Sample" -msgstr "" +msgstr "Mẫu" #. Option for the 'Day' (Select) field in DocType 'Assignment Rule Day' #. Option for the 'Day' (Select) field in DocType 'Auto Repeat Day' @@ -22849,7 +22878,7 @@ msgstr "" #: frappe/desk/doctype/event/event.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Saturday" -msgstr "" +msgstr "Thứ Bảy" #. Option for the 'Send Alert On' (Select) field in DocType 'Notification' #: cypress/integration/web_form.js:52 @@ -22862,86 +22891,86 @@ msgstr "" #: frappe/public/js/frappe/form/quick_entry.js:186 #: frappe/public/js/frappe/list/list_settings.js:37 #: frappe/public/js/frappe/list/list_settings.js:245 -#: frappe/public/js/frappe/list/list_view.js:2008 +#: frappe/public/js/frappe/list/list_view.js:2019 #: frappe/public/js/frappe/ui/toolbar/toolbar.js:336 #: frappe/public/js/frappe/utils/common.js:452 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:45 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:189 #: frappe/public/js/frappe/views/kanban/kanban_view.js:357 #: frappe/public/js/frappe/views/reports/query_report.js:2068 -#: frappe/public/js/frappe/views/reports/report_view.js:1740 +#: frappe/public/js/frappe/views/reports/report_view.js:1746 #: frappe/public/js/frappe/views/workspace/workspace.js:398 #: frappe/public/js/frappe/widgets/base_widget.js:142 #: frappe/public/js/frappe/widgets/quick_list_widget.js:120 #: frappe/public/js/print_format_builder/print_format_builder.bundle.js:15 #: frappe/public/js/workflow_builder/workflow_builder.bundle.js:33 msgid "Save" -msgstr "" +msgstr "Lưu" #: frappe/workflow/doctype/workflow/workflow.js:143 msgid "Save Anyway" -msgstr "" +msgstr "Dù sao vẫn lưu" -#: frappe/public/js/frappe/views/reports/report_view.js:1384 -#: frappe/public/js/frappe/views/reports/report_view.js:1747 +#: frappe/public/js/frappe/views/reports/report_view.js:1390 +#: frappe/public/js/frappe/views/reports/report_view.js:1753 msgid "Save As" -msgstr "" +msgstr "Lưu dưới dạng" #: frappe/public/js/frappe/views/dashboard/dashboard_view.js:63 msgid "Save Customizations" -msgstr "" +msgstr "Lưu tùy chỉnh" #: frappe/public/js/frappe/views/reports/query_report.js:2071 msgid "Save Report" -msgstr "" +msgstr "Lưu báo cáo" #: frappe/public/js/frappe/views/kanban/kanban_view.js:107 msgid "Save filters" -msgstr "" +msgstr "Lưu bộ lọc" #. Label of the save_on_complete (Check) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Save on Completion" -msgstr "" +msgstr "Lưu khi hoàn thành" #: frappe/public/js/frappe/form/form_tour.js:295 msgid "Save the document." -msgstr "" +msgstr "Lưu tài liệu." #: frappe/model/rename_doc.py:106 #: frappe/printing/page/print_format_builder/print_format_builder.js:892 #: frappe/public/js/frappe/form/toolbar.js:315 -#: frappe/public/js/frappe/views/kanban/kanban_board.bundle.js:917 +#: frappe/public/js/frappe/views/kanban/kanban_board.bundle.js:921 #: frappe/public/js/frappe/views/workspace/workspace.js:778 msgid "Saved" -msgstr "" +msgstr "Đã lưu" #: frappe/public/js/frappe/list/list_filter.js:22 msgid "Saved Filters" -msgstr "" +msgstr "Bộ lọc đã lưu" #: frappe/public/js/frappe/list/list_settings.js:41 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:47 #: frappe/public/js/frappe/views/workspace/workspace.js:410 msgid "Saving" -msgstr "" +msgstr "Đang lưu" #: frappe/public/js/frappe/form/save.js:9 msgctxt "Freeze message while saving a document" msgid "Saving" -msgstr "" +msgstr "Tiết kiệm" -#: frappe/public/js/frappe/list/list_view.js:2019 +#: frappe/public/js/frappe/list/list_view.js:2030 msgid "Saving Changes..." -msgstr "" +msgstr "Đang lưu thay đổi..." #: frappe/custom/doctype/customize_form/customize_form.js:421 msgid "Saving Customization..." -msgstr "" +msgstr "Đang lưu tùy chỉnh..." #: frappe/public/js/frappe/ui/sidebar/sidebar_editor.js:58 msgid "Saving Sidebar" -msgstr "" +msgstr "Đang lưu thanh bên" #: frappe/desk/doctype/module_onboarding/module_onboarding.js:8 msgid "Saving this will export this document as well as the steps linked here as json." @@ -22951,11 +22980,11 @@ msgstr "" #: frappe/public/js/print_format_builder/store.js:36 #: frappe/public/js/workflow_builder/store.js:73 msgid "Saving..." -msgstr "" +msgstr "Đang lưu..." #: frappe/public/js/frappe/scanner/index.js:72 msgid "Scan QRCode" -msgstr "" +msgstr "Quét mã QR" #: frappe/www/qrcode.html:14 msgid "Scan the QR Code and enter the resulting code displayed." @@ -22964,33 +22993,33 @@ msgstr "" #. Label of the section_break_10 (Tab Break) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json msgid "Schedule" -msgstr "" +msgstr "Lịch trình" #: frappe/public/js/frappe/views/communication.js:88 msgid "Schedule Send At" -msgstr "" +msgstr "Lịch Gửi Tại" #. Option for the 'Delivery Status' (Select) field in DocType 'Communication' #. Option for the 'Status' (Select) field in DocType 'Scheduled Job Log' #: frappe/core/doctype/communication/communication.json #: frappe/core/doctype/scheduled_job_log/scheduled_job_log.json msgid "Scheduled" -msgstr "" +msgstr "Đã lên lịch" #. Label of the scheduled_against (Link) field in DocType 'Scheduler Event' #: frappe/core/doctype/scheduler_event/scheduler_event.json msgid "Scheduled Against" -msgstr "" +msgstr "Đã lên lịch đấu với" #. Label of the scheduled_job_type (Link) field in DocType 'Scheduled Job Log' #: frappe/core/doctype/scheduled_job_log/scheduled_job_log.json msgid "Scheduled Job" -msgstr "" +msgstr "Công việc theo lịch trình" #. Name of a DocType #: frappe/core/doctype/scheduled_job_log/scheduled_job_log.json msgid "Scheduled Job Log" -msgstr "" +msgstr "Nhật ký công việc đã lên lịch" #. Name of a DocType #. Label of a Link in the Build Workspace @@ -23000,26 +23029,26 @@ msgstr "" #: frappe/core/workspace/build/build.json #: frappe/desk/doctype/system_health_report_failing_jobs/system_health_report_failing_jobs.json msgid "Scheduled Job Type" -msgstr "" +msgstr "Loại công việc theo lịch trình" #. Label of a Link in the Build Workspace #: frappe/core/workspace/build/build.json msgid "Scheduled Jobs Logs" -msgstr "" +msgstr "Nhật ký công việc đã lên lịch" #: frappe/core/doctype/server_script/server_script.py:157 msgid "Scheduled execution for script {0} has updated" -msgstr "" +msgstr "Thực thi theo lịch trình cho tập lệnh {0} đã được cập nhật" #: frappe/email/doctype/auto_email_report/auto_email_report.js:26 msgid "Scheduled to send" -msgstr "" +msgstr "Đã lên lịch gửi" #. Label of the scheduler_section (Section Break) field in DocType 'System #. Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Scheduler" -msgstr "" +msgstr "Trình lập lịch" #. Label of the scheduler_event (Link) field in DocType 'Scheduled Job Type' #. Name of a DocType @@ -23028,37 +23057,37 @@ msgstr "" #: frappe/core/doctype/scheduler_event/scheduler_event.json #: frappe/core/doctype/server_script/server_script.json msgid "Scheduler Event" -msgstr "" +msgstr "Lập lịch sự kiện" #: frappe/core/doctype/data_import/data_import.py:124 msgid "Scheduler Inactive" -msgstr "" +msgstr "Bộ lập lịch không hoạt động" #. Label of the scheduler_status (Data) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Scheduler Status" -msgstr "" +msgstr "Trạng thái lập lịch" #: frappe/utils/scheduler.py:247 msgid "Scheduler can not be re-enabled when maintenance mode is active." -msgstr "" +msgstr "Không thể bật lại bộ lập lịch khi chế độ bảo trì đang hoạt động." #: frappe/core/doctype/data_import/data_import.py:124 msgid "Scheduler is inactive. Cannot import data." -msgstr "" +msgstr "Bộ lập lịch không hoạt động. Không thể nhập dữ liệu." #: frappe/core/doctype/rq_job/rq_job_list.js:28 msgid "Scheduler: Active" -msgstr "" +msgstr "Người lập lịch: Đang hoạt động" #: frappe/core/doctype/rq_job/rq_job_list.js:30 msgid "Scheduler: Inactive" -msgstr "" +msgstr "Người lập lịch: Không hoạt động" #. Label of the scope (Data) field in DocType 'OAuth Scope' #: frappe/integrations/doctype/oauth_scope/oauth_scope.json msgid "Scope" -msgstr "" +msgstr "Phạm vi" #. Label of the sb_scope_section (Section Break) field in DocType 'Connected #. App' @@ -23073,12 +23102,12 @@ msgstr "" #: frappe/integrations/doctype/oauth_client/oauth_client.json #: frappe/integrations/doctype/token_cache/token_cache.json msgid "Scopes" -msgstr "" +msgstr "Phạm vi" #. Label of the scopes_supported (Small Text) field in DocType 'OAuth Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "Scopes Supported" -msgstr "" +msgstr "Phạm vi được hỗ trợ" #. Label of the report_script (Code) field in DocType 'Report' #. Label of the script (Code) field in DocType 'Server Script' @@ -23093,22 +23122,22 @@ msgstr "" #: frappe/website/doctype/web_page/web_page.json #: frappe/website/doctype/website_theme/website_theme.json msgid "Script" -msgstr "" +msgstr "Kịch bản" #. Name of a role #: frappe/core/doctype/server_script/server_script.json msgid "Script Manager" -msgstr "" +msgstr "Trình quản lý tập lệnh" #. Option for the 'Report Type' (Select) field in DocType 'Report' #: frappe/core/doctype/report/report.json msgid "Script Report" -msgstr "" +msgstr "Báo cáo kịch bản" #. Label of the script_type (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "Script Type" -msgstr "" +msgstr "Loại tập lệnh" #. Description of a DocType #: frappe/website/doctype/website_script/website_script.json @@ -23120,17 +23149,17 @@ msgstr "" #: frappe/core/workspace/build/build.json #: frappe/website/doctype/web_page/web_page.json msgid "Scripting" -msgstr "" +msgstr "Viết kịch bản" #. Label of the section_break_6 (Section Break) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Scripting / Style" -msgstr "" +msgstr "Viết kịch bản / Phong cách" #. Label of the scripts_section (Section Break) field in DocType 'Letter Head' #: frappe/printing/doctype/letter_head/letter_head.json msgid "Scripts" -msgstr "" +msgstr "Kịch bản" #. Label of the search_section (Section Break) field in DocType 'System #. Settings' @@ -23139,98 +23168,98 @@ msgstr "" #: frappe/public/js/frappe/form/link_selector.js:46 #: frappe/public/js/frappe/list/list_sidebar_stat.html:4 #: frappe/public/js/frappe/ui/address_autocomplete/autocomplete_dialog.js:20 -#: frappe/public/js/frappe/ui/sidebar/sidebar.js:282 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:302 #: frappe/public/js/frappe/ui/toolbar/search.js:49 #: frappe/public/js/frappe/ui/toolbar/search.js:68 #: frappe/templates/discussions/search.html:2 #: frappe/templates/includes/search_template.html:26 msgid "Search" -msgstr "" +msgstr "Tìm kiếm" #. Label of the search_bar (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Search Bar" -msgstr "" +msgstr "Thanh tìm kiếm" #. Label of the search_fields (Data) field in DocType 'DocType' #. Label of the search_fields (Data) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Search Fields" -msgstr "" +msgstr "Trường tìm kiếm" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:260 msgid "Search Help" -msgstr "" +msgstr "Tìm kiếm Trợ giúp" #. Label of the allowed_in_global_search (Table) field in DocType 'Global #. Search Settings' #: frappe/desk/doctype/global_search_settings/global_search_settings.json msgid "Search Priorities" -msgstr "" +msgstr "Ưu tiên tìm kiếm" #: frappe/public/js/frappe/file_uploader/FileBrowser.vue:132 msgid "Search Results" -msgstr "" +msgstr "Kết quả tìm kiếm" #: frappe/public/js/frappe/file_uploader/FileBrowser.vue:13 msgid "Search by filename or extension" -msgstr "" +msgstr "Tìm kiếm theo tên tệp hoặc phần mở rộng" -#: frappe/core/doctype/doctype/doctype.py:1496 +#: frappe/core/doctype/doctype/doctype.py:1499 msgid "Search field {0} is not valid" -msgstr "" +msgstr "Trường tìm kiếm {0} không hợp lệ" #: frappe/public/js/print_format_builder/PrintFormatControls.vue:87 msgid "Search fields" -msgstr "" +msgstr "Tìm kiếm trường" #: frappe/public/js/form_builder/components/AddFieldButton.vue:19 msgid "Search fieldtypes..." -msgstr "" +msgstr "Tìm kiếm các loại trường..." #: frappe/public/js/frappe/ui/toolbar/search.js:50 #: frappe/public/js/frappe/ui/toolbar/search.js:69 msgid "Search for anything" -msgstr "" +msgstr "Tìm kiếm bất cứ điều gì" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:372 #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:378 msgid "Search for {0}" -msgstr "" +msgstr "Tìm kiếm {0}" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:235 msgid "Search in a document type" -msgstr "" +msgstr "Tìm kiếm trong loại tài liệu" #: frappe/public/js/form_builder/components/SearchBox.vue:8 msgid "Search properties..." -msgstr "" +msgstr "Tìm kiếm bất động sản..." #: frappe/templates/includes/search_box.html:8 msgid "Search results for" -msgstr "" +msgstr "Kết quả tìm kiếm cho" #: frappe/templates/includes/navbar/navbar_search.html:6 #: frappe/templates/includes/search_box.html:2 #: frappe/templates/includes/search_template.html:23 msgid "Search..." -msgstr "" +msgstr "Tìm kiếm..." #: frappe/public/js/frappe/ui/toolbar/search.js:210 msgid "Searching ..." -msgstr "" +msgstr "Đang tìm kiếm ..." #: frappe/public/js/frappe/form/controls/duration.js:35 msgctxt "Duration" msgid "Seconds" -msgstr "" +msgstr "Giây" #. Option for the 'Type' (Select) field in DocType 'Web Template' #: frappe/public/js/form_builder/components/Section.vue:263 #: frappe/website/doctype/web_template/web_template.json msgid "Section" -msgstr "" +msgstr "Phần" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -23245,53 +23274,57 @@ msgstr "" #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Section Break" -msgstr "" +msgstr "Ngắt phần" #: frappe/printing/page/print_format_builder/print_format_builder.js:421 msgid "Section Heading" -msgstr "" +msgstr "Tiêu đề phần" #. Label of the section_id (Data) field in DocType 'Web Page Block' #: frappe/website/doctype/web_page_block/web_page_block.json msgid "Section ID" -msgstr "" +msgstr "ID phần" #: frappe/public/js/form_builder/components/Section.vue:28 #: frappe/public/js/print_format_builder/PrintFormatSection.vue:8 msgid "Section Title" -msgstr "" +msgstr "Tiêu đề phần" #: frappe/public/js/form_builder/components/Section.vue:217 #: frappe/public/js/form_builder/components/Section.vue:240 msgid "Section must have at least one column" -msgstr "" +msgstr "Phần phải có ít nhất một cột" + +#: frappe/core/doctype/user/user.py:1474 +msgid "Security Alert: Your account is being impersonated" +msgstr "Cảnh báo bảo mật: Tài khoản của bạn đang bị mạo danh" #. Label of the sb3 (Section Break) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Security Settings" -msgstr "" +msgstr "Cài đặt bảo mật" #: frappe/public/js/frappe/ui/notifications/notifications.js:349 msgid "See all Activity" -msgstr "" +msgstr "Xem tất cả Hoạt động" #: frappe/public/js/frappe/views/reports/query_report.js:879 msgid "See all past reports." -msgstr "" +msgstr "Xem tất cả các báo cáo trước đây." #: frappe/public/js/frappe/form/form.js:1284 #: frappe/website/doctype/contact_us_settings/contact_us_settings.js:4 msgid "See on Website" msgstr "" -#: frappe/website/doctype/web_form/templates/web_form.html:160 +#: frappe/website/doctype/web_form/templates/web_form.html:169 msgctxt "Button in web form" msgid "See previous responses" -msgstr "" +msgstr "Xem các phản hồi trước đó" #: frappe/integrations/doctype/slack_webhook_url/slack_webhook_url.py:49 msgid "See the document at {0}" -msgstr "" +msgstr "Xem tài liệu tại {0}" #. Label of the seen (Check) field in DocType 'Comment' #. Label of the seen (Check) field in DocType 'Communication' @@ -23303,17 +23336,17 @@ msgstr "" #: frappe/core/doctype/error_log/error_log_list.js:5 #: frappe/desk/doctype/notification_settings/notification_settings.json msgid "Seen" -msgstr "" +msgstr "Đã xem" #. Label of the seen_by_section (Section Break) field in DocType 'Note' #: frappe/desk/doctype/note/note.json msgid "Seen By" -msgstr "" +msgstr "Được xem bởi" #. Label of the seen_by (Table) field in DocType 'Note' #: frappe/desk/doctype/note/note.json msgid "Seen By Table" -msgstr "" +msgstr "Xem theo bảng" #. Label of the select (Check) field in DocType 'Custom DocPerm' #. Option for the 'Type' (Select) field in DocType 'DocField' @@ -23336,113 +23369,113 @@ msgstr "" #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Select" -msgstr "" +msgstr "Chọn" #: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:8 #: frappe/public/js/frappe/data_import/data_exporter.js:150 -#: frappe/public/js/frappe/form/controls/multicheck.js:167 +#: frappe/public/js/frappe/form/controls/multicheck.js:171 #: frappe/public/js/frappe/form/controls/multiselect_list.js:6 #: frappe/public/js/frappe/form/grid_row.js:499 -#: frappe/public/js/frappe/views/reports/report_view.js:1606 +#: frappe/public/js/frappe/views/reports/report_view.js:1612 msgid "Select All" -msgstr "" +msgstr "Chọn tất cả" #: frappe/public/js/frappe/views/communication.js:202 #: frappe/public/js/frappe/views/communication.js:653 #: frappe/public/js/frappe/views/interaction.js:93 #: frappe/public/js/frappe/views/interaction.js:155 msgid "Select Attachments" -msgstr "" +msgstr "Chọn Tệp đính kèm" -#: frappe/custom/doctype/client_script/client_script.js:27 -#: frappe/custom/doctype/client_script/client_script.js:30 +#: frappe/custom/doctype/client_script/client_script.js:31 +#: frappe/custom/doctype/client_script/client_script.js:34 msgid "Select Child Table" -msgstr "" +msgstr "Chọn bảng con" -#: frappe/public/js/frappe/views/reports/report_view.js:382 +#: frappe/public/js/frappe/views/reports/report_view.js:384 msgid "Select Column" -msgstr "" +msgstr "Chọn Cột" #: frappe/printing/page/print_format_builder/print_format_builder_field.html:42 #: frappe/public/js/frappe/form/print_utils.js:75 msgid "Select Columns" -msgstr "" +msgstr "Chọn cột" #: frappe/desk/page/setup_wizard/setup_wizard.js:399 msgid "Select Country" -msgstr "" +msgstr "Chọn quốc gia" -#: frappe/desk/page/setup_wizard/setup_wizard.js:415 +#: frappe/desk/page/setup_wizard/setup_wizard.js:412 msgid "Select Currency" -msgstr "" +msgstr "Chọn loại tiền tệ" #. Label of the dashboard_name (Link) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json #: frappe/public/js/frappe/utils/dashboard_utils.js:246 msgid "Select Dashboard" -msgstr "" +msgstr "Chọn Bảng điều khiển" #. Option for the 'Timespan' (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Select Date Range" -msgstr "" +msgstr "Chọn phạm vi ngày" #. Label of the doc_type (Link) field in DocType 'Web Form' #: frappe/public/js/form_builder/components/controls/FetchFromControl.vue:28 #: frappe/public/js/frappe/doctype/index.js:178 #: frappe/website/doctype/web_form/web_form.json msgid "Select DocType" -msgstr "" +msgstr "Chọn Loại tài liệu" #. Label of the reference_doctype (Link) field in DocType 'Data Export' #: frappe/core/doctype/data_export/data_export.json msgid "Select Doctype" -msgstr "" +msgstr "Chọn Loại tài liệu" #: frappe/printing/page/print_format_builder_beta/print_format_builder_beta.js:50 #: frappe/workflow/page/workflow_builder/workflow_builder.js:50 msgid "Select Document Type" -msgstr "" +msgstr "Chọn loại tài liệu" #: frappe/core/page/permission_manager/permission_manager.js:180 msgid "Select Document Type or Role to start." -msgstr "" +msgstr "Chọn Loại tài liệu hoặc Vai trò để bắt đầu." #: frappe/core/page/permission_manager/permission_manager_help.html:101 msgid "Select Document Types to set which User Permissions are used to limit access." -msgstr "" +msgstr "Chọn Loại tài liệu để đặt Quyền của người dùng nào được sử dụng để giới hạn quyền truy cập." #: frappe/public/js/form_builder/components/controls/FetchFromControl.vue:33 #: frappe/public/js/frappe/doctype/index.js:207 -#: frappe/public/js/frappe/form/toolbar.js:874 +#: frappe/public/js/frappe/form/toolbar.js:875 msgid "Select Field" -msgstr "" +msgstr "Chọn trường" #: frappe/public/js/frappe/ui/group_by/group_by.html:35 #: frappe/public/js/frappe/ui/group_by/group_by.js:141 msgid "Select Field..." -msgstr "" +msgstr "Chọn trường..." #: frappe/public/js/frappe/form/grid_row.js:491 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:181 msgid "Select Fields" -msgstr "" +msgstr "Chọn trường" #: frappe/public/js/frappe/list/list_settings.js:234 msgid "Select Fields (Up to {0})" -msgstr "" +msgstr "Chọn trường (Tối đa {0})" #: frappe/public/js/frappe/data_import/data_exporter.js:148 msgid "Select Fields To Insert" -msgstr "" +msgstr "Chọn trường để chèn" #: frappe/public/js/frappe/data_import/data_exporter.js:149 msgid "Select Fields To Update" -msgstr "" +msgstr "Chọn trường để cập nhật" -#: frappe/public/js/frappe/list/list_view.js:2004 +#: frappe/public/js/frappe/list/list_view.js:2015 msgid "Select Filters" -msgstr "" +msgstr "Chọn Bộ lọc" #: frappe/desk/doctype/event/event.py:112 msgid "Select Google Calendar to which event should be synced." @@ -23454,7 +23487,7 @@ msgstr "" #: frappe/public/js/frappe/ui/group_by/group_by.html:10 msgid "Select Group By..." -msgstr "" +msgstr "Chọn Nhóm Theo..." #: frappe/public/js/frappe/list/list_view_select.js:167 msgid "Select Kanban" @@ -23462,136 +23495,136 @@ msgstr "" #: frappe/desk/page/setup_wizard/setup_wizard.js:391 msgid "Select Language" -msgstr "" +msgstr "Chọn ngôn ngữ" #. Label of the list_name (Select) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Select List View" -msgstr "" +msgstr "Chọn Xem danh sách" #: frappe/public/js/frappe/data_import/data_exporter.js:159 msgid "Select Mandatory" -msgstr "" +msgstr "Chọn Bắt buộc" #: frappe/custom/doctype/customize_form/customize_form.js:290 msgid "Select Module" -msgstr "" +msgstr "Chọn Mô-đun" #: frappe/printing/page/print/print.js:197 #: frappe/printing/page/print/print.js:652 msgid "Select Network Printer" -msgstr "" +msgstr "Chọn Máy in mạng" #. Label of the page_name (Link) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Select Page" -msgstr "" +msgstr "Chọn Trang" #: frappe/printing/page/print_format_builder_beta/print_format_builder_beta.js:68 #: frappe/public/js/frappe/views/communication.js:178 msgid "Select Print Format" -msgstr "" +msgstr "Chọn Định dạng in" #: frappe/printing/page/print_format_builder/print_format_builder.js:82 msgid "Select Print Format to Edit" -msgstr "" +msgstr "Chọn định dạng in để chỉnh sửa" #. Label of the report_name (Link) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Select Report" -msgstr "" +msgstr "Chọn Báo cáo" #: frappe/printing/page/print_format_builder/print_format_builder.js:631 msgid "Select Table Columns for {0}" -msgstr "" +msgstr "Chọn các cột trong bảng cho {0}" -#: frappe/desk/page/setup_wizard/setup_wizard.js:408 +#: frappe/desk/page/setup_wizard/setup_wizard.js:405 msgid "Select Time Zone" -msgstr "" +msgstr "Chọn múi giờ" #. Label of the transaction_type (Autocomplete) field in DocType 'Document #. Naming Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Select Transaction" -msgstr "" +msgstr "Chọn Giao dịch" #: frappe/workflow/page/workflow_builder/workflow_builder.js:68 msgid "Select Workflow" -msgstr "" +msgstr "Chọn Quy trình làm việc" #. Label of the workspace_name (Link) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Select Workspace" -msgstr "" +msgstr "Chọn Không gian làm việc" #: frappe/website/doctype/website_settings/website_settings.js:23 msgid "Select a Brand Image first." -msgstr "" +msgstr "Chọn Hình ảnh Thương hiệu trước tiên." #: frappe/printing/page/print_format_builder/print_format_builder.js:108 msgid "Select a DocType to make a new format" -msgstr "" +msgstr "Chọn Loại tài liệu để tạo định dạng mới" #: frappe/public/js/form_builder/components/Sidebar.vue:53 msgid "Select a field to edit its properties." -msgstr "" +msgstr "Chọn một trường để chỉnh sửa thuộc tính của nó." #: frappe/public/js/frappe/views/treeview.js:366 msgid "Select a group {0} first." -msgstr "" +msgstr "Trước tiên hãy chọn nhóm {0}." -#: frappe/core/doctype/doctype/doctype.py:2041 +#: frappe/core/doctype/doctype/doctype.py:2044 msgid "Select a valid Sender Field for creating documents from Email" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:2025 +#: frappe/core/doctype/doctype/doctype.py:2028 msgid "Select a valid Subject field for creating documents from Email" msgstr "" #: frappe/public/js/frappe/form/form_tour.js:321 msgid "Select an Image" -msgstr "" +msgstr "Chọn một hình ảnh" #: frappe/printing/page/print_format_builder/print_format_builder_start.html:2 msgid "Select an existing format to edit or start a new format." -msgstr "" +msgstr "Chọn một định dạng hiện có để chỉnh sửa hoặc bắt đầu một định dạng mới." #. Description of the 'Brand Image' (Attach Image) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Select an image of approx width 150px with a transparent background for best results." -msgstr "" +msgstr "Chọn hình ảnh có chiều rộng khoảng 150px với nền trong suốt để có kết quả tốt nhất." #: frappe/public/js/frappe/list/bulk_operations.js:36 msgid "Select atleast 1 record for printing" -msgstr "" +msgstr "Chọn ít nhất 1 bản ghi để in" #: frappe/core/doctype/success_action/success_action.js:18 msgid "Select atleast 2 actions" -msgstr "" +msgstr "Chọn ít nhất 2 hành động" -#: frappe/public/js/frappe/list/list_view.js:1465 +#: frappe/public/js/frappe/list/list_view.js:1476 msgctxt "Description of a list view shortcut" msgid "Select list item" -msgstr "" +msgstr "Chọn mục danh sách" -#: frappe/public/js/frappe/list/list_view.js:1417 -#: frappe/public/js/frappe/list/list_view.js:1433 +#: frappe/public/js/frappe/list/list_view.js:1428 +#: frappe/public/js/frappe/list/list_view.js:1444 msgctxt "Description of a list view shortcut" msgid "Select multiple list items" -msgstr "" +msgstr "Chọn nhiều mục danh sách" #: frappe/public/js/frappe/views/calendar/calendar.js:167 msgid "Select or drag across time slots to create a new event." -msgstr "" +msgstr "Chọn hoặc kéo qua các khe thời gian để tạo sự kiện mới." #: frappe/public/js/frappe/list/bulk_operations.js:239 msgid "Select records for assignment" -msgstr "" +msgstr "Chọn bản ghi để phân công" #: frappe/public/js/frappe/list/bulk_operations.js:260 msgid "Select records for removing assignment" -msgstr "" +msgstr "Chọn bản ghi để xóa bài tập" #. Description of the 'Insert After' (Select) field in DocType 'Custom Field' #: frappe/custom/doctype/custom_field/custom_field.json @@ -23600,7 +23633,7 @@ msgstr "" #: frappe/public/js/frappe/utils/diffview.js:102 msgid "Select two versions to view the diff." -msgstr "" +msgstr "Chọn hai phiên bản để xem sự khác biệt." #: frappe/public/js/frappe/form/link_selector.js:24 #: frappe/public/js/frappe/form/multi_select_dialog.js:80 @@ -23608,42 +23641,42 @@ msgstr "" #: frappe/public/js/frappe/list/list_view_select.js:148 #: frappe/public/js/print_format_builder/Preview.vue:90 msgid "Select {0}" -msgstr "" +msgstr "Chọn {0}" #: frappe/model/workflow.py:138 msgid "Self approval is not allowed" -msgstr "" +msgstr "Không được phép tự phê duyệt" #: frappe/www/contact.html:41 msgid "Send" -msgstr "" +msgstr "Gửi" #: frappe/public/js/frappe/views/communication.js:26 msgctxt "Send Email" msgid "Send" -msgstr "" +msgstr "Gửi" #. Description of the 'Minutes Offset' (Int) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Send at the earliest this number of minutes before or after the reference datetime. The actual sending may be delayed by up to 5 minutes due to the scheduler's trigger cadence." -msgstr "" +msgstr "Gửi sớm nhất số phút này trước hoặc sau ngày giờ tham chiếu. Việc gửi thực tế có thể bị trì hoãn tối đa 5 phút do nhịp kích hoạt của bộ lập lịch." #. Label of the send_after (Datetime) field in DocType 'Communication' #. Label of the send_after (Datetime) field in DocType 'Email Queue' #: frappe/core/doctype/communication/communication.json #: frappe/email/doctype/email_queue/email_queue.json msgid "Send After" -msgstr "" +msgstr "Gửi Sau" #. Label of the event (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Send Alert On" -msgstr "" +msgstr "Gửi thông báo vào" #. Label of the raw_html (Check) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json msgid "Send As Raw HTML" -msgstr "" +msgstr "Gửi dưới dạng HTML thô" #. Label of the send_email_alert (Check) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json @@ -23676,12 +23709,12 @@ msgstr "" #. Account' #: frappe/email/doctype/email_account/email_account.json msgid "Send Notification to" -msgstr "" +msgstr "Gửi thông báo tới" #. Label of the document_follow_notify (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Send Notifications For Documents Followed By Me" -msgstr "" +msgstr "Gửi thông báo cho các tài liệu được tôi theo dõi" #. Label of the thread_notify (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -23690,27 +23723,27 @@ msgstr "" #: frappe/email/doctype/auto_email_report/auto_email_report.js:21 msgid "Send Now" -msgstr "" +msgstr "Gửi ngay" #. Label of the send_print_as_pdf (Check) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Send Print as PDF" -msgstr "" +msgstr "Gửi In dưới dạng PDF" #: frappe/public/js/frappe/views/communication.js:168 msgid "Send Read Receipt" -msgstr "" +msgstr "Gửi biên nhận đã đọc" #. Label of the send_system_notification (Check) field in DocType #. 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Send System Notification" -msgstr "" +msgstr "Gửi thông báo hệ thống" #. Label of the send_to_all_assignees (Check) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Send To All Assignees" -msgstr "" +msgstr "Gửi tới tất cả người được giao" #. Label of the send_welcome_email (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -23720,18 +23753,18 @@ msgstr "" #. Description of the 'Reference Date' (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Send alert if date matches this field's value" -msgstr "" +msgstr "Gửi thông báo nếu ngày khớp với giá trị của trường này" #. Description of the 'Reference Datetime' (Select) field in DocType #. 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Send alert if datetime matches this field's value" -msgstr "" +msgstr "Gửi thông báo nếu ngày giờ khớp với giá trị của trường này" #. Description of the 'Value Changed' (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Send alert if this field's value changes" -msgstr "" +msgstr "Gửi thông báo nếu giá trị của trường này thay đổi" #. Label of the send_reminder (Check) field in DocType 'Event' #: frappe/desk/doctype/event/event.json @@ -23742,7 +23775,7 @@ msgstr "" #. 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Send days before or after the reference date" -msgstr "" +msgstr "Gửi ngày trước hoặc sau ngày tham chiếu" #. Description of the 'Send Email On State' (Check) field in DocType 'Workflow #. Document State' @@ -23762,12 +23795,12 @@ msgstr "" #: frappe/public/js/frappe/views/communication.js:162 msgid "Send me a copy" -msgstr "" +msgstr "Gửi cho tôi một bản sao" #. Label of the send_if_data (Check) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Send only if there is any data" -msgstr "" +msgstr "Chỉ gửi nếu có bất kỳ dữ liệu nào" #. Label of the send_unsubscribe_message (Check) field in DocType 'Email #. Account' @@ -23785,7 +23818,7 @@ msgstr "" #: frappe/email/doctype/email_queue/email_queue.json #: frappe/email/doctype/notification/notification.json msgid "Sender" -msgstr "" +msgstr "Người gửi" #. Label of the sender_email (Data) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json @@ -23799,33 +23832,33 @@ msgstr "" msgid "Sender Email Field" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:2044 +#: frappe/core/doctype/doctype/doctype.py:2047 msgid "Sender Field should have Email in options" msgstr "" #. Label of the sender_name (Data) field in DocType 'SMS Log' #: frappe/core/doctype/sms_log/sms_log.json msgid "Sender Name" -msgstr "" +msgstr "Tên người gửi" #. Label of the sender_name_field (Data) field in DocType 'DocType' #. Label of the sender_name_field (Data) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Sender Name Field" -msgstr "" +msgstr "Trường tên người gửi" #. Option for the 'Service' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Sendgrid" -msgstr "" +msgstr "Gửi lưới" #. Option for the 'Delivery Status' (Select) field in DocType 'Communication' #. Option for the 'Status' (Select) field in DocType 'Email Queue' #: frappe/core/doctype/communication/communication.json #: frappe/email/doctype/email_queue/email_queue.json msgid "Sending" -msgstr "" +msgstr "Đang gửi" #. Option for the 'Delivery Status' (Select) field in DocType 'Communication' #. Option for the 'Sent or Received' (Select) field in DocType 'Communication' @@ -23835,34 +23868,34 @@ msgstr "" #: frappe/email/doctype/email_queue/email_queue.json #: frappe/email/doctype/email_queue_recipient/email_queue_recipient.json msgid "Sent" -msgstr "" +msgstr "Đã gửi" #. Label of the sent_folder_name (Data) field in DocType 'Email Account' #. Label of the sent_folder_name (Data) field in DocType 'Email Domain' #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "Sent Folder Name" -msgstr "" +msgstr "Tên thư mục đã gửi" #. Label of the sent_on (Date) field in DocType 'SMS Log' #: frappe/core/doctype/sms_log/sms_log.json msgid "Sent On" -msgstr "" +msgstr "Đã gửi vào" #. Label of the read_receipt (Check) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Sent Read Receipt" -msgstr "" +msgstr "Đã gửi Đã đọc Biên nhận" #. Label of the sent_to (Code) field in DocType 'SMS Log' #: frappe/core/doctype/sms_log/sms_log.json msgid "Sent To" -msgstr "" +msgstr "Đã gửi tới" #. Label of the sent_or_received (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Sent or Received" -msgstr "" +msgstr "Đã gửi hoặc đã nhận" #. Option for the 'Event Category' (Select) field in DocType 'Event' #: frappe/desk/doctype/event/event.json @@ -23872,7 +23905,7 @@ msgstr "" #. Option for the 'Item Type' (Select) field in DocType 'Navbar Item' #: frappe/core/doctype/navbar_item/navbar_item.json msgid "Separator" -msgstr "" +msgstr "Dấu phân cách" #. Label of the sequence_id (Float) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json @@ -23883,35 +23916,35 @@ msgstr "" #. Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Series List for this Transaction" -msgstr "" +msgstr "Danh sách chuỗi cho giao dịch này" #: frappe/core/doctype/document_naming_settings/document_naming_settings.py:115 msgid "Series Updated for {}" -msgstr "" +msgstr "Đã cập nhật loạt bài cho {}" #: frappe/core/doctype/document_naming_settings/document_naming_settings.py:223 msgid "Series counter for {} updated to {} successfully" -msgstr "" +msgstr "Bộ đếm chuỗi cho {} được cập nhật thành {} thành công" -#: frappe/core/doctype/doctype/doctype.py:1127 +#: frappe/core/doctype/doctype/doctype.py:1130 #: frappe/core/doctype/document_naming_settings/document_naming_settings.py:170 msgid "Series {0} already used in {1}" -msgstr "" +msgstr "Dòng {0} đã được sử dụng trong {1}" #. Option for the 'Action Type' (Select) field in DocType 'DocType Action' #: frappe/core/doctype/doctype_action/doctype_action.json msgid "Server Action" -msgstr "" +msgstr "Hành động của Máy chủ" -#: frappe/app.py:399 frappe/public/js/frappe/request.js:609 +#: frappe/app.py:399 frappe/public/js/frappe/request.js:610 #: frappe/www/error.html:36 frappe/www/error.py:15 msgid "Server Error" -msgstr "" +msgstr "Lỗi Máy Chủ" #. Label of the server_ip (Data) field in DocType 'Network Printer Settings' #: frappe/printing/doctype/network_printer_settings/network_printer_settings.json msgid "Server IP" -msgstr "" +msgstr "IP máy chủ" #. Label of the server_script (Link) field in DocType 'Scheduled Job Type' #. Name of a DocType @@ -23920,11 +23953,11 @@ msgstr "" #: frappe/core/doctype/server_script/server_script.json #: frappe/core/workspace/build/build.json msgid "Server Script" -msgstr "" +msgstr "Tập lệnh máy chủ" #: frappe/utils/safe_exec.py:98 msgid "Server Scripts are disabled. Please enable server scripts from bench configuration." -msgstr "" +msgstr "Tập lệnh máy chủ bị vô hiệu hóa. Vui lòng kích hoạt tập lệnh máy chủ từ cấu hình băng ghế dự bị." #: frappe/core/doctype/server_script/server_script.js:39 msgid "Server Scripts feature is not available on this site." @@ -23932,15 +23965,15 @@ msgstr "" #: frappe/public/js/frappe/file_uploader/FileUploader.vue:641 msgid "Server error during upload. The file might be corrupted." -msgstr "" +msgstr "Lỗi máy chủ trong quá trình tải lên. Tập tin có thể bị hỏng." -#: frappe/public/js/frappe/request.js:252 +#: frappe/public/js/frappe/request.js:253 msgid "Server failed to process this request because of a concurrent conflicting request. Please try again." -msgstr "" +msgstr "Máy chủ không thể xử lý yêu cầu này do có yêu cầu xung đột đồng thời. Vui lòng thử lại." -#: frappe/public/js/frappe/request.js:244 +#: frappe/public/js/frappe/request.js:245 msgid "Server was too busy to process this request. Please try again." -msgstr "" +msgstr "Máy chủ quá bận để xử lý yêu cầu này. Vui lòng thử lại." #. Label of the service (Select) field in DocType 'Email Account' #. Label of the integration_request_service (Data) field in DocType @@ -23948,52 +23981,52 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/integrations/doctype/integration_request/integration_request.json msgid "Service" -msgstr "" +msgstr "Dịch vụ" #. Label of the session_created (Datetime) field in DocType 'User Session #. Display' #: frappe/core/doctype/user_session_display/user_session_display.json msgid "Session Created" -msgstr "" +msgstr "Phiên đã tạo" #. Name of a DocType #: frappe/core/doctype/session_default/session_default.json msgid "Session Default" -msgstr "" +msgstr "Phiên mặc định" #. Name of a DocType #: frappe/core/doctype/session_default_settings/session_default_settings.json msgid "Session Default Settings" -msgstr "" +msgstr "Cài đặt mặc định phiên" #. Label of the session_defaults (Table) field in DocType 'Session Default #. Settings' #: frappe/core/doctype/session_default_settings/session_default_settings.json #: frappe/public/js/frappe/ui/toolbar/toolbar.js:335 msgid "Session Defaults" -msgstr "" +msgstr "Mặc định phiên" #: frappe/public/js/frappe/ui/toolbar/toolbar.js:320 msgid "Session Defaults Saved" -msgstr "" +msgstr "Mặc định phiên đã lưu" #: frappe/app.py:376 msgid "Session Expired" -msgstr "" +msgstr "Phiên đã hết hạn" #. Label of the session_expiry (Data) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Session Expiry (idle timeout)" -msgstr "" +msgstr "Phiên hết hạn (thời gian chờ không hoạt động)" #: frappe/core/doctype/system_settings/system_settings.py:125 msgid "Session Expiry must be in format {0}" -msgstr "" +msgstr "Hết hạn phiên phải ở định dạng {0}" #. Label of the sessions_tab (Tab Break) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Sessions" -msgstr "" +msgstr "Phiên" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.js:400 #: frappe/desk/doctype/dashboard_chart/dashboard_chart.js:487 @@ -24001,22 +24034,22 @@ msgstr "" #: frappe/desk/doctype/number_card/number_card.js:404 #: frappe/public/js/frappe/widgets/chart_widget.js:447 msgid "Set" -msgstr "" +msgstr "Đặt" #: frappe/public/js/frappe/ui/filters/filter.js:606 msgctxt "Field value is set" msgid "Set" -msgstr "" +msgstr "Đặt" #. Label of the set_banner_from_image (Button) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Set Banner from Image" -msgstr "" +msgstr "Đặt biểu ngữ từ hình ảnh" #: frappe/public/js/frappe/views/reports/query_report.js:201 msgid "Set Chart" -msgstr "" +msgstr "Đặt biểu đồ" #. Description of the 'Chart Options' (Code) field in DocType 'Dashboard' #: frappe/desk/doctype/dashboard/dashboard.json @@ -24026,54 +24059,54 @@ msgstr "" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.js:467 #: frappe/desk/doctype/number_card/number_card.js:384 msgid "Set Dynamic Filters" -msgstr "" +msgstr "Đặt bộ lọc động" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.js:381 #: frappe/desk/doctype/number_card/number_card.js:292 #: frappe/public/js/form_builder/components/Field.vue:80 #: frappe/website/doctype/web_form/web_form.js:285 msgid "Set Filters" -msgstr "" +msgstr "Đặt bộ lọc" #: frappe/public/js/frappe/widgets/chart_widget.js:436 #: frappe/public/js/frappe/widgets/quick_list_widget.js:105 msgid "Set Filters for {0}" -msgstr "" +msgstr "Đặt Bộ lọc cho {0}" #: frappe/public/js/frappe/views/reports/query_report.js:2227 msgid "Set Level" -msgstr "" +msgstr "Đặt cấp độ" #: frappe/core/doctype/user_type/user_type.py:92 msgid "Set Limit" -msgstr "" +msgstr "Đặt giới hạn" #. Description of the 'Setup Series for transactions' (Section Break) field in #. DocType 'Document Naming Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Set Naming Series options on your transactions." -msgstr "" +msgstr "Đặt tùy chọn Chuỗi đặt tên cho các giao dịch của bạn." #. Label of the new_password (Password) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Set New Password" -msgstr "" +msgstr "Đặt mật khẩu mới" #: frappe/desk/page/backups/backups.js:8 msgid "Set Number of Backups" -msgstr "" +msgstr "Đặt số lượng bản sao lưu" #: frappe/www/update-password.html:32 msgid "Set Password" -msgstr "" +msgstr "Đặt mật khẩu" #: frappe/custom/doctype/customize_form/customize_form.js:112 msgid "Set Permissions" -msgstr "" +msgstr "Đặt quyền" #: frappe/printing/page/print_format_builder/print_format_builder.js:471 msgid "Set Properties" -msgstr "" +msgstr "Đặt thuộc tính" #. Label of the property_section (Section Break) field in DocType #. 'Notification' @@ -24081,52 +24114,52 @@ msgstr "" #. 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Set Property After Alert" -msgstr "" +msgstr "Đặt thuộc tính sau thông báo" #: frappe/public/js/frappe/form/link_selector.js:216 #: frappe/public/js/frappe/form/link_selector.js:217 msgid "Set Quantity" -msgstr "" +msgstr "Đặt số lượng" #. Label of the set_role_for (Select) field in DocType 'Role Permission for #. Page and Report' #: frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.json msgid "Set Role For" -msgstr "" +msgstr "Đặt vai trò cho" -#: frappe/core/doctype/user/user.js:129 +#: frappe/core/doctype/user/user.js:132 #: frappe/core/page/permission_manager/permission_manager.js:72 msgid "Set User Permissions" -msgstr "" +msgstr "Đặt quyền người dùng" #. Label of the value (Small Text) field in DocType 'Property Setter' #: frappe/custom/doctype/property_setter/property_setter.json msgid "Set Value" -msgstr "" +msgstr "Đặt giá trị" #: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:103 #: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:162 msgid "Set all private" -msgstr "" +msgstr "Đặt tất cả ở chế độ riêng tư" #: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:103 msgid "Set all public" -msgstr "" +msgstr "Đặt tất cả công khai" #: frappe/printing/doctype/print_format/print_format.js:50 msgid "Set as Default" -msgstr "" +msgstr "Đặt làm mặc định" #: frappe/website/doctype/website_theme/website_theme.js:33 msgid "Set as Default Theme" -msgstr "" +msgstr "Đặt làm chủ đề mặc định" #. Option for the 'Naming Rule' (Select) field in DocType 'DocType' #. Option for the 'Naming Rule' (Select) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Set by user" -msgstr "" +msgstr "Được đặt bởi người dùng" #: frappe/public/js/frappe/utils/dashboard_utils.js:162 msgid "Set dynamic filter values in JavaScript for the required fields here." @@ -24140,22 +24173,22 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Set non-standard precision for a Float or Currency field" -msgstr "" +msgstr "Đặt độ chính xác không chuẩn cho trường Thực tế hoặc Tiền tệ" #. Description of the 'Precision' (Select) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Set non-standard precision for a Float, Currency or Percent field" -msgstr "" +msgstr "Đặt độ chính xác không chuẩn cho trường Thực tế, Tiền tệ hoặc Phần trăm" #. Label of the set_only_once (Check) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Set only once" -msgstr "" +msgstr "Chỉ đặt một lần" #. Description of the 'Max attachment size' (Int) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Set size in MB" -msgstr "" +msgstr "Đặt kích thước tính bằng MB" #. Description of the 'Filters Configuration' (Code) field in DocType 'Number #. Card' @@ -24194,15 +24227,15 @@ msgstr "" #: frappe/contacts/doctype/address_template/address_template.py:33 msgid "Setting this Address Template as default as there is no other default" -msgstr "" +msgstr "Đặt Mẫu địa chỉ này làm mặc định vì không có mặc định nào khác" #: frappe/desk/doctype/global_search_settings/global_search_settings.py:86 msgid "Setting up Global Search documents." -msgstr "" +msgstr "Cài đặt tài liệu tìm kiếm toàn cục." #: frappe/desk/page/setup_wizard/setup_wizard.js:285 msgid "Setting up your system" -msgstr "" +msgstr "Thiết lập hệ thống của bạn" #. Label of the settings_tab (Tab Break) field in DocType 'DocType' #. Label of the settings_tab (Tab Break) field in DocType 'User' @@ -24218,43 +24251,43 @@ msgstr "" #: frappe/website/doctype/web_form/web_form.json #: frappe/website/doctype/web_page/web_page.json frappe/www/me.html:20 msgid "Settings" -msgstr "" +msgstr "Thiết lập" #. Label of the settings_dropdown (Table) field in DocType 'Navbar Settings' #: frappe/core/doctype/navbar_settings/navbar_settings.json msgid "Settings Dropdown" -msgstr "" +msgstr "Cài đặt thả xuống" #. Description of a DocType #: frappe/website/doctype/contact_us_settings/contact_us_settings.json msgid "Settings for Contact Us Page" -msgstr "" +msgstr "Cài đặt cho Trang Liên hệ với chúng tôi" #. Description of a DocType #: frappe/website/doctype/about_us_settings/about_us_settings.json msgid "Settings for the About Us Page" -msgstr "" +msgstr "Cài đặt cho Trang Giới thiệu về chúng tôi" #. 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:581 msgid "Setup" -msgstr "" +msgstr "Cấu hình" #: frappe/core/page/permission_manager/permission_manager_help.html:94 msgid "Setup > Customize Form" -msgstr "" +msgstr "Cài đặt > Tùy chỉnh biểu mẫu" #: frappe/core/page/permission_manager/permission_manager_help.html:8 msgid "Setup > User" -msgstr "" +msgstr "Cài đặt > Người dùng" #: frappe/core/page/permission_manager/permission_manager_help.html:100 msgid "Setup > User Permissions" -msgstr "" +msgstr "Cài đặt > Quyền của người dùng" #: frappe/public/js/frappe/views/reports/query_report.js:1933 -#: frappe/public/js/frappe/views/reports/report_view.js:1718 +#: frappe/public/js/frappe/views/reports/report_view.js:1724 msgid "Setup Auto Email" msgstr "" @@ -24262,17 +24295,17 @@ msgstr "" #: frappe/core/doctype/system_settings/system_settings.json #: frappe/desk/page/setup_wizard/setup_wizard.js:211 msgid "Setup Complete" -msgstr "" +msgstr "Thiết lập hoàn tất" #. Label of the setup_series (Section Break) field in DocType 'Document Naming #. Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Setup Series for transactions" -msgstr "" +msgstr "Chuỗi cài đặt cho giao dịch" #: frappe/desk/page/setup_wizard/setup_wizard.js:236 msgid "Setup failed" -msgstr "" +msgstr "Thiết lập không thành công" #. Label of the share (Check) field in DocType 'Custom DocPerm' #. Label of the share (Check) field in DocType 'DocPerm' @@ -24288,42 +24321,42 @@ msgstr "" #: frappe/public/js/frappe/form/templates/form_sidebar.html:134 #: frappe/public/js/frappe/form/templates/set_sharing.html:5 msgid "Share" -msgstr "" +msgstr "Chia sẻ" -#: frappe/public/js/frappe/form/sidebar/share.js:114 +#: frappe/public/js/frappe/form/sidebar/share.js:119 msgid "Share With" -msgstr "" +msgstr "Chia sẻ với" #: frappe/public/js/frappe/form/templates/set_sharing.html:63 msgid "Share this document with" -msgstr "" +msgstr "Chia sẻ tài liệu này với" -#: frappe/public/js/frappe/form/sidebar/share.js:51 +#: frappe/public/js/frappe/form/sidebar/share.js:56 msgid "Share {0} with" -msgstr "" +msgstr "Chia sẻ {0} với" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #: frappe/core/doctype/comment/comment.json msgid "Shared" -msgstr "" +msgstr "Đã chia sẻ" #: frappe/desk/form/assign_to.py:132 msgid "Shared with the following Users with Read access:{0}" -msgstr "" +msgstr "Được chia sẻ với những Người dùng có quyền truy cập Đọc sau:{0}" #. Option for the 'Address Type' (Select) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Shipping" -msgstr "" +msgstr "Vận chuyển" #: frappe/public/js/frappe/form/templates/address_list.html:31 msgid "Shipping Address" -msgstr "" +msgstr "Địa chỉ giao hàng" #. Option for the 'Address Type' (Select) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Shop" -msgstr "" +msgstr "Cửa hàng" #: frappe/utils/password_strength.py:91 msgid "Short keyboard patterns are easy to guess" @@ -24334,7 +24367,7 @@ msgstr "" #: frappe/desk/doctype/workspace/workspace.json #: frappe/public/js/frappe/form/grid_row_form.js:44 msgid "Shortcuts" -msgstr "" +msgstr "Phím tắt" #: frappe/public/js/frappe/widgets/base_widget.js:46 #: frappe/public/js/frappe/widgets/base_widget.js:178 @@ -24342,7 +24375,7 @@ msgstr "" #: frappe/www/update-password.html:49 frappe/www/update-password.html:60 #: frappe/www/update-password.html:120 msgid "Show" -msgstr "" +msgstr "Hiển thị" #. Label of the show_absolute_datetime_in_timeline (Check) field in DocType #. 'System Settings' @@ -24351,21 +24384,21 @@ msgstr "" #: frappe/core/doctype/system_settings/system_settings.json #: frappe/core/doctype/user/user.json msgid "Show Absolute Datetime in Timeline" -msgstr "" +msgstr "Hiển thị ngày giờ tuyệt đối trong dòng thời gian" #. Label of the absolute_value (Check) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Show Absolute Values" -msgstr "" +msgstr "Hiển thị giá trị tuyệt đối" #: frappe/public/js/frappe/form/templates/form_sidebar.html:115 msgid "Show All" -msgstr "" +msgstr "Hiển thị tất cả" #. Label of the show_arrow (Check) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Show Arrow" -msgstr "" +msgstr "Hiển thị Mũi tên" #. Label of the show_auth_server_metadata (Check) field in DocType 'OAuth #. Settings' @@ -24375,12 +24408,12 @@ msgstr "" #: frappe/desk/doctype/calendar_view/calendar_view.js:10 msgid "Show Calendar" -msgstr "" +msgstr "Hiển thị Lịch" #. Label of the symbol_on_right (Check) field in DocType 'Currency' #: frappe/geo/doctype/currency/currency.json msgid "Show Currency Symbol on Right Side" -msgstr "" +msgstr "Hiển thị ký hiệu tiền tệ ở bên phải" #. Label of the show_dashboard (Check) field in DocType 'DocField' #. Label of the show_dashboard (Check) field in DocType 'Custom Field' @@ -24390,22 +24423,27 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/desk/doctype/dashboard/dashboard.js:6 msgid "Show Dashboard" -msgstr "" +msgstr "Hiển thị Trang tổng quan" + +#. Label of the show_description_on_click (Check) field in DocType 'DocField' +#: frappe/core/doctype/docfield/docfield.json +msgid "Show Description on Click" +msgstr "Hiển thị mô tả khi nhấp chuột" #. Label of the show_document (Button) field in DocType 'Access Log' #: frappe/core/doctype/access_log/access_log.json msgid "Show Document" -msgstr "" +msgstr "Hiển thị tài liệu" #: frappe/www/error.html:42 frappe/www/error.html:65 msgid "Show Error" -msgstr "" +msgstr "Hiển thị lỗi" #. Label of the show_external_link_warning (Select) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Show External Link Warning" -msgstr "" +msgstr "Hiển thị cảnh báo liên kết ngoài" #: frappe/public/js/frappe/form/layout.js:597 msgid "Show Fieldname (click to copy on clipboard)" @@ -24414,13 +24452,13 @@ msgstr "" #. Label of the first_document (Check) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Show First Document Tour" -msgstr "" +msgstr "Hiển thị chuyến tham quan tài liệu đầu tiên" #. Option for the 'Action' (Select) field in DocType 'Onboarding Step' #. Label of the show_form_tour (Check) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Show Form Tour" -msgstr "" +msgstr "Hiển thị biểu mẫu Tham quan" #. Label of the allow_error_traceback (Check) field in DocType 'System #. Settings' @@ -24431,113 +24469,113 @@ msgstr "" #. Label of the show_full_form (Check) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Show Full Form?" -msgstr "" +msgstr "Hiển thị biểu mẫu đầy đủ?" #. Label of the show_full_number (Check) field in DocType 'Number Card' #: frappe/desk/doctype/number_card/number_card.json msgid "Show Full Number" -msgstr "" +msgstr "Hiển thị số đầy đủ" #: frappe/public/js/frappe/ui/keyboard.js:234 msgid "Show Keyboard Shortcuts" -msgstr "" +msgstr "Hiển thị phím tắt" #. Label of the show_labels (Check) field in DocType 'Kanban Board' #: frappe/desk/doctype/kanban_board/kanban_board.json #: frappe/public/js/frappe/views/kanban/kanban_settings.js:30 msgid "Show Labels" -msgstr "" +msgstr "Hiển thị Nhãn" #. Label of the show_language_picker (Check) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Show Language Picker" -msgstr "" +msgstr "Hiển thị bộ chọn ngôn ngữ" #. Label of the line_breaks (Check) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Show Line Breaks after Sections" -msgstr "" +msgstr "Hiển thị ngắt dòng sau các phần" #: frappe/public/js/frappe/form/toolbar.js:433 msgid "Show Links" -msgstr "" +msgstr "Hiển thị liên kết" #. Label of the show_failed_logs (Check) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Show Only Failed Logs" -msgstr "" +msgstr "Chỉ hiển thị nhật ký thất bại" #. Label of the show_percentage_stats (Check) field in DocType 'Number Card' #: frappe/desk/doctype/number_card/number_card.json msgid "Show Percentage Stats" -msgstr "" +msgstr "Hiển thị số liệu thống kê phần trăm" #: frappe/core/report/permitted_documents_for_user/permitted_documents_for_user.js:30 msgid "Show Permissions" -msgstr "" +msgstr "Hiển thị quyền" #: frappe/public/js/form_builder/form_builder.bundle.js:31 #: frappe/public/js/form_builder/form_builder.bundle.js:43 #: frappe/public/js/print_format_builder/print_format_builder.bundle.js:18 #: frappe/public/js/print_format_builder/print_format_builder.bundle.js:54 msgid "Show Preview" -msgstr "" +msgstr "Hiển thị bản xem trước" #. Label of the show_preview_popup (Check) field in DocType 'DocType' #. Label of the show_preview_popup (Check) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Show Preview Popup" -msgstr "" +msgstr "Hiển thị cửa sổ xem trước bật lên" #. Label of the show_processlist (Check) field in DocType 'System Console' #: frappe/desk/doctype/system_console/system_console.json msgid "Show Processlist" -msgstr "" +msgstr "Hiển thị danh sách quy trình" #. Label of the show_protected_resource_metadata (Check) field in DocType #. 'OAuth Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "Show Protected Resource Metadata" -msgstr "" +msgstr "Hiển thị siêu dữ liệu tài nguyên được bảo vệ" #: frappe/core/doctype/error_log/error_log.js:9 msgid "Show Related Errors" -msgstr "" +msgstr "Hiển thị các lỗi liên quan" #. Label of the show_report (Button) field in DocType 'Access Log' #: frappe/core/doctype/access_log/access_log.json #: frappe/core/doctype/prepared_report/prepared_report.js:43 #: frappe/core/doctype/report/report.js:16 msgid "Show Report" -msgstr "" +msgstr "Hiển thị báo cáo" #. Label of the show_section_headings (Check) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Show Section Headings" -msgstr "" +msgstr "Hiển thị tiêu đề phần" #. Label of the show_sidebar (Check) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Show Sidebar" -msgstr "" +msgstr "Hiển thị thanh bên" #. Label of the show_social_login_key_as_authorization_server (Check) field in #. DocType 'OAuth Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "Show Social Login Key as Authorization Server" -msgstr "" +msgstr "Hiển thị khóa đăng nhập mạng xã hội làm máy chủ ủy quyền" #. Label of the show_tags (Check) field in DocType 'List View Settings' #: frappe/desk/doctype/list_view_settings/list_view_settings.json msgid "Show Tags" -msgstr "" +msgstr "Hiển thị thẻ" #. Label of the show_title (Check) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Show Title" -msgstr "" +msgstr "Hiển thị tiêu đề" #. Label of the show_title_field_in_link (Check) field in DocType 'DocType' #. Label of the show_title_field_in_link (Check) field in DocType 'Customize @@ -24545,33 +24583,33 @@ msgstr "" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Show Title in Link Fields" -msgstr "" +msgstr "Hiển thị Tiêu đề trong Trường Liên kết" -#: frappe/public/js/frappe/views/reports/report_view.js:1523 +#: frappe/public/js/frappe/views/reports/report_view.js:1529 msgid "Show Totals" -msgstr "" +msgstr "Hiển thị tổng số" #: frappe/desk/doctype/form_tour/form_tour.js:116 msgid "Show Tour" -msgstr "" +msgstr "Hiển thị Chuyến tham quan" #: frappe/core/doctype/data_import/data_import.js:474 msgid "Show Traceback" -msgstr "" +msgstr "Hiển thị dấu vết" #. Label of the show_values_over_chart (Check) field in DocType 'Dashboard #. Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Show Values over Chart" -msgstr "" +msgstr "Hiển thị giá trị trên biểu đồ" #: frappe/public/js/frappe/data_import/import_preview.js:204 msgid "Show Warnings" -msgstr "" +msgstr "Hiển thị cảnh báo" -#: frappe/public/js/frappe/views/calendar/calendar.js:179 +#: frappe/public/js/frappe/views/calendar/calendar.js:180 msgid "Show Weekends" -msgstr "" +msgstr "Hiển thị Cuối tuần" #. Label of the show_account_deletion_link (Check) field in DocType 'Website #. Settings' @@ -24581,11 +24619,11 @@ msgstr "" #: frappe/core/doctype/version/version.js:3 msgid "Show all Versions" -msgstr "" +msgstr "Hiển thị tất cả các phiên bản" #: frappe/public/js/frappe/form/footer/form_timeline.js:69 msgid "Show all activity" -msgstr "" +msgstr "Hiển thị tất cả hoạt động" #. Label of the show_as_cc (Small Text) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json @@ -24595,83 +24633,83 @@ msgstr "" #. Label of the show_attachments (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Show attachments" -msgstr "" +msgstr "Hiển thị tệp đính kèm" #. Label of the show_footer_on_login (Check) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Show footer on login" -msgstr "" +msgstr "Hiển thị chân trang khi đăng nhập" #. Description of the 'Show Full Form?' (Check) field in DocType 'Onboarding #. Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Show full form instead of a quick entry modal" -msgstr "" +msgstr "Hiển thị biểu mẫu đầy đủ thay vì phương thức nhập nhanh" #. Label of the document_type (Select) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Show in Module Section" -msgstr "" +msgstr "Hiển thị trong Phần Mô-đun" #. Label of the show_in_resource_metadata (Check) field in DocType 'Social #. Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Show in Resource Metadata" -msgstr "" +msgstr "Hiển thị trong Siêu dữ liệu tài nguyên" #. Label of the show_in_filter (Check) field in DocType 'Web Form Field' #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Show in filter" -msgstr "" +msgstr "Hiển thị trong bộ lọc" #. Label of the show_document_link (Check) field in DocType 'Slack Webhook URL' #: frappe/integrations/doctype/slack_webhook_url/slack_webhook_url.json msgid "Show link to document" -msgstr "" +msgstr "Hiển thị liên kết đến tài liệu" #. Label of the show_list (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Show list" -msgstr "" +msgstr "Hiển thị danh sách" #: frappe/public/js/frappe/form/layout.js:283 #: frappe/public/js/frappe/form/layout.js:301 msgid "Show more details" -msgstr "" +msgstr "Hiển thị thêm chi tiết" #. Label of the show_on_timeline (Check) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Show on Timeline" -msgstr "" +msgstr "Hiển thị trên Dòng thời gian" #. Description of the 'Stats Time Interval' (Select) field in DocType 'Number #. Card' #: frappe/desk/doctype/number_card/number_card.json msgid "Show percentage difference according to this time interval" -msgstr "" +msgstr "Hiển thị phần trăm chênh lệch theo khoảng thời gian này" #. Label of the show_sidebar (Check) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Show sidebar" -msgstr "" +msgstr "Hiển thị thanh bên" #. Description of the 'Title Prefix' (Data) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Show title in browser window as \"Prefix - title\"" -msgstr "" +msgstr "Hiển thị tiêu đề trong cửa sổ trình duyệt dưới dạng \"Tiền tố - tiêu đề\"" #: frappe/public/js/frappe/widgets/onboarding_widget.js:148 msgid "Show {0} List" -msgstr "" +msgstr "Hiển thị {0} Danh sách" -#: frappe/public/js/frappe/views/reports/report_view.js:500 +#: frappe/public/js/frappe/views/reports/report_view.js:502 msgid "Showing only Numeric fields from Report" -msgstr "" +msgstr "Chỉ hiển thị các trường số từ Báo cáo" #: frappe/public/js/frappe/data_import/import_preview.js:153 msgid "Showing only first {0} rows out of {1}" -msgstr "" +msgstr "Chỉ hiển thị {0} hàng đầu tiên trong số {1}" #. Label of the list_sidebar (Check) field in DocType 'User' #. Label of the form_sidebar (Check) field in DocType 'User' @@ -24681,29 +24719,29 @@ msgstr "" #: frappe/desk/doctype/desktop_icon/desktop_icon.json #: frappe/desk/doctype/sidebar_item_group/sidebar_item_group.json msgid "Sidebar" -msgstr "" +msgstr "Thanh bên" #. Name of a DocType #. Option for the 'Type' (Select) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/sidebar_item_group/sidebar_item_group.json #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Sidebar Item Group" -msgstr "" +msgstr "Nhóm mục thanh bên" #. Name of a DocType #: frappe/desk/doctype/sidebar_item_group_link/sidebar_item_group_link.json msgid "Sidebar Item Group Link" -msgstr "" +msgstr "Liên kết nhóm mục thanh bên" #. Label of the sidebar_items (Table) field in DocType 'Website Sidebar' #: frappe/website/doctype/website_sidebar/website_sidebar.json msgid "Sidebar Items" -msgstr "" +msgstr "Các mục thanh bên" #. Label of the section_break_4 (Section Break) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Sidebar Settings" -msgstr "" +msgstr "Cài đặt thanh bên" #. Label of the section_break_17 (Section Break) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json @@ -24713,7 +24751,7 @@ msgstr "" #. Label of the sign_out (Button) field in DocType 'User Session Display' #: frappe/core/doctype/user_session_display/user_session_display.json msgid "Sign Out" -msgstr "" +msgstr "Đăng xuất" #. Label of the sign_up_and_confirmation_section (Section Break) field in #. DocType 'Email Group' @@ -24723,17 +24761,17 @@ msgstr "" #: frappe/core/doctype/user/user.py:1079 msgid "Sign Up is disabled" -msgstr "" +msgstr "Đăng ký bị vô hiệu hóa" #: frappe/templates/signup.html:16 frappe/www/login.html:140 #: frappe/www/login.html:156 frappe/www/update-password.html:71 msgid "Sign up" -msgstr "" +msgstr "Đăng ký" #. Label of the sign_ups (Select) field in DocType 'Social Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "Sign ups" -msgstr "" +msgstr "Đăng ký" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -24748,11 +24786,11 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Signature" -msgstr "" +msgstr "Chữ ký" #: frappe/www/login.html:168 msgid "Signup Disabled" -msgstr "" +msgstr "Đăng ký bị vô hiệu hóa" #: frappe/www/login.html:169 msgid "Signups have been disabled for this website." @@ -24779,11 +24817,11 @@ msgstr "" #. Label of the simultaneous_sessions (Int) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Simultaneous Sessions" -msgstr "" +msgstr "Phiên đồng thời" #: frappe/custom/doctype/customize_form/customize_form.py:128 msgid "Single DocTypes cannot be customized." -msgstr "" +msgstr "Không thể tùy chỉnh các Loại tài liệu đơn lẻ." #. Description of the 'Is Single' (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -24797,21 +24835,21 @@ msgstr "" #: frappe/public/js/frappe/views/file/file_view.js:371 msgid "Size" -msgstr "" +msgstr "Kích thước" #. Label of the size (Float) field in DocType 'System Health Report Tables' #: frappe/desk/doctype/system_health_report_tables/system_health_report_tables.json msgid "Size (MB)" -msgstr "" +msgstr "Kích thước (MB)" #: frappe/public/js/frappe/file_uploader/FileUploader.vue:629 msgid "Size exceeds the maximum allowed file size." -msgstr "" +msgstr "Kích thước vượt quá kích thước tệp tối đa cho phép." #: frappe/public/js/frappe/widgets/onboarding_widget.js:82 #: frappe/public/js/onboarding_tours/onboarding_tours.js:18 msgid "Skip" -msgstr "" +msgstr "Bỏ qua" #. Label of the skip_authorization (Check) field in DocType 'OAuth Client' #. Label of the skip_authorization (Select) field in DocType 'OAuth Provider @@ -24821,36 +24859,36 @@ msgstr "" #: frappe/integrations/doctype/oauth_provider_settings/oauth_provider_settings.json #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "Skip Authorization" -msgstr "" +msgstr "Bỏ qua ủy quyền" #: frappe/public/js/frappe/widgets/onboarding_widget.js:332 msgid "Skip Step" -msgstr "" +msgstr "Bỏ Qua Bước" #. Label of the skipped (Check) field in DocType 'Patch Log' #: frappe/core/doctype/patch_log/patch_log.json msgid "Skipped" -msgstr "" +msgstr "Đã bỏ qua" #: frappe/core/doctype/data_import/importer.py:951 msgid "Skipping Duplicate Column {0}" -msgstr "" +msgstr "Bỏ qua cột trùng lặp {0}" #: frappe/core/doctype/data_import/importer.py:976 msgid "Skipping Untitled Column" -msgstr "" +msgstr "Bỏ qua cột không có tiêu đề" #: frappe/core/doctype/data_import/importer.py:962 msgid "Skipping column {0}" -msgstr "" +msgstr "Bỏ qua cột {0}" #: frappe/modules/utils.py:219 msgid "Skipping fixture syncing for doctype {0} from file {1}" -msgstr "" +msgstr "Bỏ qua việc đồng bộ hóa lịch thi đấu cho loại tài liệu {0} từ tệp {1}" #: frappe/core/doctype/data_import/data_import.js:39 msgid "Skipping {0} of {1}, {2}" -msgstr "" +msgstr "Bỏ qua {0} trong số {1}, {2}" #. Label of the skype (Data) field in DocType 'Contact Us Settings' #: frappe/website/doctype/contact_us_settings/contact_us_settings.json @@ -24860,7 +24898,7 @@ msgstr "" #. Option for the 'Channel' (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Slack" -msgstr "" +msgstr "Chập chờn" #. Label of the slack_webhook_url (Link) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json @@ -24882,17 +24920,17 @@ msgstr "" #. Option for the 'Content Type' (Select) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Slideshow" -msgstr "" +msgstr "Trình chiếu" #. Label of the slideshow_items (Table) field in DocType 'Website Slideshow' #: frappe/website/doctype/website_slideshow/website_slideshow.json msgid "Slideshow Items" -msgstr "" +msgstr "Các mục trình chiếu" #. Label of the slideshow_name (Data) field in DocType 'Website Slideshow' #: frappe/website/doctype/website_slideshow/website_slideshow.json msgid "Slideshow Name" -msgstr "" +msgstr "Tên trình chiếu" #. Description of a DocType #: frappe/website/doctype/website_slideshow/website_slideshow.json @@ -24906,7 +24944,7 @@ msgstr "" #: frappe/website/doctype/utm_medium/utm_medium.json #: frappe/website/doctype/utm_source/utm_source.json msgid "Slug" -msgstr "" +msgstr "Sên" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -24919,13 +24957,13 @@ msgstr "" #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Small Text" -msgstr "" +msgstr "Văn bản nhỏ" #. Label of the smallest_currency_fraction_value (Currency) field in DocType #. 'Currency' #: frappe/geo/doctype/currency/currency.json msgid "Smallest Currency Fraction Value" -msgstr "" +msgstr "Giá trị phân số tiền tệ nhỏ nhất" #. Description of the 'Smallest Currency Fraction Value' (Currency) field in #. DocType 'Currency' @@ -24940,20 +24978,20 @@ msgstr "" #. Name of a DocType #: frappe/website/doctype/social_link_settings/social_link_settings.json msgid "Social Link Settings" -msgstr "" +msgstr "Cài đặt liên kết xã hội" #. Label of the social_link_type (Select) field in DocType 'Social Link #. Settings' #: frappe/website/doctype/social_link_settings/social_link_settings.json msgid "Social Link Type" -msgstr "" +msgstr "Loại liên kết xã hội" #. Name of a DocType #. Label of a Link in the Integrations Workspace #: frappe/integrations/doctype/social_login_key/social_login_key.json #: frappe/integrations/workspace/integrations/integrations.json msgid "Social Login Key" -msgstr "" +msgstr "Khóa đăng nhập xã hội" #. Label of the social_login_provider (Select) field in DocType 'Social Login #. Key' @@ -24964,7 +25002,7 @@ msgstr "" #. Label of the social_logins (Table) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Social Logins" -msgstr "" +msgstr "Đăng nhập xã hội" #. Label of the socketio_ping_check (Select) field in DocType 'System Health #. Report' @@ -24981,68 +25019,68 @@ msgstr "" #. Option for the 'Delivery Status' (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Soft-Bounced" -msgstr "" +msgstr "Nảy mềm" #. Label of the software_id (Data) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Software ID" -msgstr "" +msgstr "ID phần mềm" #. Label of the software_version (Data) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Software Version" -msgstr "" +msgstr "Phiên bản phần mềm" #. Option for the 'Icon Style' (Select) field in DocType 'Desktop Settings' #: frappe/desk/doctype/desktop_settings/desktop_settings.json msgid "Solid" -msgstr "" +msgstr "Rắn" #: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:4 msgid "Some columns might get cut off when printing to PDF. Try to keep number of columns under 10." -msgstr "" +msgstr "Một số cột có thể bị cắt khi in sang PDF. Cố gắng giữ số cột dưới 10." #. Description of the 'Sent Folder Name' (Data) field in DocType 'Email Domain' #: frappe/email/doctype/email_domain/email_domain.json msgid "Some mailboxes require a different Sent Folder Name e.g. \"INBOX.Sent\"" -msgstr "" +msgstr "Một số hộp thư yêu cầu Tên thư mục đã gửi khác, ví dụ: \"INBOX.Đã gửi\"" #: frappe/public/js/frappe/desk.js:20 msgid "Some of the features might not work in your browser. Please update your browser to the latest version." -msgstr "" +msgstr "Một số tính năng có thể không hoạt động trong trình duyệt của bạn. Vui lòng cập nhật trình duyệt của bạn lên phiên bản mới nhất." #: frappe/public/js/frappe/views/translation_manager.js:101 msgid "Something went wrong" -msgstr "" +msgstr "Đã xảy ra lỗi" #: frappe/integrations/doctype/google_calendar/google_calendar.py:133 msgid "Something went wrong during the token generation. Click on {0} to generate a new one." -msgstr "" +msgstr "Đã xảy ra lỗi trong quá trình tạo mã thông báo. Nhấp vào {0} để tạo một cái mới." #: frappe/templates/includes/login/login.js:292 msgid "Something went wrong." -msgstr "" +msgstr "Đã xảy ra lỗi." #: frappe/public/js/frappe/views/pageview.js:127 msgid "Sorry! I could not find what you were looking for." -msgstr "" +msgstr "Lấy làm tiếc! Tôi không thể tìm thấy những gì bạn đang tìm kiếm." #: frappe/public/js/frappe/views/pageview.js:135 msgid "Sorry! You are not permitted to view this page." -msgstr "" +msgstr "Lấy làm tiếc! Bạn không được phép xem trang này." #: frappe/public/js/frappe/utils/datatable.js:6 msgid "Sort Ascending" -msgstr "" +msgstr "Sắp xếp tăng dần" #: frappe/public/js/frappe/utils/datatable.js:7 msgid "Sort Descending" -msgstr "" +msgstr "Sắp xếp giảm dần" #. Label of the sort_field (Select) field in DocType 'Customize Form' #: frappe/custom/doctype/customize_form/customize_form.json msgid "Sort Field" -msgstr "" +msgstr "Trường sắp xếp" #. Label of the sort_options (Check) field in DocType 'DocField' #. Label of the sort_options (Check) field in DocType 'Custom Field' @@ -25051,52 +25089,52 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Sort Options" -msgstr "" +msgstr "Tùy chọn sắp xếp" #. Label of the sort_order (Select) field in DocType 'Customize Form' #: frappe/custom/doctype/customize_form/customize_form.json msgid "Sort Order" -msgstr "" +msgstr "Thứ tự sắp xếp" -#: frappe/core/doctype/doctype/doctype.py:1579 +#: frappe/core/doctype/doctype/doctype.py:1582 msgid "Sort field {0} must be a valid fieldname" 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:1999 +#: frappe/public/js/frappe/utils/utils.js:2009 #: 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 msgid "Source" -msgstr "" +msgstr "Nguồn" #: frappe/public/js/frappe/ui/toolbar/about.js:11 msgid "Source Code" -msgstr "" +msgstr "Mã Nguồn" #. Label of the source_name (Data) field in DocType 'Dashboard Chart Source' #: frappe/desk/doctype/dashboard_chart_source/dashboard_chart_source.json msgid "Source Name" -msgstr "" +msgstr "Tên nguồn" #. Label of the source_text (Code) field in DocType 'Translation' #: frappe/core/doctype/translation/translation.json #: frappe/public/js/frappe/views/translation_manager.js:38 msgid "Source Text" -msgstr "" +msgstr "Văn bản nguồn" #. Option for the 'Type' (Select) field in DocType 'Workspace Sidebar Item' #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json #: frappe/public/js/frappe/views/workspace/blocks/spacer.js:23 #: frappe/public/js/print_format_builder/PrintFormatControls.vue:174 msgid "Spacer" -msgstr "" +msgstr "Miếng đệm" #. Option for the 'Email Status' (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Spam" -msgstr "" +msgstr "Thư rác" #. Option for the 'Service' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json @@ -25107,15 +25145,15 @@ msgstr "" #. Transition Task' #: frappe/workflow/doctype/workflow_transition_task/workflow_transition_task.json msgid "Spawns actions in a background job" -msgstr "" +msgstr "Tạo ra các hành động trong một công việc nền" #: frappe/custom/doctype/custom_field/custom_field.js:83 msgid "Special Characters are not allowed" -msgstr "" +msgstr "Không được phép ký tự đặc biệt" #: frappe/model/naming.py:66 msgid "Special Characters except '-', '#', '.', '/', '{{' and '}}' not allowed in naming series {0}" -msgstr "" +msgstr "Các ký tự đặc biệt ngoại trừ '-', '#', '.', '/', '{{' and '}}' không được phép trong chuỗi đặt tên {0}" #. Description of the 'Timeout (In Seconds)' (Int) field in DocType 'Report' #: frappe/core/doctype/report/report.json @@ -25126,18 +25164,18 @@ msgstr "" #. 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Specify the domains or origins that are permitted to embed this form. Enter one domain per line (e.g., https://example.com). If no domains are specified, the form can only be embedded on the same origin." -msgstr "" +msgstr "Chỉ định tên miền hoặc nguồn gốc được phép nhúng biểu mẫu này. Nhập một tên miền trên mỗi dòng (ví dụ: https://example.com). Nếu không có miền nào được chỉ định thì biểu mẫu chỉ có thể được nhúng trên cùng một nguồn." #. Label of the splash_image (Attach Image) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Splash Image" -msgstr "" +msgstr "Hình ảnh giật gân" #: frappe/desk/reportview.py:458 #: frappe/public/js/frappe/web_form/web_form_list.js:176 #: frappe/templates/print_formats/standard_macros.html:44 msgid "Sr" -msgstr "" +msgstr "Ông" #: frappe/public/js/print_format_builder/Field.vue:143 #: frappe/public/js/print_format_builder/Field.vue:164 @@ -25148,7 +25186,7 @@ msgstr "" #: frappe/core/doctype/recorder/recorder.js:82 #: frappe/core/doctype/recorder_query/recorder_query.json msgid "Stack Trace" -msgstr "" +msgstr "Dấu vết ngăn xếp" #. Label of the standard (Select) field in DocType 'Page' #. Label of the standard (Check) field in DocType 'Desktop Icon' @@ -25166,7 +25204,7 @@ msgstr "" #: frappe/printing/doctype/print_style/print_style.json #: frappe/website/doctype/web_template/web_template.json msgid "Standard" -msgstr "" +msgstr "Chuẩn" #: frappe/model/delete_doc.py:119 msgid "Standard DocType can not be deleted." @@ -25178,27 +25216,27 @@ msgstr "" #: frappe/desk/doctype/dashboard/dashboard.py:58 msgid "Standard Not Set" -msgstr "" +msgstr "Tiêu chuẩn không được đặt" #: frappe/core/page/permission_manager/permission_manager.js:132 msgid "Standard Permissions" -msgstr "" +msgstr "Quyền tiêu chuẩn" #: frappe/printing/doctype/print_format/print_format.py:82 msgid "Standard Print Format cannot be updated" -msgstr "" +msgstr "Định dạng in tiêu chuẩn không thể cập nhật" #: frappe/printing/doctype/print_style/print_style.py:31 msgid "Standard Print Style cannot be changed. Please duplicate to edit." -msgstr "" +msgstr "Kiểu in tiêu chuẩn không thể thay đổi. Vui lòng sao chép để chỉnh sửa." #: frappe/desk/reportview.py:357 msgid "Standard Reports cannot be deleted" -msgstr "" +msgstr "Báo cáo chuẩn không thể bị xóa" #: frappe/desk/reportview.py:328 msgid "Standard Reports cannot be edited" -msgstr "" +msgstr "Báo cáo chuẩn không thể chỉnh sửa" #. Label of the standard_menu_items (Section Break) field in DocType 'Portal #. Settings' @@ -25212,26 +25250,26 @@ msgstr "" #: frappe/website/doctype/web_page/web_page.js:92 msgid "Standard rich text editor with controls" -msgstr "" +msgstr "Trình soạn thảo văn bản đa dạng thức tiêu chuẩn có điều khiển" #: frappe/core/doctype/role/role.py:46 msgid "Standard roles cannot be disabled" -msgstr "" +msgstr "Không thể tắt vai trò tiêu chuẩn" #: frappe/core/doctype/role/role.py:32 msgid "Standard roles cannot be renamed" -msgstr "" +msgstr "Không thể đổi tên các vai trò tiêu chuẩn" #: frappe/core/doctype/user_type/user_type.py:61 msgid "Standard user type {0} can not be deleted." -msgstr "" +msgstr "Loại người dùng chuẩn {0} không thể xóa được." #: frappe/core/doctype/recorder/recorder_list.js:87 #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.py:45 #: frappe/printing/page/print/print.js:336 #: frappe/printing/page/print/print.js:383 msgid "Start" -msgstr "" +msgstr "Bắt đầu" #. Label of the start_date (Date) field in DocType 'Auto Repeat' #. Label of the start_date (Date) field in DocType 'Audit Trail' @@ -25242,37 +25280,37 @@ msgstr "" #: frappe/public/js/frappe/utils/common.js:418 #: frappe/website/doctype/web_page/web_page.json msgid "Start Date" -msgstr "" +msgstr "Ngày bắt đầu" #. Label of the start_date_field (Select) field in DocType 'Calendar View' #: frappe/desk/doctype/calendar_view/calendar_view.json msgid "Start Date Field" -msgstr "" +msgstr "Trường ngày bắt đầu" #: frappe/core/doctype/data_import/data_import.js:111 msgid "Start Import" -msgstr "" +msgstr "Bắt đầu nhập" #: frappe/core/doctype/recorder/recorder_list.js:201 msgid "Start Recording" -msgstr "" +msgstr "Bắt đầu ghi" #. Label of the birth_date (Datetime) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "Start Time" -msgstr "" +msgstr "Thời gian bắt đầu" #: frappe/templates/includes/comments/comments.html:8 msgid "Start a new discussion" -msgstr "" +msgstr "Bắt đầu một cuộc thảo luận mới" #: frappe/core/doctype/data_export/exporter.py:22 msgid "Start entering data below this line" -msgstr "" +msgstr "Bắt đầu nhập dữ liệu bên dưới dòng này" #: frappe/printing/page/print_format_builder/print_format_builder.js:165 msgid "Start new Format" -msgstr "" +msgstr "Bắt đầu định dạng mới" #. Option for the 'SSL/TLS Mode' (Select) field in DocType 'LDAP Settings' #: frappe/integrations/doctype/ldap_settings/ldap_settings.json @@ -25282,12 +25320,12 @@ msgstr "" #. Option for the 'Status' (Select) field in DocType 'Prepared Report' #: frappe/core/doctype/prepared_report/prepared_report.json msgid "Started" -msgstr "" +msgstr "Đã bắt đầu" #. Label of the started_at (Datetime) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "Started At" -msgstr "" +msgstr "Bắt đầu tại" #: frappe/desk/page/setup_wizard/setup_wizard.js:286 msgid "Starting Frappe ..." @@ -25296,7 +25334,7 @@ msgstr "" #. Label of the starts_on (Datetime) field in DocType 'Event' #: frappe/desk/doctype/event/event.json msgid "Starts on" -msgstr "" +msgstr "Bắt đầu vào" #. Label of the state (Data) field in DocType 'Token Cache' #. Label of the state (Link) field in DocType 'Workflow Document State' @@ -25309,7 +25347,7 @@ msgstr "" #: frappe/workflow/doctype/workflow_state/workflow_state.json #: frappe/workflow/doctype/workflow_transition/workflow_transition.json msgid "State" -msgstr "" +msgstr "Bang" #: frappe/public/js/workflow_builder/components/Properties.vue:26 msgid "State Properties" @@ -25320,7 +25358,7 @@ msgstr "" #: frappe/contacts/doctype/address/address.json #: frappe/website/doctype/contact_us_settings/contact_us_settings.json msgid "State/Province" -msgstr "" +msgstr "Tiểu bang/Tỉnh" #. Label of the document_states_section (Tab Break) field in DocType 'DocType' #. Label of the states (Table) field in DocType 'Customize Form' @@ -25329,29 +25367,29 @@ msgstr "" #: frappe/custom/doctype/customize_form/customize_form.json #: frappe/workflow/doctype/workflow/workflow.json msgid "States" -msgstr "" +msgstr "Kỳ" #. Label of the parameters (Table) field in DocType 'SMS Settings' #: frappe/core/doctype/sms_settings/sms_settings.json msgid "Static Parameters" -msgstr "" +msgstr "Thông số tĩnh" #. Label of the statistics_section (Section Break) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "Statistics" -msgstr "" +msgstr "Thống kê" #. Label of the stats_section (Section Break) field in DocType 'Number Card' #: frappe/desk/doctype/number_card/number_card.json #: frappe/public/js/frappe/form/dashboard.js:43 #: frappe/public/js/frappe/form/templates/form_dashboard.html:13 msgid "Stats" -msgstr "" +msgstr "Thống kê" #. Label of the stats_time_interval (Select) field in DocType 'Number Card' #: frappe/desk/doctype/number_card/number_card.json msgid "Stats Time Interval" -msgstr "" +msgstr "Khoảng thời gian thống kê" #. Label of the status (Select) field in DocType 'Auto Repeat' #. Label of the status (Select) field in DocType 'Contact' @@ -25401,17 +25439,17 @@ msgstr "" #: frappe/integrations/doctype/integration_request/integration_request.json #: frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json #: frappe/public/js/frappe/list/list_settings.js:357 -#: frappe/public/js/frappe/list/list_view.js:2445 -#: frappe/public/js/frappe/views/reports/report_view.js:974 +#: frappe/public/js/frappe/list/list_view.js:2456 +#: frappe/public/js/frappe/views/reports/report_view.js:976 #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.json #: frappe/website/doctype/personal_data_deletion_step/personal_data_deletion_step.json #: frappe/workflow/doctype/workflow_action/workflow_action.json msgid "Status" -msgstr "" +msgstr "Trạng thái" #: frappe/www/update-password.html:188 msgid "Status Updated" -msgstr "" +msgstr "Cập nhật trạng thái" #: frappe/email/doctype/email_queue/email_queue.js:37 msgid "Status Updated. The email will be picked up in the next scheduled run." @@ -25419,70 +25457,70 @@ msgstr "" #: frappe/www/message.html:24 msgid "Status: {0}" -msgstr "" +msgstr "Trạng thái: {0}" #. Label of the step (Link) field in DocType 'Onboarding Step Map' #: frappe/desk/doctype/onboarding_step_map/onboarding_step_map.json msgid "Step" -msgstr "" +msgstr "Bước" #. Label of the steps (Table) field in DocType 'Form Tour' #. Label of the steps (Table) field in DocType 'Module Onboarding' #: frappe/desk/doctype/form_tour/form_tour.json #: frappe/desk/doctype/module_onboarding/module_onboarding.json msgid "Steps" -msgstr "" +msgstr "Bước" #: frappe/www/qrcode.html:11 msgid "Steps to verify your login" -msgstr "" +msgstr "Các bước để xác minh thông tin đăng nhập của bạn" #. Label of the sticky (Check) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json #: frappe/public/js/frappe/form/grid_row.js:456 msgid "Sticky" -msgstr "" +msgstr "Dính" #: frappe/core/doctype/recorder/recorder_list.js:87 msgid "Stop" -msgstr "" +msgstr "Dừng lại" #. Label of the stopped (Check) field in DocType 'Scheduled Job Type' #: frappe/core/doctype/scheduled_job_type/scheduled_job_type.json msgid "Stopped" -msgstr "" +msgstr "Đã dừng" #. Label of the db_storage_usage (Float) field in DocType 'System Health #. Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Storage Usage (MB)" -msgstr "" +msgstr "Mức sử dụng bộ nhớ (MB)" #. Label of the top_db_tables (Table) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Storage Usage By Table" -msgstr "" +msgstr "Mức sử dụng bộ nhớ theo bảng" #. Label of the store_attached_pdf_document (Check) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Store Attached PDF Document" -msgstr "" +msgstr "Lưu trữ tài liệu PDF đính kèm" -#: frappe/core/doctype/user/user.js:504 +#: frappe/core/doctype/user/user.js:515 msgid "Store the API secret securely. It won't be displayed again." -msgstr "" +msgstr "Lưu trữ bí mật API một cách an toàn. Nó sẽ không được hiển thị lại." #. Description of the 'Last Known Versions' (Text) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Stores the JSON of last known versions of various installed apps. It is used to show release notes." -msgstr "" +msgstr "Lưu trữ JSON của các phiên bản được biết đến gần đây nhất của các ứng dụng đã cài đặt khác nhau. Nó được sử dụng để hiển thị ghi chú phát hành." #. Description of the 'Last Reset Password Key Generated On' (Datetime) field #. in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Stores the datetime when the last reset password key was generated." -msgstr "" +msgstr "Lưu trữ ngày giờ khi khóa mật khẩu đặt lại cuối cùng được tạo." #: frappe/utils/password_strength.py:97 msgid "Straight rows of keys are easy to guess" @@ -25492,49 +25530,49 @@ msgstr "" #. DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Strip EXIF tags from uploaded images" -msgstr "" +msgstr "Loại bỏ thẻ EXIF ​​​​khỏi hình ảnh được tải lên" #: frappe/public/js/frappe/form/controls/password.js:89 msgid "Strong" -msgstr "" +msgstr "Mạnh mẽ" #. Label of the custom_css (Tab Break) field in DocType 'Web Page' #. Label of the style (Select) field in DocType 'Workflow State' #: frappe/website/doctype/web_page/web_page.json #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Style" -msgstr "" +msgstr "Phong cách" #. Label of the section_break_9 (Section Break) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json msgid "Style Settings" -msgstr "" +msgstr "Cài đặt kiểu" #. Description of the 'Style' (Select) field in DocType 'Workflow State' #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Style represents the button color: Success - Green, Danger - Red, Inverse - Black, Primary - Dark Blue, Info - Light Blue, Warning - Orange" -msgstr "" +msgstr "Kiểu thể hiện màu nút: Thành công - Xanh lục, Nguy hiểm - Đỏ, Nghịch đảo - Đen, Chính - Xanh đậm, Thông tin - Xanh nhạt, Cảnh báo - Cam" #. Label of the stylesheet_section (Tab Break) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "Stylesheet" -msgstr "" +msgstr "Biểu định kiểu" #. Description of the 'Fraction' (Data) field in DocType 'Currency' #: frappe/geo/doctype/currency/currency.json msgid "Sub-currency. For e.g. \"Cent\"" -msgstr "" +msgstr "Tiền tệ phụ. Ví dụ: \"Đồng xu\"" #. Description of the 'Subdomain' (Small Text) field in DocType 'Website #. Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Sub-domain provided by erpnext.com" -msgstr "" +msgstr "Tên miền phụ được cung cấp bởi erpnext.com" #. Label of the subdomain (Small Text) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Subdomain" -msgstr "" +msgstr "Tên miền phụ" #. Label of the subject (Data) field in DocType 'Auto Repeat' #. Label of the subject (Small Text) field in DocType 'Activity Log' @@ -25556,7 +25594,7 @@ msgstr "" #: frappe/public/js/frappe/views/communication.js:128 #: frappe/public/js/frappe/views/inbox/inbox_view.js:63 msgid "Subject" -msgstr "" +msgstr "Chủ đề" #. Label of the subject_field (Data) field in DocType 'DocType' #. Label of the subject_field (Data) field in DocType 'Customize Form' @@ -25565,16 +25603,16 @@ msgstr "" #: frappe/custom/doctype/customize_form/customize_form.json #: frappe/desk/doctype/calendar_view/calendar_view.json msgid "Subject Field" -msgstr "" +msgstr "Trường chủ đề" -#: frappe/core/doctype/doctype/doctype.py:2034 +#: frappe/core/doctype/doctype/doctype.py:2037 msgid "Subject Field type should be Data, Text, Long Text, Small Text, Text Editor" msgstr "" #. Name of a DocType #: frappe/core/doctype/submission_queue/submission_queue.json msgid "Submission Queue" -msgstr "" +msgstr "Hàng đợi gửi" #. Label of the submit (Check) field in DocType 'Custom DocPerm' #. Label of the submit (Check) field in DocType 'DocPerm' @@ -25593,110 +25631,110 @@ msgstr "" #: frappe/public/js/frappe/ui/capture.js:308 #: frappe/website/web_form/request_to_delete_data/request_to_delete_data.json msgid "Submit" -msgstr "" +msgstr "Gửi" -#: frappe/public/js/frappe/list/list_view.js:2320 +#: frappe/public/js/frappe/list/list_view.js:2331 msgctxt "Button in list view actions menu" msgid "Submit" -msgstr "" +msgstr "Gửi" -#: frappe/website/doctype/web_form/templates/web_form.html:47 +#: frappe/website/doctype/web_form/templates/web_form.html:56 msgctxt "Button in web form" msgid "Submit" -msgstr "" +msgstr "Gửi" #: frappe/public/js/frappe/ui/dialog.js:64 msgctxt "Primary action in dialog" msgid "Submit" -msgstr "" +msgstr "Gửi" #: frappe/public/js/frappe/ui/messages.js:97 msgctxt "Primary action of prompt dialog" msgid "Submit" -msgstr "" +msgstr "Gửi" #: frappe/public/js/frappe/desk.js:227 msgctxt "Submit password for Email Account" msgid "Submit" -msgstr "" +msgstr "Gửi" #. Label of the submit_after_import (Check) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Submit After Import" -msgstr "" +msgstr "Gửi sau khi nhập" #: frappe/core/page/permission_manager/permission_manager_help.html:106 msgid "Submit an Issue" -msgstr "" +msgstr "Gửi một vấn đề" -#: frappe/website/doctype/web_form/templates/web_form.html:163 +#: frappe/website/doctype/web_form/templates/web_form.html:172 msgctxt "Button in web form" msgid "Submit another response" -msgstr "" +msgstr "Gửi phản hồi khác" #. 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 "Gửi nhãn nút" #. Label of the submit_on_creation (Check) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json #: frappe/automation/doctype/auto_repeat/auto_repeat.py:132 msgid "Submit on Creation" -msgstr "" +msgstr "Gửi về Sáng tạo" #: frappe/public/js/frappe/widgets/onboarding_widget.js:395 msgid "Submit this document to complete this step." -msgstr "" +msgstr "Gửi tài liệu này để hoàn thành bước này." #: frappe/public/js/frappe/form/form.js:1270 msgid "Submit this document to confirm" -msgstr "" +msgstr "Gửi tài liệu này để xác nhận" -#: frappe/public/js/frappe/list/list_view.js:2325 +#: frappe/public/js/frappe/list/list_view.js:2336 msgctxt "Title of confirmation dialog" msgid "Submit {0} documents?" -msgstr "" +msgstr "Gửi tài liệu {0}?" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #: frappe/core/doctype/comment/comment.json #: frappe/public/js/frappe/model/indicator.js:95 #: frappe/public/js/frappe/ui/filters/filter.js:538 -#: frappe/website/doctype/web_form/templates/web_form.html:143 +#: frappe/website/doctype/web_form/templates/web_form.html:152 msgid "Submitted" -msgstr "" +msgstr "Đã gửi" #: frappe/workflow/doctype/workflow/workflow.py:104 msgid "Submitted Document cannot be converted back to draft. Transition row {0}" -msgstr "" +msgstr "Tài liệu đã gửi không thể được chuyển đổi lại thành bản nháp. Hàng chuyển tiếp {0}" #: frappe/public/js/workflow_builder/utils.js:176 msgid "Submitted document cannot be converted back to draft while transitioning from {0} State to {1} State" -msgstr "" +msgstr "Không thể chuyển đổi tài liệu đã gửi trở lại thành bản nháp trong khi chuyển từ {0} Bang sang {1} Bang" #: frappe/public/js/frappe/form/save.js:10 msgctxt "Freeze message while submitting a document" msgid "Submitting" -msgstr "" +msgstr "Đang gửi" #: frappe/desk/doctype/bulk_update/bulk_update.py:89 msgid "Submitting {0}" -msgstr "" +msgstr "Đang gửi {0}" #. Option for the 'Address Type' (Select) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Subsidiary" -msgstr "" +msgstr "Công ty con" #. Label of the subtitle (Data) field in DocType 'Module Onboarding' #: frappe/desk/doctype/module_onboarding/module_onboarding.json msgid "Subtitle" -msgstr "" +msgstr "Phụ đề" #. Option for the 'Icon Style' (Select) field in DocType 'Desktop Settings' #: frappe/desk/doctype/desktop_settings/desktop_settings.json msgid "Subtle" -msgstr "" +msgstr "Tinh tế" #. Option for the 'Status' (Select) field in DocType 'Activity Log' #. Option for the 'Status' (Select) field in DocType 'Data Import' @@ -25714,7 +25752,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/desk/doctype/bulk_update/bulk_update.js:31 -#: frappe/public/js/frappe/form/grid.js:1230 +#: frappe/public/js/frappe/form/grid.js:1235 #: frappe/public/js/frappe/views/translation_manager.js:21 #: frappe/templates/includes/login/login.js:228 #: frappe/templates/includes/login/login.js:234 @@ -25724,96 +25762,96 @@ msgstr "" #: frappe/workflow/doctype/workflow_action/workflow_action.py:171 #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Success" -msgstr "" +msgstr "Thành công" #. Name of a DocType #: frappe/core/doctype/success_action/success_action.json msgid "Success Action" -msgstr "" +msgstr "Hành động thành công" #. Label of the success_message (Data) field in DocType 'Module Onboarding' #: frappe/desk/doctype/module_onboarding/module_onboarding.json msgid "Success Message" -msgstr "" +msgstr "Thông điệp thành công" #. Label of the success_uri (Data) field in DocType 'Token Cache' #: frappe/integrations/doctype/token_cache/token_cache.json msgid "Success URI" -msgstr "" +msgstr "URI thành công" #. Label of the success_url (Data) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Success URL" -msgstr "" +msgstr "URL thành công" #. Label of the success_message (Text) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Success message" -msgstr "" +msgstr "Thông báo thành công" #. Label of the success_title (Data) field in DocType 'Web Form' #: frappe/website/doctype/web_form/web_form.json msgid "Success title" -msgstr "" +msgstr "Tiêu đề thành công" #. Label of the successful_job_count (Int) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "Successful Job Count" -msgstr "" +msgstr "Số lượng công việc thành công" #: frappe/model/workflow.py:384 msgid "Successful Transactions" -msgstr "" +msgstr "Giao dịch thành công" -#: frappe/model/rename_doc.py:698 +#: frappe/model/rename_doc.py:701 msgid "Successful: {0} to {1}" -msgstr "" +msgstr "Thành công: {0} tới {1}" #: frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js:100 #: frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js:113 msgid "Successfully Updated" -msgstr "" +msgstr "Đã cập nhật thành công" #: frappe/core/doctype/data_import/data_import.js:449 msgid "Successfully imported {0}" -msgstr "" +msgstr "Đã nhập thành công {0}" #: frappe/core/doctype/data_import/data_import.js:150 msgid "Successfully imported {0} out of {1} records." -msgstr "" +msgstr "Đã nhập thành công {0} trong số {1} bản ghi." #: frappe/desk/doctype/form_tour/form_tour.py:87 msgid "Successfully reset onboarding status for all users." -msgstr "" +msgstr "Đặt lại thành công trạng thái giới thiệu cho tất cả người dùng." -#: frappe/core/doctype/user/user.py:1481 +#: frappe/core/doctype/user/user.py:1493 msgid "Successfully signed out" -msgstr "" +msgstr "Đăng xuất thành công" #: frappe/public/js/frappe/views/translation_manager.js:22 msgid "Successfully updated translations" -msgstr "" +msgstr "Đã cập nhật bản dịch thành công" #: frappe/core/doctype/data_import/data_import.js:457 msgid "Successfully updated {0}" -msgstr "" +msgstr "Đã cập nhật thành công {0}" #: frappe/core/doctype/data_import/data_import.js:155 msgid "Successfully updated {0} out of {1} records." -msgstr "" +msgstr "Đã cập nhật thành công {0} trong số {1} bản ghi." #: frappe/core/doctype/recorder/recorder.js:15 msgid "Suggest Optimizations" -msgstr "" +msgstr "Đề xuất tối ưu hóa" #. Label of the suggested_indexes (Table) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json msgid "Suggested Indexes" -msgstr "" +msgstr "Chỉ mục được đề xuất" #: frappe/core/doctype/user/user.py:774 msgid "Suggested Username: {0}" -msgstr "" +msgstr "Tên người dùng được đề xuất: {0}" #. Option for the 'Chart Type' (Select) field in DocType 'Dashboard Chart' #. Option for the 'Group By Type' (Select) field in DocType 'Dashboard Chart' @@ -25822,15 +25860,15 @@ msgstr "" #: frappe/desk/doctype/number_card/number_card.json #: frappe/public/js/frappe/ui/group_by/group_by.js:20 msgid "Sum" -msgstr "" +msgstr "Tổng" #: frappe/public/js/frappe/ui/group_by/group_by.js:340 msgid "Sum of {0}" -msgstr "" +msgstr "Tổng của {0}" #: frappe/public/js/frappe/views/interaction.js:88 msgid "Summary" -msgstr "" +msgstr "Tóm tắt" #. Option for the 'Day' (Select) field in DocType 'Assignment Rule Day' #. Option for the 'Day' (Select) field in DocType 'Auto Repeat Day' @@ -25846,24 +25884,24 @@ msgstr "" #: frappe/desk/doctype/event/event.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Sunday" -msgstr "" +msgstr "Chủ Nhật" #: frappe/email/doctype/email_queue/email_queue_list.js:27 msgid "Suspend Sending" -msgstr "" +msgstr "Đình chỉ gửi" #: frappe/public/js/frappe/ui/capture.js:277 msgid "Switch Camera" -msgstr "" +msgstr "Chuyển đổi máy ảnh" #: frappe/public/js/frappe/desk.js:96 #: frappe/public/js/frappe/ui/theme_switcher.js:11 msgid "Switch Theme" -msgstr "" +msgstr "Chuyển chủ đề" #: frappe/templates/includes/navbar/navbar_login.html:17 msgid "Switch To Desk" -msgstr "" +msgstr "Chuyển sang bàn làm việc" #: frappe/public/js/frappe/ui/capture.js:282 msgid "Switching Camera" @@ -25872,22 +25910,22 @@ msgstr "" #. Label of the symbol (Data) field in DocType 'Currency' #: frappe/geo/doctype/currency/currency.json msgid "Symbol" -msgstr "" +msgstr "Ký hiệu" #. Label of the sb_01 (Section Break) field in DocType 'Google Calendar' #. Label of the sync (Section Break) field in DocType 'Google Contacts' #: frappe/integrations/doctype/google_calendar/google_calendar.json #: frappe/integrations/doctype/google_contacts/google_contacts.json msgid "Sync" -msgstr "" +msgstr "Đồng bộ hóa" #: frappe/integrations/doctype/google_calendar/google_calendar.js:28 msgid "Sync Calendar" -msgstr "" +msgstr "Đồng bộ lịch" #: frappe/integrations/doctype/google_contacts/google_contacts.js:28 msgid "Sync Contacts" -msgstr "" +msgstr "Đồng bộ hóa danh bạ" #. Label of the sync_as_public (Check) field in DocType 'Google Calendar' #: frappe/integrations/doctype/google_calendar/google_calendar.json @@ -25896,7 +25934,7 @@ msgstr "" #: frappe/custom/doctype/customize_form/customize_form.js:256 msgid "Sync on Migrate" -msgstr "" +msgstr "Đồng bộ hóa khi di chuyển" #: frappe/integrations/doctype/google_calendar/google_calendar.py:312 msgid "Sync token was invalid and has been reset, Retry syncing." @@ -25914,29 +25952,29 @@ msgstr "" #: frappe/custom/doctype/doctype_layout/doctype_layout.js:46 msgid "Sync {0} Fields" -msgstr "" +msgstr "Đồng bộ hóa các trường {0}" #: frappe/custom/doctype/doctype_layout/doctype_layout.js:100 msgid "Synced Fields" -msgstr "" +msgstr "Trường được đồng bộ hóa" #: frappe/integrations/doctype/google_calendar/google_calendar.js:31 #: frappe/integrations/doctype/google_contacts/google_contacts.js:31 msgid "Syncing" -msgstr "" +msgstr "Đang đồng bộ hóa" #: frappe/integrations/doctype/google_calendar/google_calendar.js:19 msgid "Syncing {0} of {1}" -msgstr "" +msgstr "Đang đồng bộ hóa {0} của {1}" #: frappe/utils/data.py:2627 msgid "Syntax Error" -msgstr "" +msgstr "Lỗi cú pháp" #. Option for the 'Show in Module Section' (Select) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "System" -msgstr "" +msgstr "Hệ thống" #. Name of a DocType #: frappe/desk/doctype/system_console/system_console.json @@ -25946,48 +25984,48 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.py:410 msgid "System Generated Fields can not be renamed" -msgstr "" +msgstr "Không thể đổi tên các trường do hệ thống tạo" #. Label of a standard help item #. Type: Route #: frappe/hooks.py msgid "System Health" -msgstr "" +msgstr "Tình trạng hệ thống" #. Name of a DocType #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "System Health Report" -msgstr "" +msgstr "Báo cáo tình trạng hệ thống" #. Name of a DocType #: frappe/desk/doctype/system_health_report_errors/system_health_report_errors.json msgid "System Health Report Errors" -msgstr "" +msgstr "Lỗi báo cáo tình trạng hệ thống" #. Name of a DocType #: frappe/desk/doctype/system_health_report_failing_jobs/system_health_report_failing_jobs.json msgid "System Health Report Failing Jobs" -msgstr "" +msgstr "Báo cáo tình trạng hệ thống Công việc không thành công" #. Name of a DocType #: frappe/desk/doctype/system_health_report_queue/system_health_report_queue.json msgid "System Health Report Queue" -msgstr "" +msgstr "Hàng đợi báo cáo tình trạng hệ thống" #. Name of a DocType #: frappe/desk/doctype/system_health_report_tables/system_health_report_tables.json msgid "System Health Report Tables" -msgstr "" +msgstr "Bảng báo cáo tình trạng hệ thống" #. Name of a DocType #: frappe/desk/doctype/system_health_report_workers/system_health_report_workers.json msgid "System Health Report Workers" -msgstr "" +msgstr "Nhân viên báo cáo tình trạng hệ thống" #. Label of a Card Break in the Build Workspace #: frappe/core/workspace/build/build.json msgid "System Logs" -msgstr "" +msgstr "Nhật ký hệ thống" #. Name of a role #: frappe/automation/doctype/assignment_rule/assignment_rule.json @@ -26140,47 +26178,47 @@ msgstr "" #: frappe/workflow/doctype/workflow_state/workflow_state.json #: frappe/workflow/doctype/workflow_transition_tasks/workflow_transition_tasks.json msgid "System Manager" -msgstr "" +msgstr "Người quản lý hệ thống" #: frappe/desk/page/backups/backups.js:38 msgid "System Manager privileges required." -msgstr "" +msgstr "Cần có đặc quyền của Người quản lý hệ thống." #. Option for the 'Channel' (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "System Notification" -msgstr "" +msgstr "Thông báo hệ thống" #. Label of the system_page (Check) field in DocType 'Page' #: frappe/core/doctype/page/page.json msgid "System Page" -msgstr "" +msgstr "Trang hệ thống" #. Name of a DocType #: frappe/core/doctype/system_settings/system_settings.json msgid "System Settings" -msgstr "" +msgstr "Thiết lập hệ thống" #. Label of a number card in the Users Workspace #: frappe/core/workspace/users/users.json msgid "System Users" -msgstr "" +msgstr "Người dùng hệ thống" #. Description of the 'Allow Roles' (Table MultiSelect) field in DocType #. 'Module Onboarding' #: frappe/desk/doctype/module_onboarding/module_onboarding.json msgid "System managers are allowed by default" -msgstr "" +msgstr "Người quản lý hệ thống được cho phép theo mặc định" #: frappe/public/js/frappe/utils/number_systems.js:5 msgctxt "Number system" msgid "T" -msgstr "" +msgstr "T" #. Label of the tos_uri (Data) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "TOS URI" -msgstr "" +msgstr "URI TOS" #. Label of the navigate_to_tab (Autocomplete) field in DocType 'Workspace #. Sidebar Item' @@ -26216,30 +26254,30 @@ msgstr "" #: frappe/printing/page/print_format_builder/print_format_builder_field.html:39 #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Table" -msgstr "" +msgstr "Bảng" #. Option for the 'Fieldtype' (Select) field in DocType 'Web Template Field' #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Table Break" -msgstr "" +msgstr "Nghỉ Bàn" #: frappe/core/doctype/version/version_view.html:136 msgid "Table Field" -msgstr "" +msgstr "Trường bảng" #. Label of the table_fieldname (Data) field in DocType 'DocType Link' #: frappe/core/doctype/doctype_link/doctype_link.json msgid "Table Fieldname" -msgstr "" +msgstr "Tên trường bảng" -#: frappe/core/doctype/doctype/doctype.py:1221 +#: frappe/core/doctype/doctype/doctype.py:1224 msgid "Table Fieldname Missing" -msgstr "" +msgstr "Tên trường bảng bị thiếu" #. Label of the table_html (HTML) field in DocType 'Version' #: frappe/core/doctype/version/version.json msgid "Table HTML" -msgstr "" +msgstr "Bảng HTML" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -26256,89 +26294,89 @@ msgstr "" #: frappe/custom/doctype/customize_form/customize_form.js:229 msgid "Table Trimmed" -msgstr "" +msgstr "Bàn được cắt tỉa" -#: frappe/public/js/frappe/form/grid.js:1229 +#: frappe/public/js/frappe/form/grid.js:1234 msgid "Table updated" -msgstr "" +msgstr "Bảng được cập nhật" #: frappe/model/document.py:1626 msgid "Table {0} cannot be empty" -msgstr "" +msgstr "Bảng {0} không được để trống" #. Option for the 'PDF Page Size' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json msgid "Tabloid" -msgstr "" +msgstr "Báo lá cải" #. Name of a DocType #: frappe/desk/doctype/tag/tag.json msgid "Tag" -msgstr "" +msgstr "Gắn thẻ" #. Name of a DocType #: frappe/desk/doctype/tag_link/tag_link.json msgid "Tag Link" -msgstr "" +msgstr "Gắn thẻ liên kết" #: frappe/model/meta.py:59 #: frappe/public/js/frappe/form/templates/form_sidebar.html:124 -#: frappe/public/js/frappe/list/base_list.js:812 -#: frappe/public/js/frappe/list/base_list.js:995 +#: frappe/public/js/frappe/list/base_list.js:814 +#: frappe/public/js/frappe/list/base_list.js:997 #: frappe/public/js/frappe/list/bulk_operations.js:444 #: frappe/public/js/frappe/model/meta.js:215 #: frappe/public/js/frappe/model/model.js:133 #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:240 msgid "Tags" -msgstr "" +msgstr "Thẻ" #: frappe/public/js/frappe/ui/capture.js:221 msgid "Take Photo" -msgstr "" +msgstr "Chụp ảnh" #. Label of the target (Data) field in DocType 'Portal Menu Item' #. Label of the target (Small Text) field in DocType 'Website Route Redirect' #: frappe/website/doctype/portal_menu_item/portal_menu_item.json #: frappe/website/doctype/website_route_redirect/website_route_redirect.json msgid "Target" -msgstr "" +msgstr "Mục tiêu" #. Label of the task (Select) field in DocType 'Workflow Transition Task' #: frappe/desk/doctype/todo/todo_calendar.js:19 #: frappe/desk/doctype/todo/todo_calendar.js:25 #: frappe/workflow/doctype/workflow_transition_task/workflow_transition_task.json msgid "Task" -msgstr "" +msgstr "Nhiệm vụ" #. Label of the tasks (Table) field in DocType 'Workflow Transition Tasks' #: frappe/workflow/doctype/workflow_transition_tasks/workflow_transition_tasks.json msgid "Tasks" -msgstr "" +msgstr "Nhiệm vụ" #. Label of the sb1 (Section Break) field in DocType 'About Us Settings' #. Label of the team_members (Table) field in DocType 'About Us Settings' #: frappe/website/doctype/about_us_settings/about_us_settings.json #: frappe/www/about.html:45 msgid "Team Members" -msgstr "" +msgstr "Thành viên nhóm" #. Label of the team_members_heading (Data) field in DocType 'About Us #. Settings' #: frappe/website/doctype/about_us_settings/about_us_settings.json msgid "Team Members Heading" -msgstr "" +msgstr "Tiêu đề của các thành viên trong nhóm" #. Label of the team_members_subtitle (Small Text) field in DocType 'About Us #. Settings' #: frappe/website/doctype/about_us_settings/about_us_settings.json msgid "Team Members Subtitle" -msgstr "" +msgstr "Phụ đề của các thành viên trong nhóm" #. Label of the telemetry_section (Section Break) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Telemetry" -msgstr "" +msgstr "Đo từ xa" #. Label of the template (Link) field in DocType 'Auto Repeat' #. Label of the template (Code) field in DocType 'Address Template' @@ -26349,55 +26387,55 @@ msgstr "" #: frappe/printing/doctype/print_format_field_template/print_format_field_template.json #: frappe/website/doctype/web_template/web_template.json msgid "Template" -msgstr "" +msgstr "Bản mẫu" #: frappe/core/doctype/data_import/importer.py:483 #: frappe/core/doctype/data_import/importer.py:610 msgid "Template Error" -msgstr "" +msgstr "Lỗi mẫu" #. Label of the template_file (Data) field in DocType 'Print Format Field #. Template' #: frappe/printing/doctype/print_format_field_template/print_format_field_template.json msgid "Template File" -msgstr "" +msgstr "Tệp mẫu" #. Label of the template_options (Code) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Template Options" -msgstr "" +msgstr "Tùy chọn mẫu" #. Label of the template_warnings (Code) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Template Warnings" -msgstr "" +msgstr "Cảnh báo về mẫu" #: frappe/public/js/frappe/views/workspace/blocks/paragraph.js:78 msgid "Templates" -msgstr "" +msgstr "Mẫu" #: frappe/core/doctype/user/user.py:1092 msgid "Temporarily Disabled" -msgstr "" +msgstr "Tạm thời bị vô hiệu hóa" #: frappe/core/doctype/translation/test_translation.py:47 #: frappe/core/doctype/translation/test_translation.py:54 msgid "Test Data" -msgstr "" +msgstr "Dữ liệu thử nghiệm" #. Label of the test_job_id (Data) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Test Job ID" -msgstr "" +msgstr "ID công việc kiểm tra" #: frappe/core/doctype/translation/test_translation.py:49 #: frappe/core/doctype/translation/test_translation.py:57 msgid "Test Spanish" -msgstr "" +msgstr "Kiểm tra tiếng Tây Ban Nha" #: frappe/core/doctype/file/test_file.py:379 msgid "Test_Folder" -msgstr "" +msgstr "Test_Thư mục" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -26410,22 +26448,22 @@ msgstr "" #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/website/doctype/web_template_field/web_template_field.json msgid "Text" -msgstr "" +msgstr "Văn bản" #. Label of the text_align (Select) field in DocType 'Web Page' #: frappe/website/doctype/web_page/web_page.json msgid "Text Align" -msgstr "" +msgstr "Căn chỉnh văn bản" #. Label of the text_color (Link) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "Text Color" -msgstr "" +msgstr "Màu văn bản" #. Label of the text_content (Code) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Text Content" -msgstr "" +msgstr "Nội dung văn bản" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Option for the 'Field Type' (Select) field in DocType 'Custom Field' @@ -26436,21 +26474,23 @@ msgstr "" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Text Editor" -msgstr "" +msgstr "Trình soạn thảo văn bản" #: frappe/templates/emails/password_reset.html:5 msgid "Thank you" -msgstr "" +msgstr "Cảm ơn bạn" #: frappe/www/contact.py:46 msgid "Thank you for reaching out to us. We will get back to you at the earliest.\n\n\n" "Your query:\n\n" "{0}" -msgstr "" +msgstr "Cảm ơn bạn đã liên hệ với chúng tôi. Chúng tôi sẽ liên hệ lại với bạn sớm nhất.\n\n\n" +"Truy vấn của bạn:\n\n" +"{0}" -#: frappe/website/doctype/web_form/templates/web_form.html:147 +#: frappe/website/doctype/web_form/templates/web_form.html:156 msgid "Thank you for spending your valuable time to fill this form" -msgstr "" +msgstr "Cảm ơn bạn đã dành thời gian quý báu để điền vào biểu mẫu này" #: frappe/templates/emails/auto_reply.html:1 msgid "Thank you for your email" @@ -26458,23 +26498,23 @@ msgstr "" #: frappe/website/doctype/help_article/templates/help_article.html:27 msgid "Thank you for your feedback!" -msgstr "" +msgstr "Cảm ơn bạn đã phản hồi của bạn!" #: frappe/templates/includes/contact.js:36 msgid "Thank you for your message" -msgstr "" +msgstr "Cảm ơn tin nhắn của bạn" #: frappe/templates/emails/new_user.html:16 msgid "Thanks" -msgstr "" +msgstr "Cảm ơn" #: frappe/templates/emails/auto_repeat_fail.html:3 msgid "The Auto Repeat for this document has been disabled." -msgstr "" +msgstr "Tính năng Tự động lặp lại cho tài liệu này đã bị tắt." -#: frappe/public/js/frappe/form/grid.js:1252 +#: frappe/public/js/frappe/form/grid.js:1257 msgid "The CSV format is case sensitive" -msgstr "" +msgstr "Định dạng CSV phân biệt chữ hoa chữ thường" #. Description of the 'Client ID' (Data) field in DocType 'Google Settings' #: frappe/integrations/doctype/google_settings/google_settings.json @@ -26485,15 +26525,15 @@ msgstr "" #: frappe/email/doctype/notification/notification.py:224 msgid "The Condition '{0}' is invalid" -msgstr "" +msgstr "Điều kiện '{0}' không hợp lệ" -#: frappe/core/doctype/file/file.py:230 +#: frappe/core/doctype/file/file.py:231 msgid "The File URL you've entered is incorrect" -msgstr "" +msgstr "URL tệp bạn đã nhập không chính xác" #: frappe/automation/doctype/auto_repeat/auto_repeat.py:112 msgid "The Next Scheduled Date cannot be later than the End Date." -msgstr "" +msgstr "Ngày lên lịch tiếp theo không thể muộn hơn Ngày kết thúc." #: frappe/integrations/doctype/push_notification_settings/push_notification_settings.py:29 msgid "The Push Relay Server URL key (`push_relay_server_url`) is missing in your site config" @@ -26501,21 +26541,21 @@ msgstr "" #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.py:368 msgid "The User record for this request has been auto-deleted due to inactivity by system admins." -msgstr "" +msgstr "Bản ghi Người dùng cho yêu cầu này đã tự động bị xóa do quản trị viên hệ thống không hoạt động." #: frappe/public/js/frappe/desk.js:162 msgid "The application has been updated to a new version, please refresh this page" -msgstr "" +msgstr "Ứng dụng đã được cập nhật lên phiên bản mới, vui lòng làm mới trang này" #. Description of the 'Application Name' (Data) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "The application name will be used in the Login page." -msgstr "" +msgstr "Tên ứng dụng sẽ được sử dụng trong trang Đăng nhập." #: frappe/public/js/frappe/views/interaction.js:323 msgid "The attachments could not be correctly linked to the new document" -msgstr "" +msgstr "Không thể liên kết chính xác các tệp đính kèm với tài liệu mới" #. Description of the 'API Key' (Data) field in DocType 'Google Settings' #: frappe/integrations/doctype/google_settings/google_settings.json @@ -26526,7 +26566,7 @@ msgstr "" #: frappe/database/database.py:481 msgid "The changes have been reverted." -msgstr "" +msgstr "Những thay đổi đã được hoàn nguyên." #: frappe/core/doctype/data_import/importer.py:1008 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." @@ -26534,28 +26574,28 @@ msgstr "" #: frappe/templates/includes/comments/comments.py:48 msgid "The comment cannot be empty" -msgstr "" +msgstr "Bình luận không được để trống" #: frappe/templates/emails/workflow_action.html:9 msgid "The contents of this email are strictly confidential. Please do not forward this email to anyone." msgstr "" -#: frappe/public/js/frappe/list/list_view.js:691 +#: frappe/public/js/frappe/list/list_view.js:700 msgid "The count shown is an estimated count. Click here to see the accurate count." msgstr "" #. Description of the 'Code' (Data) field in DocType 'Country' #: frappe/geo/doctype/country/country.json msgid "The country's ISO 3166 ALPHA-2 code." -msgstr "" +msgstr "Mã ISO 3166 ALPHA-2 của quốc gia." #: frappe/public/js/frappe/views/interaction.js:301 msgid "The document could not be correctly assigned" -msgstr "" +msgstr "Tài liệu không thể được chỉ định chính xác" #: frappe/public/js/frappe/views/interaction.js:295 msgid "The document has been assigned to {0}" -msgstr "" +msgstr "Tài liệu đã được gán cho {0}" #. Description of the 'Parent Document Type' (Link) field in DocType 'Dashboard #. Chart' @@ -26572,27 +26612,27 @@ msgstr "" #: frappe/desk/search.py:291 msgid "The field {0} in {1} does not allow ignoring user permissions" -msgstr "" +msgstr "Trường {0} trong {1} không cho phép bỏ qua quyền của người dùng" #: frappe/desk/search.py:301 msgid "The field {0} in {1} links to {2} and not {3}" -msgstr "" +msgstr "Trường {0} trong {1} liên kết đến {2} chứ không phải {3}" #: frappe/core/doctype/user_type/user_type.py:110 msgid "The field {0} is mandatory" msgstr "" -#: frappe/core/doctype/file/file.py:158 +#: frappe/core/doctype/file/file.py:159 msgid "The fieldname you've specified in Attached To Field is invalid" -msgstr "" +msgstr "Tên trường bạn đã chỉ định trong Trường được đính kèm không hợp lệ" #: frappe/automation/doctype/assignment_rule/assignment_rule.py:62 msgid "The following Assignment Days have been repeated: {0}" -msgstr "" +msgstr "Những ngày phân công sau đây đã được lặp lại: {0}" #: frappe/printing/doctype/letter_head/letter_head.js:30 msgid "The following Header Script will add the current date to an element in 'Header HTML' with class 'header-content'" -msgstr "" +msgstr "Tập lệnh Tiêu đề sau đây sẽ thêm ngày hiện tại vào một phần tử trong 'HTML Tiêu đề' với lớp 'nội dung tiêu đề'" #: frappe/core/doctype/data_import/importer.py:1088 msgid "The following values are invalid: {0}. Values must be one of {1}" @@ -26600,7 +26640,7 @@ msgstr "" #: frappe/core/doctype/data_import/importer.py:1045 msgid "The following values do not exist for {0}: {1}" -msgstr "" +msgstr "Các giá trị sau không tồn tại cho {0}: {1}" #: frappe/core/doctype/user_type/user_type.py:89 msgid "The limit has not set for the user type {0} in the site config file." @@ -26608,11 +26648,11 @@ msgstr "" #: frappe/templates/emails/login_with_email_link.html:21 msgid "The link will expire in {0} minutes" -msgstr "" +msgstr "Liên kết sẽ hết hạn sau {0} phút" #: frappe/www/login.py:194 msgid "The link you trying to login is invalid or expired." -msgstr "" +msgstr "Liên kết bạn đang cố đăng nhập không hợp lệ hoặc đã hết hạn." #: frappe/website/doctype/web_page/web_page.js:125 msgid "The meta description is an HTML attribute that provides a brief summary of a web page. Search engines such as Google often display the meta description in search results, which can influence click-through rates." @@ -26630,24 +26670,24 @@ msgstr "" #. Description of the 'Track Steps' (Check) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "The next tour will start from where the user left off." -msgstr "" +msgstr "Chuyến tham quan tiếp theo sẽ bắt đầu từ nơi người dùng đã dừng lại." #. Description of the 'Request Timeout' (Int) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "The number of seconds until the request expires" -msgstr "" +msgstr "Số giây cho đến khi yêu cầu hết hạn" #: frappe/www/update-password.html:101 msgid "The password of your account has expired." -msgstr "" +msgstr "Mật khẩu tài khoản của bạn đã hết hạn." #: frappe/core/page/permission_manager/permission_manager_help.html:53 msgid "The print button is enabled for the user in the document." -msgstr "" +msgstr "Nút in được kích hoạt cho người dùng trong tài liệu." #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.py:399 msgid "The process for deletion of {0} data associated with {1} has been initiated." -msgstr "" +msgstr "Quá trình xóa dữ liệu {0} liên kết với {1} đã được bắt đầu." #. Description of the 'App ID' (Data) field in DocType 'Google Settings' #: frappe/integrations/doctype/google_settings/google_settings.json @@ -26658,7 +26698,7 @@ msgstr "" #: frappe/desk/utils.py:106 msgid "The report you requested has been generated.

Click here to download:
{0}

This link will expire in {1} hours." -msgstr "" +msgstr "Báo cáo bạn yêu cầu đã được tạo.

Nhấn vào đây để tải về:
{0}

Liên kết này sẽ hết hạn sau {1} giờ." #: frappe/core/doctype/user/user.py:1050 msgid "The reset password link has been expired" @@ -26666,11 +26706,11 @@ msgstr "" #: frappe/core/doctype/user/user.py:1052 msgid "The reset password link has either been used before or is invalid" -msgstr "" +msgstr "Liên kết đặt lại mật khẩu đã được sử dụng trước đó hoặc không hợp lệ" #: frappe/app.py:391 frappe/public/js/frappe/request.js:147 msgid "The resource you are looking for is not available" -msgstr "" +msgstr "Tài nguyên bạn đang tìm kiếm không có sẵn" #: frappe/core/doctype/user_type/user_type.py:114 msgid "The role {0} should be a custom role." @@ -26682,51 +26722,51 @@ msgstr "" #: frappe/utils/response.py:343 msgid "The system is being updated. Please refresh again after a few moments." -msgstr "" +msgstr "Hệ thống đang được cập nhật. Vui lòng làm mới lại sau giây lát." #: frappe/core/page/permission_manager/permission_manager_help.html:9 msgid "The system provides many pre-defined roles. You can add new roles to set finer permissions." -msgstr "" +msgstr "Hệ thống cung cấp nhiều vai trò được xác định trước. Bạn có thể thêm vai trò mới để đặt quyền tốt hơn." #: frappe/core/doctype/user_type/user_type.py:97 msgid "The total number of user document types limit has been crossed." -msgstr "" +msgstr "Tổng số giới hạn loại tài liệu người dùng đã bị vượt qua." #: frappe/core/page/permission_manager/permission_manager_help.html:43 msgid "The user can create a new Item but cannot edit existing items." -msgstr "" +msgstr "Người dùng có thể tạo một Mục mới nhưng không thể chỉnh sửa các mục hiện có." #: frappe/core/page/permission_manager/permission_manager_help.html:48 msgid "The user can delete Draft / Cancelled documents." -msgstr "" +msgstr "Người dùng có thể xóa các tài liệu Dự thảo/Đã hủy." #: frappe/core/page/permission_manager/permission_manager_help.html:68 msgid "The user can export report data." -msgstr "" +msgstr "Người dùng có thể xuất dữ liệu báo cáo." #: frappe/core/page/permission_manager/permission_manager_help.html:73 msgid "The user can import new records or update existing data for the document." -msgstr "" +msgstr "Người dùng có thể nhập bản ghi mới hoặc cập nhật dữ liệu hiện có cho tài liệu." #: frappe/core/page/permission_manager/permission_manager_help.html:28 msgid "The user can select a Customer in Sales Order but cannot open the Customer master." -msgstr "" +msgstr "Người dùng có thể chọn Khách hàng trong Đơn đặt hàng nhưng không thể mở Bản cái khách hàng." #: frappe/core/page/permission_manager/permission_manager_help.html:78 msgid "The user can share document access with another user." -msgstr "" +msgstr "Người dùng có thể chia sẻ quyền truy cập tài liệu với người dùng khác." #: frappe/core/page/permission_manager/permission_manager_help.html:38 msgid "The user can update a customer or any other fields in an existing Sales Order but cannot create a new Sales Order." -msgstr "" +msgstr "Người dùng có thể cập nhật khách hàng hoặc bất kỳ trường nào khác trong Đơn bán hàng hiện có nhưng không thể tạo Đơn bán hàng mới." #: frappe/core/page/permission_manager/permission_manager_help.html:33 msgid "The user can view Sales Invoices but cannot modify any field values in them." -msgstr "" +msgstr "Người dùng có thể xem Hóa đơn bán hàng nhưng không thể sửa đổi bất kỳ giá trị trường nào trong đó." -#: frappe/model/base_document.py:814 +#: frappe/model/base_document.py:827 msgid "The value of the field {0} is too long in the {1} document. To resolve this issue, please reduce the value length or change the {0} field Type to Long Text using customize form, and then try again." -msgstr "" +msgstr "Giá trị của trường {0} quá dài trong tài liệu {1}. Để giải quyết vấn đề này, vui lòng giảm độ dài giá trị hoặc thay đổi loại trường {0} thành Văn bản dài bằng biểu mẫu tùy chỉnh rồi thử lại." #: frappe/public/js/frappe/form/controls/data.js:25 msgid "The value you pasted was {0} characters long. Max allowed characters is {1}." @@ -26739,7 +26779,7 @@ msgstr "" #: frappe/automation/doctype/auto_repeat/auto_repeat.py:183 msgid "The {0} is already on auto repeat {1}" -msgstr "" +msgstr "{0} đã được tự động lặp lại {1}" #. Label of the section_break_6 (Section Break) field in DocType 'Website #. Settings' @@ -26748,22 +26788,22 @@ msgstr "" #: frappe/website/doctype/website_settings/website_settings.json #: frappe/website/doctype/website_theme/website_theme.json msgid "Theme" -msgstr "" +msgstr "Chủ đề" #: frappe/public/js/frappe/ui/theme_switcher.js:130 msgid "Theme Changed" -msgstr "" +msgstr "Chủ Đề Đã Thay Đổi" #. Label of the bootstrap_theme_section (Tab Break) field in DocType 'Website #. Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "Theme Configuration" -msgstr "" +msgstr "Cấu hình chủ đề" #. Label of the theme_url (Data) field in DocType 'Website Theme' #: frappe/website/doctype/website_theme/website_theme.json msgid "Theme URL" -msgstr "" +msgstr "URL chủ đề" #: frappe/workflow/doctype/workflow/workflow.js:125 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." @@ -26771,32 +26811,32 @@ msgstr "" #: frappe/public/js/frappe/ui/notifications/notifications.js:482 msgid "There are no upcoming events for you." -msgstr "" +msgstr "Không có sự kiện sắp tới cho bạn." #: frappe/website/web_template/discussions/discussions.html:3 msgid "There are no {0} for this {1}, why don't you start one!" -msgstr "" +msgstr "Không có {0} cho {1} này, tại sao bạn không bắt đầu một cái!" #: frappe/public/js/frappe/views/reports/query_report.js:989 msgid "There are {0} with the same filters already in the queue:" -msgstr "" +msgstr "Có {0} với các bộ lọc tương tự đã có trong hàng đợi:" #: frappe/website/doctype/web_form/web_form.js:81 #: frappe/website/doctype/web_form/web_form.js:334 msgid "There can be only 9 Page Break fields in a Web Form" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1472 +#: frappe/core/doctype/doctype/doctype.py:1475 msgid "There can be only one Fold in a form" msgstr "" #: frappe/contacts/doctype/address/address.py:182 msgid "There is an error in your Address Template {0}" -msgstr "" +msgstr "Có lỗi trong Mẫu địa chỉ của bạn {0}" #: frappe/core/doctype/data_export/exporter.py:162 msgid "There is no data to be exported" -msgstr "" +msgstr "Không có dữ liệu nào được xuất" #: frappe/model/workflow.py:191 msgid "There is no task called \"{}\"" @@ -26804,55 +26844,55 @@ msgstr "" #: frappe/public/js/frappe/ui/notifications/notifications.js:532 msgid "There is nothing new to show you right now." -msgstr "" +msgstr "Không có gì mới để cho bạn thấy ngay bây giờ." -#: frappe/core/doctype/file/file.py:650 frappe/utils/file_manager.py:372 +#: frappe/core/doctype/file/file.py:654 frappe/utils/file_manager.py:372 msgid "There is some problem with the file url: {0}" msgstr "" #: frappe/public/js/frappe/views/reports/query_report.js:986 msgid "There is {0} with the same filters already in the queue:" -msgstr "" +msgstr "Có {0} với các bộ lọc tương tự đã có trong hàng đợi:" #: frappe/core/page/permission_manager/permission_manager.py:166 msgid "There must be atleast one permission rule." -msgstr "" +msgstr "Phải có ít nhất một quy tắc cấp phép." #: frappe/www/error.py:17 msgid "There was an error building this page" -msgstr "" +msgstr "Đã xảy ra lỗi khi xây dựng trang này" #: frappe/public/js/frappe/views/kanban/kanban_view.js:196 msgid "There was an error saving filters" -msgstr "" +msgstr "Đã xảy ra lỗi khi lưu bộ lọc" #: frappe/public/js/frappe/form/sidebar/attachments.js:216 msgid "There were errors" -msgstr "" +msgstr "Đã xảy ra lỗi" #: frappe/public/js/frappe/views/interaction.js:277 msgid "There were errors while creating the document. Please try again." -msgstr "" +msgstr "Đã xảy ra lỗi khi tạo tài liệu. Vui lòng thử lại." -#: frappe/public/js/frappe/views/communication.js:903 +#: frappe/public/js/frappe/views/communication.js:904 msgid "There were errors while sending email. Please try again." msgstr "" -#: frappe/model/naming.py:500 +#: frappe/model/naming.py:515 msgid "There were some errors setting the name, please contact the administrator" -msgstr "" +msgstr "Có một số lỗi khi đặt tên, vui lòng liên hệ quản trị viên" #. Description of the 'Announcement Widget' (Text Editor) field in DocType #. 'Navbar Settings' #: frappe/core/doctype/navbar_settings/navbar_settings.json msgid "These announcements will appear inside a dismissible alert below the Navbar." -msgstr "" +msgstr "Những thông báo này sẽ xuất hiện bên trong một cảnh báo có thể loại bỏ bên dưới Thanh điều hướng." #. Description of the 'Metadata' (Section Break) field in DocType 'OAuth #. Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "These fields are used to provide resource server metadata to clients querying the \"well known protected resource\" end point." -msgstr "" +msgstr "Các trường này được sử dụng để cung cấp siêu dữ liệu máy chủ tài nguyên cho khách hàng đang truy vấn điểm cuối \"tài nguyên được bảo vệ phổ biến\"." #. Description of the 'LDAP Custom Settings' (Section Break) field in DocType #. 'LDAP Settings' @@ -26867,17 +26907,17 @@ msgstr "" #: frappe/www/third_party_apps.html:3 frappe/www/third_party_apps.html:14 msgid "Third Party Apps" -msgstr "" +msgstr "Ứng dụng của bên thứ ba" #. Label of the third_party_authentication (Section Break) field in DocType #. 'User' #: frappe/core/doctype/user/user.json msgid "Third Party Authentication" -msgstr "" +msgstr "Xác thực của bên thứ ba" #: frappe/geo/doctype/currency/currency.js:8 msgid "This Currency is disabled. Enable to use in transactions" -msgstr "" +msgstr "Loại tiền tệ này bị vô hiệu hóa. Cho phép sử dụng trong giao dịch" #: frappe/public/js/frappe/views/kanban/kanban_view.js:405 msgid "This Kanban Board will be private" @@ -26885,36 +26925,36 @@ msgstr "" #: frappe/public/js/frappe/ui/filters/filter.js:665 msgid "This Month" -msgstr "" +msgstr "Tháng Này" -#: frappe/core/doctype/file/file.py:406 +#: frappe/core/doctype/file/file.py:407 msgid "This PDF cannot be uploaded as it contains unsafe content." -msgstr "" +msgstr "Không thể tải lên bản PDF này vì nó chứa nội dung không an toàn." #: frappe/public/js/frappe/ui/filters/filter.js:669 msgid "This Quarter" -msgstr "" +msgstr "Quý này" #: frappe/public/js/frappe/ui/filters/filter.js:661 msgid "This Week" -msgstr "" +msgstr "Tuần này" #: frappe/public/js/frappe/ui/filters/filter.js:673 msgid "This Year" -msgstr "" +msgstr "Năm nay" #: frappe/custom/doctype/customize_form/customize_form.js:220 msgid "This action is irreversible. Do you wish to continue?" msgstr "" -#: frappe/__init__.py:543 +#: frappe/__init__.py:545 msgid "This action is only allowed for {}" -msgstr "" +msgstr "Hành động này chỉ được phép đối với {}" #: frappe/public/js/frappe/form/toolbar.js:127 -#: frappe/public/js/frappe/model/model.js:706 +#: frappe/public/js/frappe/model/model.js:718 msgid "This cannot be undone" -msgstr "" +msgstr "Việc này không thể hoàn tác" #: frappe/desk/doctype/number_card/number_card.js:484 msgctxt "Number Card" @@ -26924,28 +26964,28 @@ msgstr "" #. Description of the 'Is Public' (Check) field in DocType 'Number Card' #: frappe/desk/doctype/number_card/number_card.json msgid "This card will be available to all Users if this is set" -msgstr "" +msgstr "Thẻ này sẽ có sẵn cho tất cả Người dùng nếu điều này được đặt" #. Description of the 'Is Public' (Check) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "This chart will be available to all Users if this is set" -msgstr "" +msgstr "Biểu đồ này sẽ có sẵn cho tất cả Người dùng nếu điều này được đặt" #: frappe/custom/doctype/customize_form/customize_form.js:212 msgid "This doctype has no orphan fields to trim" -msgstr "" +msgstr "Loại tài liệu này không có trường mồ côi để cắt" -#: frappe/core/doctype/doctype/doctype.py:1072 +#: frappe/core/doctype/doctype/doctype.py:1075 msgid "This doctype has pending migrations, run 'bench migrate' before modifying the doctype to avoid losing changes." -msgstr "" +msgstr "Loại tài liệu này có các lần di chuyển đang chờ xử lý, hãy chạy 'di chuyển băng ghế dự bị' trước khi sửa đổi loại tài liệu để tránh mất các thay đổi." #: frappe/model/delete_doc.py:155 msgid "This document can not be deleted right now as it's being modified by another user. Please try again after some time." -msgstr "" +msgstr "Không thể xóa tài liệu này ngay bây giờ vì nó đang được người dùng khác sửa đổi. Vui lòng thử lại sau một thời gian." #: frappe/core/doctype/submission_queue/submission_queue.py:171 msgid "This document has already been queued for submission. You can track the progress over {0}." -msgstr "" +msgstr "Tài liệu này đã được xếp hàng để nộp. Bạn có thể theo dõi tiến trình trên {0}." #: frappe/www/confirm_workflow_action.html:8 msgid "This document has been modified after the email was sent." @@ -26957,7 +26997,7 @@ msgstr "" #: frappe/public/js/frappe/form/form.js:1142 msgid "This document is already amended, you cannot ammend it again" -msgstr "" +msgstr "Tài liệu này đã được sửa đổi, bạn không thể sửa đổi lại" #: frappe/model/document.py:508 msgid "This document is currently locked and queued for execution. Please try again after some time." @@ -26985,7 +27025,7 @@ msgid "This field will appear only if the fieldname defined here has value OR th "eval:doc.age>18" msgstr "" -#: frappe/core/doctype/file/file.py:532 +#: frappe/core/doctype/file/file.py:533 msgid "This file is attached to a protected document and cannot be deleted." msgstr "" @@ -26999,16 +27039,16 @@ msgstr "" #: frappe/public/js/frappe/form/form.js:1248 msgid "This form has been modified after you have loaded it" -msgstr "" +msgstr "Biểu mẫu này đã được sửa đổi sau khi bạn tải nó" #: frappe/public/js/frappe/form/form.js:2314 msgid "This form is not editable due to a Workflow." -msgstr "" +msgstr "Biểu mẫu này không thể chỉnh sửa được do Quy trình công việc." #. Description of the 'Is Default' (Check) field in DocType 'Address Template' #: frappe/contacts/doctype/address_template/address_template.json msgid "This format is used if country specific format is not found" -msgstr "" +msgstr "Định dạng này được sử dụng nếu không tìm thấy định dạng cụ thể theo quốc gia" #: frappe/integrations/doctype/geolocation_settings/geolocation_settings.py:52 msgid "This geolocation provider is not supported yet." @@ -27018,7 +27058,7 @@ msgstr "" #. Slideshow' #: frappe/website/doctype/website_slideshow/website_slideshow.json msgid "This goes above the slideshow." -msgstr "" +msgstr "Điều này vượt lên trên trình chiếu." #: frappe/public/js/frappe/views/reports/query_report.js:2308 msgid "This is a background report. Please set the appropriate filters and then generate a new one." @@ -27046,7 +27086,7 @@ msgstr "" #: frappe/utils/password_strength.py:164 msgid "This is similar to a commonly used password." -msgstr "" +msgstr "Điều này tương tự như một mật khẩu thường được sử dụng." #. Description of the 'Current Value' (Int) field in DocType 'Document Naming #. Settings' @@ -27056,19 +27096,19 @@ msgstr "" #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.py:408 msgid "This link has already been activated for verification." -msgstr "" +msgstr "Liên kết này đã được kích hoạt để xác minh." #: frappe/utils/verified_command.py:49 msgid "This link is invalid or expired. Please make sure you have pasted correctly." -msgstr "" +msgstr "Liên kết này không hợp lệ hoặc đã hết hạn. Hãy chắc chắn rằng bạn đã dán chính xác." #: frappe/printing/page/print/print.js:458 msgid "This may get printed on multiple pages" -msgstr "" +msgstr "Điều này có thể được in trên nhiều trang" #: frappe/utils/goal.py:120 msgid "This month" -msgstr "" +msgstr "Tháng này" #: frappe/public/js/frappe/views/reports/query_report.js:1065 msgid "This report contains {0} rows and is too big to display in browser, you can {1} this report instead." @@ -27076,15 +27116,15 @@ msgstr "" #: frappe/templates/emails/auto_email_report.html:57 msgid "This report was generated on {0}" -msgstr "" +msgstr "Báo cáo này được tạo vào {0}" #: frappe/public/js/frappe/views/reports/query_report.js:877 msgid "This report was generated {0}." -msgstr "" +msgstr "Báo cáo này đã được tạo {0}." #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.py:122 msgid "This request has not yet been approved by the user." -msgstr "" +msgstr "Yêu cầu này vẫn chưa được người dùng chấp thuận." #: frappe/templates/includes/navbar/navbar_items.html:95 msgid "This site is in read only mode, full functionality will be restored soon." @@ -27096,7 +27136,7 @@ msgstr "" #: frappe/www/attribution.html:11 msgid "This software is built on top of many open source packages." -msgstr "" +msgstr "Phần mềm này được xây dựng dựa trên nhiều gói nguồn mở." #: 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" @@ -27104,37 +27144,37 @@ msgstr "" #: frappe/public/js/frappe/form/controls/base_input.js:141 msgid "This value is fetched from {0}'s {1} field" -msgstr "" +msgstr "Giá trị này được tìm nạp từ trường {1} của {0}" #. Description of the 'Max Report Rows' (Int) field in DocType 'System #. Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "This value specifies the max number of rows that can be rendered in report view." -msgstr "" +msgstr "Giá trị này chỉ định số lượng hàng tối đa có thể được hiển thị trong chế độ xem báo cáo." #: frappe/website/doctype/web_page/web_page.js:85 msgid "This will be automatically generated when you publish the page, you can also enter a route yourself if you wish" -msgstr "" +msgstr "Điều này sẽ được tạo tự động khi bạn xuất bản trang, bạn cũng có thể tự nhập lộ trình nếu muốn" #. Description of the 'Callback Message' (Small Text) field in DocType #. 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "This will be shown in a modal after routing" -msgstr "" +msgstr "Điều này sẽ được hiển thị theo phương thức sau khi định tuyến" #. Description of the 'Report Description' (Data) field in DocType 'Onboarding #. Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "This will be shown to the user in a dialog after routing to the report" -msgstr "" +msgstr "Điều này sẽ được hiển thị cho người dùng trong hộp thoại sau khi định tuyến tới báo cáo" #: frappe/www/third_party_apps.html:23 msgid "This will log out {0} from all other devices" -msgstr "" +msgstr "Thao tác này sẽ đăng xuất {0} khỏi tất cả các thiết bị khác" #: frappe/templates/emails/delete_data_confirmation.html:3 msgid "This will permanently remove your data." -msgstr "" +msgstr "Điều này sẽ xóa vĩnh viễn dữ liệu của bạn." #: frappe/desk/doctype/form_tour/form_tour.js:103 msgid "This will reset this tour and show it to all users. Are you sure?" @@ -27148,12 +27188,12 @@ msgstr "Điều này sẽ kết thúc công việc ngay lập tức và có th #: frappe/core/doctype/user/user.py:1325 msgid "Throttled" -msgstr "" +msgstr "Điều tiết" #. Label of the thumbnail_url (Small Text) field in DocType 'File' #: frappe/core/doctype/file/file.json msgid "Thumbnail URL" -msgstr "" +msgstr "URL hình thu nhỏ" #. Option for the 'Day' (Select) field in DocType 'Assignment Rule Day' #. Option for the 'Day' (Select) field in DocType 'Auto Repeat Day' @@ -27169,7 +27209,7 @@ msgstr "" #: frappe/desk/doctype/event/event.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Thursday" -msgstr "" +msgstr "Thứ năm" #. Option for the 'Type' (Select) field in DocType 'DocField' #. Label of the time (Datetime) field in DocType 'Recorder' @@ -27188,39 +27228,39 @@ msgstr "" #: frappe/desk/doctype/event_notifications/event_notifications.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Time" -msgstr "" +msgstr "Thời gian" #. Label of the time_format (Select) field in DocType 'Language' #. Label of the time_format (Select) field in DocType 'System Settings' #: frappe/core/doctype/language/language.json #: frappe/core/doctype/system_settings/system_settings.json msgid "Time Format" -msgstr "" +msgstr "Định dạng thời gian" #. Label of the time_interval (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Time Interval" -msgstr "" +msgstr "Khoảng thời gian" #. Label of the timeseries (Check) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Time Series" -msgstr "" +msgstr "Chuỗi thời gian" #. Label of the based_on (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Time Series Based On" -msgstr "" +msgstr "Chuỗi thời gian dựa trên" #. Label of the time_taken (Duration) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "Time Taken" -msgstr "" +msgstr "Thời gian thực hiện" #. Label of the rate_limit_seconds (Int) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "Time Window (Seconds)" -msgstr "" +msgstr "Cửa sổ thời gian (Giây)" #. Label of the time_zone (Select) field in DocType 'System Settings' #. Label of the time_zone (Autocomplete) field in DocType 'User' @@ -27229,113 +27269,113 @@ msgstr "" #: frappe/core/doctype/system_settings/system_settings.json #: frappe/core/doctype/user/user.json #: frappe/core/web_form/edit_profile/edit_profile.json -#: frappe/desk/page/setup_wizard/setup_wizard.js:407 +#: frappe/desk/page/setup_wizard/setup_wizard.js:404 #: frappe/website/doctype/web_page_view/web_page_view.json msgid "Time Zone" -msgstr "" +msgstr "Múi giờ" #. Label of the time_zones (Text) field in DocType 'Country' #: frappe/geo/doctype/country/country.json msgid "Time Zones" -msgstr "" +msgstr "Múi giờ" #. Label of the time_format (Data) field in DocType 'Country' #: frappe/geo/doctype/country/country.json msgid "Time format" -msgstr "" +msgstr "Định dạng thời gian" #. Label of the time_in_queries (Float) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json msgid "Time in Queries" -msgstr "" +msgstr "Thời gian trong truy vấn" #. Description of the 'Expiry time of QR Code Image Page' (Int) field in #. DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Time in seconds to retain QR code image on server. Min:240" -msgstr "" +msgstr "Thời gian tính bằng giây để giữ lại hình ảnh mã QR trên máy chủ. Tối thiểu:240" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.py:413 msgid "Time series based on is required to create a dashboard chart" -msgstr "" +msgstr "Cần phải có chuỗi thời gian dựa trên để tạo biểu đồ trang tổng quan" #: frappe/public/js/frappe/form/controls/time.js:124 msgid "Time {0} must be in format: {1}" -msgstr "" +msgstr "Thời gian {0} phải có định dạng: {1}" #. Option for the 'Status' (Select) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Timed Out" -msgstr "" +msgstr "Đã hết thời gian" #: frappe/public/js/frappe/ui/theme_switcher.js:64 msgid "Timeless Night" -msgstr "" +msgstr "Đêm vượt thời gian" #. Label of the timeline (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Timeline" -msgstr "" +msgstr "Dòng thời gian" #. Label of the timeline_doctype (Link) field in DocType 'Activity Log' #: frappe/core/doctype/activity_log/activity_log.json msgid "Timeline DocType" -msgstr "" +msgstr "Loại tài liệu dòng thời gian" #. Label of the timeline_field (Data) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Timeline Field" -msgstr "" +msgstr "Trường dòng thời gian" #. Label of the timeline_links_sections (Section Break) field in DocType #. 'Communication' #. Label of the timeline_links (Table) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Timeline Links" -msgstr "" +msgstr "Liên kết dòng thời gian" #. Label of the timeline_name (Dynamic Link) field in DocType 'Activity Log' #: frappe/core/doctype/activity_log/activity_log.json msgid "Timeline Name" -msgstr "" +msgstr "Tên dòng thời gian" -#: frappe/core/doctype/doctype/doctype.py:1567 +#: frappe/core/doctype/doctype/doctype.py:1570 msgid "Timeline field must be a Link or Dynamic Link" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1563 +#: frappe/core/doctype/doctype/doctype.py:1566 msgid "Timeline field must be a valid fieldname" msgstr "" #. Label of the timeout (Duration) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "Timeout" -msgstr "" +msgstr "Hết thời gian chờ" #. Label of the timeout (Int) field in DocType 'Report' #: frappe/core/doctype/report/report.json msgid "Timeout (In Seconds)" -msgstr "" +msgstr "Hết thời gian chờ (Tính bằng giây)" #. Label of the timeseries (Check) field in DocType 'Dashboard Chart Source' #: frappe/desk/doctype/dashboard_chart_source/dashboard_chart_source.json msgid "Timeseries" -msgstr "" +msgstr "Dòng thời gian" #. Label of the timespan (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/public/js/frappe/ui/filters/filter.js:28 msgid "Timespan" -msgstr "" +msgstr "Khoảng thời gian" #. Label of the timestamp (Datetime) field in DocType 'Access Log' #: frappe/core/doctype/access_log/access_log.json msgid "Timestamp" -msgstr "" +msgstr "Dấu thời gian" #: frappe/desk/doctype/system_console/system_console.js:41 msgid "Tip: Try the new dropdown console using" -msgstr "" +msgstr "Mẹo: Hãy thử bảng điều khiển thả xuống mới bằng cách sử dụng" #. Label of the title (Data) field in DocType 'DocType State' #. Label of the method (Data) field in DocType 'Error Log' @@ -27383,54 +27423,54 @@ msgstr "" #: frappe/website/doctype/website_sidebar/website_sidebar.json #: frappe/website/doctype/website_sidebar_item/website_sidebar_item.json msgid "Title" -msgstr "" +msgstr "Tiêu đề" #. Label of the title_field (Data) field in DocType 'DocType' #. Label of the title_field (Data) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Title Field" -msgstr "" +msgstr "Trường tiêu đề" #. Label of the title_prefix (Data) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Title Prefix" -msgstr "" +msgstr "Tiền tố tiêu đề" -#: frappe/core/doctype/doctype/doctype.py:1504 +#: frappe/core/doctype/doctype/doctype.py:1507 msgid "Title field must be a valid fieldname" msgstr "" #: frappe/website/doctype/web_page/web_page.js:70 msgid "Title of the page" -msgstr "" +msgstr "Tiêu đề của trang" #. Label of the recipients (Code) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json #: frappe/core/doctype/permission_log/permission_log.js:12 #: frappe/public/js/frappe/views/inbox/inbox_view.js:70 msgid "To" -msgstr "" +msgstr "Đến" #: frappe/public/js/frappe/views/communication.js:53 msgctxt "Email Recipients" msgid "To" -msgstr "" +msgstr "Đến" #. Label of the to_date (Date) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/website/report/website_analytics/website_analytics.js:14 msgid "To Date" -msgstr "" +msgstr "Đến Ngày" #. Label of the to_date_field (Select) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "To Date Field" -msgstr "" +msgstr "Trường đến ngày" #: frappe/desk/doctype/todo/todo_list.js:6 msgid "To Do" -msgstr "" +msgstr "Việc cần làm" #. Description of the 'Subject' (Data) field in DocType 'Auto Repeat' #: frappe/automation/doctype/auto_repeat/auto_repeat.json @@ -27449,7 +27489,7 @@ msgstr "" #: frappe/email/doctype/auto_email_report/auto_email_report.py:109 msgid "To allow more reports update limit in System Settings." -msgstr "" +msgstr "Để cho phép giới hạn cập nhật nhiều báo cáo hơn trong Cài đặt hệ thống." #. Label of the section_break_10 (Section Break) field in DocType #. 'Communication' @@ -27465,15 +27505,15 @@ msgstr "" #: frappe/automation/doctype/auto_repeat/auto_repeat.js:35 msgid "To configure Auto Repeat, enable \"Allow Auto Repeat\" from {0}." -msgstr "" +msgstr "Để định cấu hình Tự động lặp lại, hãy bật \"Cho phép tự động lặp lại\" từ {0}." #: frappe/www/login.html:76 msgid "To enable it follow the instructions in the following link: {0}" -msgstr "" +msgstr "Để kích hoạt nó, hãy làm theo hướng dẫn trong liên kết sau: {0}" #: frappe/core/doctype/server_script/server_script.js:40 msgid "To enable server scripts, read the {0}." -msgstr "" +msgstr "Để bật tập lệnh máy chủ, hãy đọc {0}." #: frappe/desk/doctype/onboarding_step/onboarding_step.js:18 msgid "To export this step as JSON, link it in a Onboarding document and save the document." @@ -27481,15 +27521,15 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.js:126 msgid "To generate password click {0}" -msgstr "" +msgstr "Để tạo mật khẩu hãy nhấp vào {0}" #: frappe/public/js/frappe/views/reports/query_report.js:878 msgid "To get the updated report, click on {0}." -msgstr "" +msgstr "Để nhận báo cáo cập nhật, hãy nhấp vào {0}." #: frappe/email/doctype/email_account/email_account.js:139 msgid "To know more click {0}" -msgstr "" +msgstr "Để biết thêm hãy nhấp vào {0}" #. Description of the 'Console' (Code) field in DocType 'System Console' #: frappe/desk/doctype/system_console/system_console.json @@ -27521,97 +27561,97 @@ msgstr "" #: frappe/public/js/frappe/utils/diffview.js:44 msgid "To version" -msgstr "" +msgstr "Đến phiên bản" #. Name of a DocType #. Name of a report #: frappe/automation/doctype/assignment_rule/assignment_rule.py:55 #: frappe/desk/doctype/todo/todo.json frappe/desk/report/todo/todo.json msgid "ToDo" -msgstr "" +msgstr "Việc cần làm" #: frappe/public/js/frappe/form/controls/date.js:58 #: frappe/public/js/frappe/ui/filters/filter.js:732 -#: frappe/public/js/frappe/views/calendar/calendar.js:279 +#: frappe/public/js/frappe/views/calendar/calendar.js:281 msgid "Today" -msgstr "" +msgstr "Hôm nay" -#: frappe/public/js/frappe/views/reports/report_view.js:1567 +#: frappe/public/js/frappe/views/reports/report_view.js:1573 msgid "Toggle Chart" -msgstr "" +msgstr "Chuyển đổi biểu đồ" #: frappe/public/js/frappe/views/file/file_view.js:33 msgid "Toggle Grid View" -msgstr "" +msgstr "Chuyển đổi Chế độ xem lưới" #: frappe/public/js/frappe/form/toolbar.js:472 msgid "Toggle Sidebar" -msgstr "" +msgstr "Chuyển đổi Thanh bên" #. Option for the 'Response Type' (Select) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Token" -msgstr "" +msgstr "Mã thông báo" #. Name of a DocType #: frappe/integrations/doctype/token_cache/token_cache.json msgid "Token Cache" -msgstr "" +msgstr "Bộ đệm mã thông báo" #. Label of the token_endpoint_auth_method (Select) field in DocType 'OAuth #. Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "Token Endpoint Auth Method" -msgstr "" +msgstr "Phương thức xác thực điểm cuối mã thông báo" #. Label of the token_type (Data) field in DocType 'Token Cache' #: frappe/integrations/doctype/token_cache/token_cache.json msgid "Token Type" -msgstr "" +msgstr "Loại mã thông báo" #. Label of the token_uri (Data) field in DocType 'Connected App' #: frappe/integrations/doctype/connected_app/connected_app.json msgid "Token URI" -msgstr "" +msgstr "URI mã thông báo" #: frappe/utils/oauth.py:213 msgid "Token is missing" -msgstr "" +msgstr "Mã thông báo bị thiếu" #: frappe/public/js/frappe/ui/filters/filter.js:738 msgid "Tomorrow" -msgstr "" +msgstr "Ngày mai" #: frappe/desk/doctype/bulk_update/bulk_update.py:68 #: frappe/model/workflow.py:331 msgid "Too Many Documents" -msgstr "" +msgstr "Quá Nhiều Tài Liệu" #: frappe/rate_limiter.py:101 msgid "Too Many Requests" -msgstr "" +msgstr "Quá nhiều yêu cầu" #: frappe/database/database.py:480 msgid "Too many changes to database in single action." -msgstr "" +msgstr "Quá nhiều thay đổi đối với cơ sở dữ liệu chỉ trong một hành động." #: frappe/utils/background_jobs.py:736 msgid "Too many queued background jobs ({0}). Please retry after some time." -msgstr "" +msgstr "Quá nhiều công việc nền được xếp hàng đợi ({0}). Vui lòng thử lại sau một thời gian." #: frappe/templates/includes/login/login.js:291 msgid "Too many requests. Please try again later." -msgstr "" +msgstr "Quá nhiều yêu cầu. Vui lòng thử lại sau." #: frappe/core/doctype/user/user.py:1093 msgid "Too many users signed up recently, so the registration is disabled. Please try back in an hour" -msgstr "" +msgstr "Gần đây có quá nhiều người dùng đăng ký nên việc đăng ký bị vô hiệu hóa. Vui lòng thử lại sau một giờ" #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json #: frappe/public/js/print_format_builder/PrintFormatControls.vue:153 msgid "Top" -msgstr "" +msgstr "Đứng đầu" #: frappe/core/report/prepared_report_analytics/prepared_report_analytics.js:13 msgid "Top 10" @@ -27620,12 +27660,12 @@ msgstr "" #. Name of a DocType #: frappe/website/doctype/top_bar_item/top_bar_item.json msgid "Top Bar Item" -msgstr "" +msgstr "Mục thanh trên cùng" #. Label of the top_bar_items (Table) field in DocType 'Website Settings' #: frappe/website/doctype/website_settings/website_settings.json msgid "Top Bar Items" -msgstr "" +msgstr "Các mục thanh hàng đầu" #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #. Option for the 'Page Number' (Select) field in DocType 'Print Format' @@ -27633,18 +27673,18 @@ msgstr "" #: frappe/printing/doctype/print_format/print_format.json #: frappe/public/js/print_format_builder/PrintFormatControls.vue:245 msgid "Top Center" -msgstr "" +msgstr "Trung tâm hàng đầu" #. Label of the top_errors (Table) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Top Errors" -msgstr "" +msgstr "Lỗi hàng đầu" #. Option for the 'Page Number' (Select) field in DocType 'Print Format' #: frappe/printing/doctype/print_format/print_format.json #: frappe/public/js/print_format_builder/PrintFormatControls.vue:244 msgid "Top Left" -msgstr "" +msgstr "Trên cùng bên trái" #. Option for the 'Position' (Select) field in DocType 'Form Tour Step' #. Option for the 'Page Number' (Select) field in DocType 'Print Format' @@ -27652,34 +27692,34 @@ msgstr "" #: frappe/printing/doctype/print_format/print_format.json #: frappe/public/js/print_format_builder/PrintFormatControls.vue:246 msgid "Top Right" -msgstr "" +msgstr "Trên cùng bên phải" #. Label of the topic (Link) field in DocType 'Discussion Reply' #: frappe/website/doctype/discussion_reply/discussion_reply.json msgid "Topic" -msgstr "" +msgstr "Chủ đề" #: frappe/desk/query_report.py:621 #: frappe/public/js/frappe/views/reports/print_grid.html:50 #: frappe/public/js/frappe/views/reports/query_report.js:1367 -#: frappe/public/js/frappe/views/reports/report_view.js:1548 +#: frappe/public/js/frappe/views/reports/report_view.js:1554 msgid "Total" -msgstr "" +msgstr "Tổng cộng" #. Label of the total_background_workers (Int) field in DocType 'System Health #. Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Total Background Workers" -msgstr "" +msgstr "Tổng số công nhân nền" #. Label of the total_errors (Int) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Total Errors (last 1 day)" -msgstr "" +msgstr "Tổng số lỗi (1 ngày qua)" #: frappe/public/js/frappe/ui/capture.js:260 msgid "Total Images" -msgstr "" +msgstr "Tổng số hình ảnh" #. Label of the total_outgoing_emails (Int) field in DocType 'System Health #. Report' @@ -27690,17 +27730,17 @@ msgstr "" #. Label of the total_subscribers (Int) field in DocType 'Email Group' #: frappe/email/doctype/email_group/email_group.json msgid "Total Subscribers" -msgstr "" +msgstr "Tổng số người đăng ký" #. Label of the total_users (Int) field in DocType 'System Health Report' #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Total Users" -msgstr "" +msgstr "Tổng số người dùng" #. Label of the total_working_time (Duration) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "Total Working Time" -msgstr "" +msgstr "Tổng thời gian làm việc" #. Description of the 'Initial Sync Count' (Select) field in DocType 'Email #. Account' @@ -27710,32 +27750,32 @@ msgstr "" #: frappe/public/js/print_format_builder/ConfigureColumns.vue:12 msgid "Total:" -msgstr "" +msgstr "Tổng cộng:" -#: frappe/public/js/frappe/views/reports/report_view.js:1252 +#: frappe/public/js/frappe/views/reports/report_view.js:1254 msgid "Totals" -msgstr "" +msgstr "Tổng số" -#: frappe/public/js/frappe/views/reports/report_view.js:1227 +#: frappe/public/js/frappe/views/reports/report_view.js:1229 msgid "Totals Row" -msgstr "" +msgstr "Hàng tổng" #. Label of the trace_id (Data) field in DocType 'Error Log' #: frappe/core/doctype/error_log/error_log.json msgid "Trace ID" -msgstr "" +msgstr "ID dấu vết" #. Label of the traceback (Code) field in DocType 'Patch Log' #: frappe/core/doctype/patch_log/patch_log.json msgid "Traceback" -msgstr "" +msgstr "Truy nguyên" #. Label of the track_changes (Check) field in DocType 'DocType' #. Label of the track_changes (Check) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Track Changes" -msgstr "" +msgstr "Theo dõi các thay đổi" #. Label of the track_email_status (Check) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json @@ -27745,24 +27785,24 @@ msgstr "" #. Label of the track_field (Data) field in DocType 'Milestone' #: frappe/automation/doctype/milestone/milestone.json msgid "Track Field" -msgstr "" +msgstr "Trường theo dõi" #. Label of the track_seen (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "Track Seen" -msgstr "" +msgstr "Theo dõi Đã xem" #. Label of the track_steps (Check) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Track Steps" -msgstr "" +msgstr "Theo dõi các bước" #. Label of the track_views (Check) field in DocType 'DocType' #. Label of the track_views (Check) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Track Views" -msgstr "" +msgstr "Theo dõi lượt xem" #. Description of the 'Track Email Status' (Check) field in DocType 'Email #. Account' @@ -27775,34 +27815,34 @@ msgstr "" #. Description of a DocType #: frappe/automation/doctype/milestone_tracker/milestone_tracker.json msgid "Track milestones for any document" -msgstr "" +msgstr "Theo dõi các mốc quan trọng của bất kỳ tài liệu nào" -#: frappe/public/js/frappe/utils/utils.js:2063 +#: frappe/public/js/frappe/utils/utils.js:2073 msgid "Tracking URL generated and copied to clipboard" msgstr "" #: frappe/desk/page/setup_wizard/install_fixtures.py:31 msgid "Transgender" -msgstr "" +msgstr "Chuyển giới" #: frappe/public/js/workflow_builder/components/Properties.vue:19 msgid "Transition Properties" -msgstr "" +msgstr "Thuộc tính chuyển tiếp" #. Label of the transition_rules (Section Break) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "Transition Rules" -msgstr "" +msgstr "Quy tắc chuyển đổi" #. Label of the transition_tasks (Link) field in DocType 'Workflow Transition' #: frappe/workflow/doctype/workflow_transition/workflow_transition.json msgid "Transition Tasks" -msgstr "" +msgstr "Nhiệm vụ chuyển tiếp" #. Label of the transitions (Table) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "Transitions" -msgstr "" +msgstr "Sự chuyển tiếp" #. Label of the translatable (Check) field in DocType 'DocField' #. Label of the translatable (Check) field in DocType 'Custom Field' @@ -27811,50 +27851,50 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Translatable" -msgstr "" +msgstr "Có thể dịch" #: frappe/public/js/frappe/views/reports/query_report.js:2369 msgid "Translate Data" -msgstr "" +msgstr "Dịch dữ liệu" #. Label of the translated_doctype (Check) field in DocType 'DocType' #. Label of the translated_doctype (Check) field in DocType 'Customize Form' #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "Translate Link Fields" -msgstr "" +msgstr "Dịch các trường liên kết" -#: frappe/public/js/frappe/views/reports/report_view.js:1663 +#: frappe/public/js/frappe/views/reports/report_view.js:1669 msgid "Translate values" -msgstr "" +msgstr "Dịch các giá trị" #: frappe/public/js/frappe/views/translation_manager.js:11 msgid "Translate {0}" -msgstr "" +msgstr "Dịch {0}" #. Label of the translated_text (Code) field in DocType 'Translation' #: frappe/core/doctype/translation/translation.json msgid "Translated Text" -msgstr "" +msgstr "Văn bản đã dịch" #. Name of a DocType #: frappe/core/doctype/translation/translation.json msgid "Translation" -msgstr "" +msgstr "Bản dịch" #: frappe/public/js/frappe/views/translation_manager.js:46 msgid "Translations" -msgstr "" +msgstr "Bản dịch" #. Name of a role #: frappe/core/doctype/translation/translation.json msgid "Translator" -msgstr "" +msgstr "Người phiên dịch" #. Option for the 'Email Status' (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Trash" -msgstr "" +msgstr "Thùng rác" #. Option for the 'View' (Select) field in DocType 'Form Tour' #. Option for the 'DocType View' (Select) field in DocType 'Workspace Shortcut' @@ -27862,11 +27902,11 @@ msgstr "" #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json #: frappe/public/js/frappe/ui/toolbar/search_utils.js:89 msgid "Tree" -msgstr "" +msgstr "Cây" #: frappe/public/js/frappe/list/base_list.js:211 msgid "Tree View" -msgstr "" +msgstr "Chế độ xem dạng cây" #. Description of the 'Is Tree' (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json @@ -27875,44 +27915,44 @@ msgstr "" #: frappe/public/js/frappe/views/treeview.js:20 msgid "Tree view is not available for {0}" -msgstr "" +msgstr "Chế độ xem dạng cây không khả dụng cho {0}" #. Label of the method (Data) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Trigger Method" -msgstr "" +msgstr "Phương thức kích hoạt" #: frappe/public/js/frappe/ui/keyboard.js:196 msgid "Trigger Primary Action" -msgstr "" +msgstr "Kích hoạt hành động chính" #: frappe/tests/test_translate.py:55 msgid "Trigger caching" -msgstr "" +msgstr "Bộ nhớ đệm kích hoạt" #. Description of the 'Trigger Method' (Data) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Trigger on valid methods like \"before_insert\", \"after_update\", etc (will depend on the DocType selected)" -msgstr "" +msgstr "Kích hoạt các phương thức hợp lệ như \"trước_insert\", \"after_update\", v.v. (sẽ phụ thuộc vào Loại tài liệu được chọn)" #: frappe/custom/doctype/customize_form/customize_form.js:144 msgid "Trim Table" -msgstr "" +msgstr "Cắt bảng" #: frappe/public/js/frappe/widgets/onboarding_widget.js:318 msgid "Try Again" -msgstr "" +msgstr "Thử lại" #. Label of the try_naming_series (Data) field in DocType 'Document Naming #. Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Try a Naming Series" -msgstr "" +msgstr "Hãy thử Chuỗi đặt tên" #: frappe/printing/page/print/print.js:212 #: frappe/printing/page/print/print.js:218 msgid "Try the new Print Designer" -msgstr "" +msgstr "Hãy dùng thử Trình thiết kế in mới" #: frappe/utils/password_strength.py:106 msgid "Try to avoid repeated words and characters" @@ -27920,7 +27960,7 @@ msgstr "" #: frappe/utils/password_strength.py:98 msgid "Try to use a longer keyboard pattern with more turns" -msgstr "" +msgstr "Cố gắng sử dụng mẫu bàn phím dài hơn với nhiều lượt hơn" #. Option for the 'Day' (Select) field in DocType 'Assignment Rule Day' #. Option for the 'Day' (Select) field in DocType 'Auto Repeat Day' @@ -27936,7 +27976,7 @@ msgstr "" #: frappe/desk/doctype/event/event.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Tuesday" -msgstr "" +msgstr "Thứ ba" #. Label of the two_factor_auth (Check) field in DocType 'Role' #. Label of the two_factor_authentication (Section Break) field in DocType @@ -27944,12 +27984,12 @@ msgstr "" #: frappe/core/doctype/role/role.json #: frappe/core/doctype/system_settings/system_settings.json msgid "Two Factor Authentication" -msgstr "" +msgstr "Xác thực hai yếu tố" #. Label of the two_factor_method (Select) field in DocType 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Two Factor Authentication method" -msgstr "" +msgstr "Phương thức xác thực hai yếu tố" #. Label of the communication_medium (Select) field in DocType 'Communication' #. Label of the fieldtype (Select) field in DocType 'DocField' @@ -27984,36 +28024,36 @@ msgstr "" #: frappe/website/doctype/web_template/web_template.json #: frappe/www/attribution.html:35 msgid "Type" -msgstr "" +msgstr "Loại" #: frappe/public/js/frappe/form/controls/comment.js:81 msgid "Type a reply / comment" -msgstr "" +msgstr "Nhập câu trả lời/bình luận" #: frappe/templates/includes/search_template.html:51 msgid "Type something in the search box to search" -msgstr "" +msgstr "Nhập nội dung nào đó vào hộp tìm kiếm để tìm kiếm" #: frappe/templates/discussions/comment_box.html:8 #: frappe/templates/discussions/reply_section.html:53 #: frappe/templates/discussions/topic_modal.html:11 msgid "Type title" -msgstr "" +msgstr "Nhập tiêu đề" #: frappe/templates/discussions/discussions.js:341 msgid "Type your reply here..." -msgstr "" +msgstr "Nhập câu trả lời của bạn vào đây..." #: frappe/core/doctype/data_export/exporter.py:143 msgid "Type:" -msgstr "" +msgstr "Loại:" #. Label of the ui_tour (Check) field in DocType 'Form Tour' #. Label of the ui_tour (Check) field in DocType 'Form Tour Step' #: frappe/desk/doctype/form_tour/form_tour.json #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "UI Tour" -msgstr "" +msgstr "Tham quan giao diện người dùng" #. Label of the uid (Int) field in DocType 'Communication' #. Label of the uid (Data) field in DocType 'Email Flag Queue' @@ -28022,14 +28062,14 @@ msgstr "" #: frappe/email/doctype/email_flag_queue/email_flag_queue.json #: frappe/email/doctype/unhandled_email/unhandled_email.json msgid "UID" -msgstr "" +msgstr "UID" #. Label of the uidnext (Int) field in DocType 'Email Account' #. Label of the uidnext (Data) field in DocType 'IMAP Folder' #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/imap_folder/imap_folder.json msgid "UIDNEXT" -msgstr "" +msgstr "UIDNEXT" #. Label of the uidvalidity (Data) field in DocType 'Email Account' #. Label of the uidvalidity (Data) field in DocType 'IMAP Folder' @@ -28041,7 +28081,7 @@ msgstr "" #. Option for the 'Email Sync Option' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "UNSEEN" -msgstr "" +msgstr "KHÔNG ĐƯỢC XEM" #. Description of the 'Redirect URIs' (Text) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json @@ -28068,14 +28108,14 @@ msgstr "" #: frappe/website/doctype/top_bar_item/top_bar_item.json #: frappe/website/doctype/website_slideshow_item/website_slideshow_item.json msgid "URL" -msgstr "" +msgstr "URL" #. Description of the 'Documentation Link' (Data) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "URL for documentation or help" -msgstr "" +msgstr "URL cho tài liệu hoặc trợ giúp" -#: frappe/core/doctype/file/file.py:241 +#: frappe/core/doctype/file/file.py:242 msgid "URL must start with http:// or https://" msgstr "" @@ -28094,17 +28134,17 @@ msgstr "" #. Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "URL of human-readable page with info about the protected resource's terms of service." -msgstr "" +msgstr "URL của trang con người có thể đọc được với thông tin về điều khoản dịch vụ của tài nguyên được bảo vệ." #. Description of the 'Resource Policy URI' (Data) field in DocType 'OAuth #. Settings' #: frappe/integrations/doctype/oauth_settings/oauth_settings.json msgid "URL of human-readable page with info on requirements about how the client can use the data." -msgstr "" +msgstr "URL của trang con người có thể đọc được với thông tin về các yêu cầu về cách khách hàng có thể sử dụng dữ liệu." #: frappe/website/doctype/web_page/web_page.js:84 msgid "URL of the page" -msgstr "" +msgstr "URL của trang" #. Description of the 'Policy URI' (Data) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json @@ -28119,36 +28159,36 @@ msgstr "" #. Description of the 'Logo URI' (Data) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json msgid "URL that references a logo for the client." -msgstr "" +msgstr "URL tham chiếu biểu trưng của khách hàng." #. Description of the 'URL' (Data) field in DocType 'Website Slideshow Item' #: frappe/website/doctype/website_slideshow_item/website_slideshow_item.json msgid "URL to go to on clicking the slideshow image" -msgstr "" +msgstr "URL để truy cập khi nhấp vào hình ảnh trình chiếu" #. Name of a DocType #: frappe/website/doctype/utm_campaign/utm_campaign.json msgid "UTM Campaign" -msgstr "" +msgstr "Chiến dịch UTM" #. Name of a DocType #: frappe/website/doctype/utm_medium/utm_medium.json msgid "UTM Medium" -msgstr "" +msgstr "UTM Trung bình" #. Name of a DocType #: frappe/website/doctype/utm_source/utm_source.json msgid "UTM Source" -msgstr "" +msgstr "Nguồn UTM" #. Option for the 'Naming Rule' (Select) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "UUID" -msgstr "" +msgstr "UUID" #: frappe/desk/form/document_follow.py:85 msgid "Un-following document {0}" -msgstr "" +msgstr "Hủy theo dõi tài liệu {0}" #: frappe/core/doctype/document_naming_settings/document_naming_settings.py:67 msgid "Unable to find DocType {0}" @@ -28156,57 +28196,57 @@ msgstr "" #: frappe/public/js/frappe/ui/capture.js:339 msgid "Unable to load camera." -msgstr "" +msgstr "Không thể tải máy ảnh." #: frappe/public/js/frappe/model/model.js:230 msgid "Unable to load: {0}" -msgstr "" +msgstr "Không thể tải: {0}" #: frappe/utils/csvutils.py:37 msgid "Unable to open attached file. Did you export it as CSV?" -msgstr "" +msgstr "Không thể mở tập tin đính kèm. Bạn đã xuất nó dưới dạng CSV phải không?" #: frappe/core/doctype/file/utils.py:98 frappe/core/doctype/file/utils.py:130 msgid "Unable to read file format for {0}" -msgstr "" +msgstr "Không thể đọc định dạng tệp cho {0}" -#: frappe/core/doctype/communication/email.py:204 +#: frappe/core/doctype/communication/email.py:209 msgid "Unable to send mail because of a missing email account. Please setup default Email Account from Settings > Email Account" msgstr "" -#: frappe/public/js/frappe/views/calendar/calendar.js:455 +#: frappe/public/js/frappe/views/calendar/calendar.js:457 msgid "Unable to update event" -msgstr "" +msgstr "Không thể cập nhật sự kiện" -#: frappe/core/doctype/file/file.py:496 +#: frappe/core/doctype/file/file.py:497 msgid "Unable to write file format for {0}" -msgstr "" +msgstr "Không thể ghi định dạng tệp cho {0}" #. Label of the unassign_condition (Code) field in DocType 'Assignment Rule' #: frappe/automation/doctype/assignment_rule/assignment_rule.json msgid "Unassign Condition" -msgstr "" +msgstr "Bỏ gán điều kiện" #: frappe/app.py:399 msgid "Uncaught Exception" -msgstr "" +msgstr "Ngoại lệ chưa được phát hiện" #: frappe/public/js/frappe/form/toolbar.js:113 msgid "Unchanged" -msgstr "" +msgstr "Không thay đổi" #: frappe/public/js/frappe/form/toolbar.js:554 msgid "Undo" -msgstr "" +msgstr "Hoàn tác" #: frappe/public/js/frappe/form/toolbar.js:562 msgid "Undo last action" -msgstr "" +msgstr "Hoàn tác hành động cuối cùng" #: frappe/public/js/frappe/form/templates/form_sidebar.html:153 -#: frappe/public/js/frappe/form/toolbar.js:944 +#: frappe/public/js/frappe/form/toolbar.js:945 msgid "Unfollow" -msgstr "" +msgstr "Hủy theo dõi" #. Name of a DocType #: frappe/email/doctype/unhandled_email/unhandled_email.json @@ -28225,7 +28265,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Unique" -msgstr "" +msgstr "Độc đáo" #. Description of the 'Software ID' (Data) field in DocType 'OAuth Client' #: frappe/integrations/doctype/oauth_client/oauth_client.json @@ -28236,73 +28276,73 @@ msgstr "" #: frappe/website/report/website_analytics/website_analytics.js:60 msgid "Unknown" -msgstr "" +msgstr "Không rõ" #: frappe/public/js/frappe/model/model.js:209 msgid "Unknown Column: {0}" -msgstr "" +msgstr "Cột không xác định: {0}" #: frappe/utils/data.py:1255 msgid "Unknown Rounding Method: {}" -msgstr "" +msgstr "Phương pháp làm tròn không xác định: {}" #: frappe/auth.py:322 msgid "Unknown User" -msgstr "" +msgstr "Người dùng không xác định" #: frappe/utils/csvutils.py:54 msgid "Unknown file encoding. Tried to use: {0}" -msgstr "" +msgstr "Mã hóa tập tin không xác định. Đã thử sử dụng: {0}" #: frappe/core/doctype/submission_queue/submission_queue.js:7 msgid "Unlock Reference Document" -msgstr "" +msgstr "Mở khóa tài liệu tham khảo" #: frappe/public/js/frappe/form/footer/form_timeline.js:633 #: frappe/website/doctype/web_form/web_form.js:86 msgid "Unpublish" -msgstr "" +msgstr "Hủy xuất bản" #. Option for the 'Action' (Select) field in DocType 'Email Flag Queue' #: frappe/email/doctype/email_flag_queue/email_flag_queue.json msgid "Unread" -msgstr "" +msgstr "Chưa đọc" #. Label of the unread_notification_sent (Check) field in DocType #. 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Unread Notification Sent" -msgstr "" +msgstr "Đã gửi thông báo chưa đọc" -#: frappe/utils/safe_exec.py:498 +#: frappe/utils/safe_exec.py:495 msgid "Unsafe SQL query" -msgstr "" +msgstr "Truy vấn SQL không an toàn" #: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:9 #: frappe/public/js/frappe/data_import/data_exporter.js:160 -#: frappe/public/js/frappe/form/controls/multicheck.js:167 -#: frappe/public/js/frappe/views/reports/report_view.js:1606 +#: frappe/public/js/frappe/form/controls/multicheck.js:171 +#: frappe/public/js/frappe/views/reports/report_view.js:1612 msgid "Unselect All" -msgstr "" +msgstr "Bỏ chọn tất cả" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #: frappe/core/doctype/comment/comment.json msgid "Unshared" -msgstr "" +msgstr "Không chia sẻ" #: frappe/email/queue.py:67 msgid "Unsubscribe" -msgstr "" +msgstr "Hủy đăng ký" #. Label of the unsubscribe_method (Data) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json msgid "Unsubscribe Method" -msgstr "" +msgstr "Phương thức hủy đăng ký" #. Label of the unsubscribe_params (Code) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json msgid "Unsubscribe Params" -msgstr "" +msgstr "Hủy đăng ký Thông số" #. Label of the unsubscribed (Check) field in DocType 'Contact' #. Label of the unsubscribed (Check) field in DocType 'User' @@ -28312,35 +28352,35 @@ msgstr "" #: frappe/email/doctype/email_group_member/email_group_member.json #: frappe/email/queue.py:123 msgid "Unsubscribed" -msgstr "" +msgstr "Hủy đăng ký" -#: frappe/database/query.py:1098 +#: frappe/database/query.py:1113 msgid "Unsupported function or operator: {0}" -msgstr "" +msgstr "Hàm hoặc toán tử không được hỗ trợ: {0}" -#: frappe/database/query.py:2063 +#: frappe/database/query.py:2142 msgid "Unsupported {0}: {1}" -msgstr "" +msgstr "Không được hỗ trợ {0}: {1}" #: frappe/public/js/frappe/data_import/import_preview.js:72 msgid "Untitled Column" -msgstr "" +msgstr "Cột Không Có Tiêu Đề" #: frappe/core/doctype/file/file.js:38 msgid "Unzip" -msgstr "" +msgstr "Giải nén" #: frappe/public/js/frappe/views/file/file_view.js:132 msgid "Unzipped {0} files" -msgstr "" +msgstr "Đã giải nén {0} tệp" #: frappe/public/js/frappe/views/file/file_view.js:125 msgid "Unzipping files..." -msgstr "" +msgstr "Giải nén tập tin..." #: frappe/desk/doctype/event/event.py:323 msgid "Upcoming Events for Today" -msgstr "" +msgstr "Sự kiện sắp tới cho ngày hôm nay" #. Label of the update (Button) field in DocType 'Document Naming Settings' #: frappe/core/doctype/data_import/data_import_list.js:36 @@ -28354,70 +28394,70 @@ msgstr "" #: frappe/printing/page/print_format_builder/print_format_builder.js:799 #: frappe/public/js/frappe/form/grid_row.js:429 msgid "Update" -msgstr "" +msgstr "Cập nhật" #. Label of the update_amendment_naming (Button) field in DocType 'Document #. Naming Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Update Amendment Naming" -msgstr "" +msgstr "Cập nhật sửa đổi Đặt tên" #. Option for the 'Import Type' (Select) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Update Existing Records" -msgstr "" +msgstr "Cập nhật hồ sơ hiện có" #. Label of the update_field (Select) field in DocType 'Workflow Document #. State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Update Field" -msgstr "" +msgstr "Trường cập nhật" #: frappe/core/doctype/installed_applications/installed_applications.js:6 #: frappe/core/doctype/installed_applications/installed_applications.js:13 msgid "Update Hooks Resolution Order" -msgstr "" +msgstr "Cập nhật thứ tự giải quyết móc" #: frappe/core/doctype/installed_applications/installed_applications.js:45 msgid "Update Order" -msgstr "" +msgstr "Cập nhật đơn hàng" -#: frappe/desk/page/setup_wizard/setup_wizard.js:494 +#: frappe/desk/page/setup_wizard/setup_wizard.js:488 msgid "Update Password" -msgstr "" +msgstr "Cập nhật mật khẩu" #. Title of the edit-profile Web Form #: frappe/core/web_form/edit_profile/edit_profile.json msgid "Update Profile" -msgstr "" +msgstr "Cập nhật hồ sơ" #. Label of the update_series (Section Break) field in DocType 'Document Naming #. Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Update Series Counter" -msgstr "" +msgstr "Cập nhật bộ đếm loạt" #. Label of the update_series_start (Button) field in DocType 'Document Naming #. Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "Update Series Number" -msgstr "" +msgstr "Cập nhật số sê-ri" #. Option for the 'Action' (Select) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Update Settings" -msgstr "" +msgstr "Cập nhật cài đặt" #: frappe/public/js/frappe/views/translation_manager.js:13 msgid "Update Translations" -msgstr "" +msgstr "Cập nhật bản dịch" #. Label of the update_value (Small Text) field in DocType 'Bulk Update' #. Label of the update_value (Data) field in DocType 'Workflow Document State' #: frappe/desk/doctype/bulk_update/bulk_update.json #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Update Value" -msgstr "" +msgstr "Cập nhật giá trị" #: frappe/utils/change_log.py:381 msgid "Update from Frappe Cloud" @@ -28425,7 +28465,7 @@ msgstr "" #: frappe/public/js/frappe/list/bulk_operations.js:387 msgid "Update {0} records" -msgstr "" +msgstr "Cập nhật bản ghi {0}" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #. Option for the 'Status' (Select) field in DocType 'Permission Log' @@ -28433,28 +28473,28 @@ msgstr "" #: frappe/core/doctype/permission_log/permission_log.json #: frappe/public/js/frappe/web_form/web_form.js:447 msgid "Updated" -msgstr "" +msgstr "Đã cập nhật" #: frappe/desk/doctype/bulk_update/bulk_update.js:32 msgid "Updated Successfully" -msgstr "" +msgstr "Cập nhật thành công" #: frappe/public/js/frappe/desk.js:446 msgid "Updated To A New Version 🎉" -msgstr "" +msgstr "Đã cập nhật lên phiên bản mới 🎉" #: frappe/public/js/frappe/list/bulk_operations.js:384 msgid "Updated successfully" -msgstr "" +msgstr "Đã cập nhật thành công" #: frappe/utils/response.py:342 msgid "Updating" -msgstr "" +msgstr "Đang cập nhật" #: frappe/public/js/frappe/form/save.js:11 msgctxt "Freeze message while updating a document" msgid "Updating" -msgstr "" +msgstr "Đang cập nhật" #: frappe/email/doctype/email_queue/email_queue_list.js:49 msgid "Updating Email Queue Statuses. The emails will be picked up in the next scheduled run." @@ -28462,50 +28502,50 @@ msgstr "" #: frappe/core/doctype/document_naming_rule/document_naming_rule.js:17 msgid "Updating counter may lead to document name conflicts if not done properly" -msgstr "" +msgstr "Việc cập nhật bộ đếm có thể dẫn đến xung đột tên tài liệu nếu không được thực hiện đúng cách" #: frappe/desk/page/setup_wizard/setup_wizard.py:23 msgid "Updating global settings" -msgstr "" +msgstr "Cập nhật cài đặt chung" #: frappe/core/doctype/document_naming_settings/document_naming_settings.js:59 msgid "Updating naming series options" -msgstr "" +msgstr "Cập nhật tùy chọn chuỗi đặt tên" #: frappe/public/js/frappe/form/toolbar.js:146 msgid "Updating related fields..." -msgstr "" +msgstr "Đang cập nhật các lĩnh vực liên quan..." #: frappe/desk/doctype/bulk_update/bulk_update.py:117 msgid "Updating {0}" -msgstr "" +msgstr "Đang cập nhật {0}" #: frappe/core/doctype/data_import/data_import.js:36 msgid "Updating {0} of {1}, {2}" -msgstr "" +msgstr "Đang cập nhật {0} của {1}, {2}" #: frappe/public/js/billing.bundle.js:141 msgid "Upgrade plan" -msgstr "" +msgstr "Kế hoạch nâng cấp" #: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:152 #: frappe/public/js/frappe/file_uploader/file_uploader.bundle.js:153 #: frappe/public/js/frappe/form/grid.js:66 #: frappe/public/js/frappe/form/templates/form_sidebar.html:13 msgid "Upload" -msgstr "" +msgstr "Tải lên" #: frappe/public/js/print_format_builder/LetterHeadEditor.vue:93 msgid "Upload Image" -msgstr "" +msgstr "Tải hình ảnh lên" #: frappe/public/js/frappe/file_uploader/FileUploader.vue:215 msgid "Upload file" -msgstr "" +msgstr "Tải tập tin lên" #: frappe/public/js/frappe/file_uploader/FileUploader.vue:218 msgid "Upload {0} files" -msgstr "" +msgstr "Tải lên tệp {0}" #. Label of the uploaded_to_dropbox (Check) field in DocType 'File' #: frappe/core/doctype/file/file.json @@ -28522,47 +28562,47 @@ msgstr "" #: frappe/desk/doctype/onboarding_step/onboarding_step.json #, python-format msgid "Use % for any non empty value." -msgstr "" +msgstr "Sử dụng % cho mọi giá trị không trống." #. Label of the ascii_encode_password (Check) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Use ASCII encoding for password" -msgstr "" +msgstr "Sử dụng mã hóa ASCII cho mật khẩu" #. Label of the use_first_day_of_period (Check) field in DocType 'Auto Email #. Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Use First Day of Period" -msgstr "" +msgstr "Sử dụng ngày đầu tiên của kỳ kinh" #. Label of the use_html (Check) field in DocType 'Email Template' #: frappe/email/doctype/email_template/email_template.json #: frappe/public/js/frappe/views/communication.js:116 msgid "Use HTML" -msgstr "" +msgstr "Sử dụng HTML" #. Label of the use_imap (Check) field in DocType 'Email Account' #. Label of the use_imap (Check) field in DocType 'Email Domain' #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "Use IMAP" -msgstr "" +msgstr "Sử dụng IMAP" #. Label of the use_number_format_from_currency (Check) field in DocType #. 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "Use Number Format from Currency" -msgstr "" +msgstr "Sử dụng định dạng số từ tiền tệ" #. Label of the use_post (Check) field in DocType 'SMS Settings' #: frappe/core/doctype/sms_settings/sms_settings.json msgid "Use POST" -msgstr "" +msgstr "Sử dụng ĐĂNG" #. Label of the use_report_chart (Check) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Use Report Chart" -msgstr "" +msgstr "Sử dụng biểu đồ báo cáo" #. Label of the use_ssl (Check) field in DocType 'Email Account' #. Label of the use_ssl_for_outgoing (Check) field in DocType 'Email Account' @@ -28571,29 +28611,29 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "Use SSL" -msgstr "" +msgstr "Sử dụng SSL" #. Label of the use_starttls (Check) field in DocType 'Email Account' #. Label of the use_starttls (Check) field in DocType 'Email Domain' #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "Use STARTTLS" -msgstr "" +msgstr "Sử dụng STARTTLS" #. Label of the use_tls (Check) field in DocType 'Email Account' #. Label of the use_tls (Check) field in DocType 'Email Domain' #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "Use TLS" -msgstr "" +msgstr "Sử dụng TLS" #: frappe/utils/password_strength.py:191 msgid "Use a few uncommon words together." -msgstr "" +msgstr "Sử dụng một vài từ không phổ biến cùng nhau." #: frappe/utils/password_strength.py:44 msgid "Use a few words, avoid common phrases." -msgstr "" +msgstr "Sử dụng ít từ, tránh những cụm từ thông dụng." #. Label of the login_id_is_different (Check) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json @@ -28603,20 +28643,20 @@ msgstr "" #. Description of the 'Detect CSV type' (Check) field in DocType 'Data Import' #: frappe/core/doctype/data_import/data_import.json msgid "Use if the default settings don't seem to detect your data correctly" -msgstr "" +msgstr "Sử dụng nếu cài đặt mặc định dường như không phát hiện chính xác dữ liệu của bạn" -#: frappe/model/db_query.py:509 +#: frappe/model/db_query.py:511 msgid "Use of sub-query or function is restricted" -msgstr "" +msgstr "Việc sử dụng truy vấn phụ hoặc chức năng bị hạn chế" #: frappe/printing/page/print/print.js:319 msgid "Use the new Print Format Builder" -msgstr "" +msgstr "Sử dụng Trình tạo định dạng in mới" #. Description of the 'Title Field' (Data) field in DocType 'Customize Form' #: frappe/custom/doctype/customize_form/customize_form.json msgid "Use this fieldname to generate title" -msgstr "" +msgstr "Sử dụng tên trường này để tạo tiêu đề" #. Description of the 'Always BCC Address' (Data) field in DocType 'Email #. Account' @@ -28690,66 +28730,66 @@ msgstr "" #: frappe/website/doctype/personal_data_download_request/personal_data_download_request.json #: frappe/workflow/doctype/workflow_action/workflow_action.json msgid "User" -msgstr "" +msgstr "Người dùng" #: frappe/core/doctype/has_role/has_role.py:25 msgid "User '{0}' already has the role '{1}'" -msgstr "" +msgstr "Người dùng '{0}' đã có vai trò '{1}'" #. Name of a DocType #: frappe/core/doctype/report/user_activity_report.json msgid "User Activity Report" -msgstr "" +msgstr "Báo cáo hoạt động của người dùng" #. Name of a DocType #: frappe/core/doctype/report/user_activity_report_without_sort.json msgid "User Activity Report Without Sort" -msgstr "" +msgstr "Báo cáo hoạt động của người dùng không cần sắp xếp" #. Label of the user_agent (Small Text) field in DocType 'User Session Display' #. Label of the user_agent (Data) field in DocType 'Web Page View' #: frappe/core/doctype/user_session_display/user_session_display.json #: frappe/website/doctype/web_page_view/web_page_view.json msgid "User Agent" -msgstr "" +msgstr "Tác nhân người dùng" #. Label of the in_create (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "User Cannot Create" -msgstr "" +msgstr "Người dùng không thể tạo" #. Label of the read_only (Check) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json msgid "User Cannot Search" -msgstr "" +msgstr "Người dùng không thể tìm kiếm" #: frappe/public/js/frappe/desk.js:550 msgid "User Changed" -msgstr "" +msgstr "Người dùng đã thay đổi" #. Label of the defaults (Table) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "User Defaults" -msgstr "" +msgstr "Mặc định của người dùng" #. Label of the user_details_tab (Tab Break) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "User Details" -msgstr "" +msgstr "Chi tiết người dùng" #. Name of a report #: frappe/core/report/user_doctype_permissions/user_doctype_permissions.json msgid "User Doctype Permissions" -msgstr "" +msgstr "Quyền của người dùng đối với loại tài liệu" #. Name of a DocType #: frappe/core/doctype/user_document_type/user_document_type.json msgid "User Document Type" -msgstr "" +msgstr "Loại tài liệu người dùng" #: frappe/core/doctype/user_type/user_type.py:98 msgid "User Document Types Limit Exceeded" -msgstr "" +msgstr "Đã vượt quá giới hạn loại tài liệu người dùng" #. Name of a DocType #: frappe/core/doctype/user_email/user_email.json @@ -28764,28 +28804,28 @@ msgstr "" #. Name of a DocType #: frappe/core/doctype/user_group/user_group.json msgid "User Group" -msgstr "" +msgstr "Nhóm người dùng" #. Name of a DocType #: frappe/core/doctype/user_group_member/user_group_member.json msgid "User Group Member" -msgstr "" +msgstr "Thành viên nhóm người dùng" #. Label of the user_group_members (Table MultiSelect) field in DocType 'User #. Group' #: frappe/core/doctype/user_group/user_group.json msgid "User Group Members" -msgstr "" +msgstr "Thành viên nhóm người dùng" #. Label of the userid (Data) field in DocType 'User Social Login' #: frappe/core/doctype/user_social_login/user_social_login.json msgid "User ID" -msgstr "" +msgstr "ID người dùng" #. Label of the user_id_property (Data) field in DocType 'Social Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "User ID Property" -msgstr "" +msgstr "Thuộc tính ID người dùng" #. Label of the user (Link) field in DocType 'Contact' #: frappe/contacts/doctype/contact/contact.json @@ -28804,14 +28844,14 @@ msgstr "" #. Label of the user_image (Attach Image) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "User Image" -msgstr "" +msgstr "Hình ảnh người dùng" #. Name of a DocType #: frappe/core/doctype/user_invitation/user_invitation.json msgid "User Invitation" -msgstr "" +msgstr "Lời mời của người dùng" -#: frappe/public/js/frappe/ui/sidebar/sidebar.html:51 +#: frappe/public/js/frappe/ui/sidebar/sidebar.html:52 msgid "User Menu" msgstr "" @@ -28819,71 +28859,71 @@ msgstr "" #. Request' #: frappe/website/doctype/personal_data_download_request/personal_data_download_request.json msgid "User Name" -msgstr "" +msgstr "Tên người dùng" #. Name of a DocType #: frappe/core/doctype/user_permission/user_permission.json msgid "User Permission" -msgstr "" +msgstr "Quyền của người dùng" #. Label of a Link in the Users Workspace #: frappe/core/page/permission_manager/permission_manager_help.html:97 #: frappe/core/workspace/users/users.json #: frappe/public/js/frappe/views/reports/query_report.js:2055 -#: frappe/public/js/frappe/views/reports/report_view.js:1766 +#: frappe/public/js/frappe/views/reports/report_view.js:1772 msgid "User Permissions" -msgstr "" +msgstr "Quyền của người dùng" -#: frappe/public/js/frappe/list/list_view.js:1935 +#: frappe/public/js/frappe/list/list_view.js:1946 msgctxt "Button in list view menu" msgid "User Permissions" -msgstr "" +msgstr "Quyền hạn người dùng" #: frappe/core/page/permission_manager/permission_manager_help.html:99 msgid "User Permissions are used to limit users to specific records." -msgstr "" +msgstr "Quyền của người dùng được sử dụng để giới hạn người dùng trong các bản ghi cụ thể." #: frappe/core/doctype/user_permission/user_permission_list.js:124 msgid "User Permissions created successfully" -msgstr "" +msgstr "Quyền người dùng được tạo thành công" #. Name of a DocType #. Label of the erpnext_role (Link) field in DocType 'LDAP Group Mapping' #: frappe/core/doctype/user_role/user_role.json #: frappe/integrations/doctype/ldap_group_mapping/ldap_group_mapping.json msgid "User Role" -msgstr "" +msgstr "Vai trò của người dùng" #. Name of a DocType #: frappe/core/doctype/user_role_profile/user_role_profile.json msgid "User Role Profile" -msgstr "" +msgstr "Hồ sơ vai trò người dùng" #. Name of a DocType #: frappe/core/doctype/user_select_document_type/user_select_document_type.json msgid "User Select Document Type" -msgstr "" +msgstr "Người dùng Chọn loại tài liệu" #. Name of a DocType #: frappe/core/doctype/user_session_display/user_session_display.json msgid "User Session Display" -msgstr "" +msgstr "Hiển thị phiên người dùng" #. Label of a standard navbar item #. Type: Action #: frappe/hooks.py msgid "User Settings" -msgstr "" +msgstr "Cài đặt người dùng" #. Name of a DocType #: frappe/core/doctype/user_social_login/user_social_login.json msgid "User Social Login" -msgstr "" +msgstr "Đăng nhập mạng xã hội của người dùng" #. Label of the _user_tags (Data) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "User Tags" -msgstr "" +msgstr "Thẻ người dùng" #. Label of the user_type (Link) field in DocType 'User' #. Name of a DocType @@ -28891,14 +28931,14 @@ msgstr "" #: frappe/core/doctype/user_type/user_type.json #: frappe/core/doctype/user_type/user_type.py:83 msgid "User Type" -msgstr "" +msgstr "Loại người dùng" #. Label of the user_type_modules (Table) field in DocType 'User Type' #. Name of a DocType #: frappe/core/doctype/user_type/user_type.json #: frappe/core/doctype/user_type_module/user_type_module.json msgid "User Type Module" -msgstr "" +msgstr "Mô-đun loại người dùng" #. Description of the 'Allow Login using Mobile Number' (Check) field in #. DocType 'System Settings' @@ -28914,11 +28954,11 @@ msgstr "" #: frappe/templates/includes/login/login.js:290 msgid "User does not exist." -msgstr "" +msgstr "Người dùng không tồn tại." #: frappe/core/doctype/user_type/user_type.py:83 msgid "User does not have permission to create the new {0}" -msgstr "" +msgstr "Người dùng không có quyền tạo {0}" #: frappe/core/doctype/user_invitation/user_invitation.py:102 msgid "User is disabled" @@ -28932,11 +28972,11 @@ msgstr "" #. Naming Settings' #: frappe/core/doctype/document_naming_settings/document_naming_settings.json msgid "User must always select" -msgstr "" +msgstr "Người dùng phải luôn chọn" #: frappe/core/doctype/user_permission/user_permission.py:60 msgid "User permission already exists" -msgstr "" +msgstr "Quyền của người dùng đã tồn tại" #: frappe/www/login.py:171 msgid "User with email address {0} does not exist" @@ -28948,32 +28988,36 @@ msgstr "" #: frappe/core/doctype/user/user.py:579 msgid "User {0} cannot be deleted" -msgstr "" +msgstr "Không thể xóa người dùng {0}" #: frappe/core/doctype/user/user.py:369 msgid "User {0} cannot be disabled" -msgstr "" +msgstr "Người dùng {0} không thể bị vô hiệu hóa" #: frappe/core/doctype/user/user.py:652 msgid "User {0} cannot be renamed" -msgstr "" +msgstr "Người dùng {0} không thể đổi tên" #: frappe/permissions.py:146 msgid "User {0} does not have access to this document" -msgstr "" +msgstr "Người dùng {0} không có quyền truy cập vào tài liệu này" #: frappe/permissions.py:171 msgid "User {0} does not have doctype access via role permission for document {1}" -msgstr "" +msgstr "Người dùng {0} không có quyền truy cập loại tài liệu thông qua quyền vai trò đối với tài liệu {1}" -#: frappe/desk/doctype/workspace/workspace.py:285 +#: frappe/desk/doctype/workspace/workspace.py:292 msgid "User {0} does not have the permission to create a Workspace." -msgstr "" +msgstr "Người dùng {0} không có quyền tạo Không gian làm việc." #: frappe/templates/emails/data_deletion_approval.html:1 #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.py:112 msgid "User {0} has requested for data deletion" -msgstr "" +msgstr "Người dùng {0} đã yêu cầu xóa dữ liệu" + +#: frappe/core/doctype/user/user.py:1468 +msgid "User {0} has started an impersonation session as you.

Reason provided: {1}" +msgstr "Người dùng {0} đã bắt đầu một phiên mạo danh bạn.

Lý do: {1}" #: frappe/core/doctype/user/user.py:1452 msgid "User {0} impersonated as {1}" @@ -28981,20 +29025,20 @@ msgstr "" #: frappe/utils/oauth.py:300 msgid "User {0} is disabled" -msgstr "" +msgstr "Người dùng {0} bị vô hiệu hóa" #: frappe/sessions.py:243 msgid "User {0} is disabled. Please contact your System Manager." -msgstr "" +msgstr "Người dùng {0} bị vô hiệu hóa. Vui lòng liên hệ với Người quản lý hệ thống của bạn." #: frappe/desk/form/assign_to.py:104 msgid "User {0} is not permitted to access this document." -msgstr "" +msgstr "Người dùng {0} không được phép truy cập tài liệu này." #. Label of the userinfo_uri (Data) field in DocType 'Connected App' #: frappe/integrations/doctype/connected_app/connected_app.json msgid "Userinfo URI" -msgstr "" +msgstr "URI thông tin người dùng" #. Label of the username (Data) field in DocType 'User' #. Label of the username (Data) field in DocType 'User Social Login' @@ -29002,11 +29046,11 @@ msgstr "" #: frappe/core/doctype/user_social_login/user_social_login.json #: frappe/www/login.py:110 msgid "Username" -msgstr "" +msgstr "Tên người dùng" #: frappe/core/doctype/user/user.py:741 msgid "Username {0} already exists" -msgstr "" +msgstr "Tên người dùng {0} đã tồn tại" #. Label of the users (Table MultiSelect) field in DocType 'Assignment Rule' #. Name of a Workspace @@ -29018,7 +29062,7 @@ msgstr "" #: frappe/core/workspace/users/users.json #: frappe/desk/doctype/system_health_report/system_health_report.json msgid "Users" -msgstr "" +msgstr "Người dùng" #. Description of the 'Protect Attached Files' (Check) field in DocType #. 'DocType' @@ -29041,18 +29085,18 @@ msgstr "" #. Workers' #: frappe/desk/doctype/system_health_report_workers/system_health_report_workers.json msgid "Utilization" -msgstr "" +msgstr "Sự tận dụng" #. Label of the utilization_percent (Percent) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "Utilization %" -msgstr "" +msgstr "Sử dụng %" #. Option for the 'Validity' (Select) field in DocType 'OAuth Authorization #. Code' #: frappe/integrations/doctype/oauth_authorization_code/oauth_authorization_code.json msgid "Valid" -msgstr "" +msgstr "Hợp lệ" #: frappe/templates/includes/login/login.js:52 #: frappe/templates/includes/login/login.js:65 @@ -29066,7 +29110,7 @@ msgstr "" #. Label of the validate_action (Check) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Validate Field" -msgstr "" +msgstr "Xác thực trường" #. Label of the validate_frappe_mail_settings (Button) field in DocType 'Email #. Account' @@ -29083,16 +29127,16 @@ msgstr "" #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "Validate SSL Certificate" -msgstr "" +msgstr "Xác thực chứng chỉ SSL" #: frappe/public/js/frappe/web_form/web_form.js:380 msgid "Validation Error" -msgstr "" +msgstr "Lỗi xác thực" #. Label of the validity (Select) field in DocType 'OAuth Authorization Code' #: frappe/integrations/doctype/oauth_authorization_code/oauth_authorization_code.json msgid "Validity" -msgstr "" +msgstr "Hiệu lực" #. Label of the value (Data) field in DocType 'Milestone' #. Label of the defvalue (Text) field in DocType 'DefaultValue' @@ -29119,43 +29163,43 @@ msgstr "" #: frappe/website/doctype/web_form/web_form.js:213 #: frappe/website/doctype/website_meta_tag/website_meta_tag.json msgid "Value" -msgstr "" +msgstr "Giá trị" #. Label of the value_based_on (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Value Based On" -msgstr "" +msgstr "Giá trị dựa trên" #. Option for the 'Send Alert On' (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Value Change" -msgstr "" +msgstr "Thay đổi giá trị" #. Label of the value_changed (Select) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Value Changed" -msgstr "" +msgstr "Giá trị đã thay đổi" #. Label of the property_value (Data) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "Value To Be Set" -msgstr "" +msgstr "Giá trị được đặt" -#: frappe/model/base_document.py:817 +#: frappe/model/base_document.py:830 msgid "Value Too Long" -msgstr "" +msgstr "Giá trị quá dài" -#: frappe/model/base_document.py:1173 frappe/model/document.py:877 +#: frappe/model/base_document.py:1186 frappe/model/document.py:877 msgid "Value cannot be changed for {0}" -msgstr "" +msgstr "Giá trị không thể thay đổi cho {0}" #: frappe/model/document.py:823 msgid "Value cannot be negative for" -msgstr "" +msgstr "Giá trị không được âm đối với" #: frappe/model/document.py:827 msgid "Value cannot be negative for {0}: {1}" -msgstr "" +msgstr "Giá trị không được âm đối với {0}: {1}" #: frappe/custom/doctype/property_setter/property_setter.js:7 msgid "Value for a check field can be either 0 or 1" @@ -29163,9 +29207,9 @@ msgstr "" #: frappe/custom/doctype/customize_form/customize_form.py:616 msgid "Value for field {0} is too long in {1}. Length should be lesser than {2} characters" -msgstr "" +msgstr "Giá trị của trường {0} quá dài trong {1}. Độ dài phải nhỏ hơn {2} ký tự" -#: frappe/model/base_document.py:528 +#: frappe/model/base_document.py:541 msgid "Value for {0} cannot be a list" msgstr "" @@ -29188,21 +29232,21 @@ msgstr "" #. Label of the value_to_validate (Data) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "Value to Validate" -msgstr "" +msgstr "Giá trị cần xác thực" #. Description of the 'Update Value' (Data) field in DocType 'Workflow Document #. State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Value to set when this workflow state is applied. Use plain text (e.g. Approved) or an expression if “Evaluate as Expression” is enabled." -msgstr "" +msgstr "Giá trị cần đặt khi trạng thái dòng công việc này được áp dụng. Sử dụng văn bản thuần túy (ví dụ: Đã phê duyệt) hoặc biểu thức nếu \"Đánh giá dưới dạng biểu thức\" được bật." -#: frappe/model/base_document.py:1243 +#: frappe/model/base_document.py:1256 msgid "Value too big" -msgstr "" +msgstr "Giá trị quá lớn" #: frappe/core/doctype/data_import/importer.py:726 msgid "Value {0} missing for {1}" -msgstr "" +msgstr "Thiếu giá trị {0} cho {1}" #: frappe/core/doctype/data_import/importer.py:772 frappe/utils/data.py:868 msgid "Value {0} must be in the valid duration format: d h m s" @@ -29211,11 +29255,11 @@ msgstr "" #: frappe/core/doctype/data_import/importer.py:744 #: frappe/core/doctype/data_import/importer.py:759 msgid "Value {0} must in {1} format" -msgstr "" +msgstr "Giá trị {0} phải ở định dạng {1}" #: frappe/core/doctype/version/version_view.html:59 msgid "Values Changed" -msgstr "" +msgstr "Giá trị đã thay đổi" #. Option for the 'Font' (Select) field in DocType 'Print Settings' #: frappe/printing/doctype/print_settings/print_settings.json @@ -29224,15 +29268,15 @@ msgstr "" #: frappe/templates/includes/login/login.js:332 msgid "Verification" -msgstr "" +msgstr "Xác minh" #: frappe/templates/includes/login/login.js:335 frappe/twofactor.py:366 msgid "Verification Code" -msgstr "" +msgstr "Mã xác minh" #: frappe/templates/emails/delete_data_confirmation.html:10 msgid "Verification Link" -msgstr "" +msgstr "Liên kết xác minh" #: frappe/templates/includes/login/login.js:382 msgid "Verification code email not sent. Please contact Administrator." @@ -29245,29 +29289,29 @@ msgstr "" #. Option for the 'Contribution Status' (Select) field in DocType 'Translation' #: frappe/core/doctype/translation/translation.json msgid "Verified" -msgstr "" +msgstr "Đã xác minh" #: frappe/public/js/frappe/ui/messages.js:359 #: frappe/templates/includes/login/login.js:336 msgid "Verify" -msgstr "" +msgstr "Xác minh" #: frappe/public/js/frappe/ui/messages.js:358 msgid "Verify Password" -msgstr "" +msgstr "Xác minh mật khẩu" #: frappe/templates/includes/login/login.js:171 msgid "Verifying..." -msgstr "" +msgstr "Đang xác minh..." #. Name of a DocType #: frappe/core/doctype/version/version.json msgid "Version" -msgstr "" +msgstr "Phiên bản" #: frappe/public/js/frappe/desk.js:166 msgid "Version Updated" -msgstr "" +msgstr "Phiên bản được cập nhật" #. Label of the video_url (Data) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json @@ -29277,53 +29321,53 @@ msgstr "" #. Label of the view_name (Select) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "View" -msgstr "" +msgstr "Xem" #: frappe/core/doctype/success_action/success_action.js:60 #: frappe/public/js/frappe/form/success_action.js:89 msgid "View All" -msgstr "" +msgstr "Xem tất cả" #: frappe/public/js/frappe/form/toolbar.js:616 msgid "View Audit Trail" -msgstr "" +msgstr "Xem Đường mòn Kiểm tra" -#: frappe/core/doctype/user/user.js:149 +#: frappe/core/doctype/user/user.js:152 msgid "View Doctype Permissions" -msgstr "" +msgstr "Xem quyền của loại tài liệu" #: frappe/core/doctype/file/file.js:4 msgid "View File" -msgstr "" +msgstr "Xem tập tin" #: frappe/public/js/frappe/ui/notifications/notifications.js:260 msgid "View Full Log" -msgstr "" +msgstr "Xem toàn bộ nhật ký" #: frappe/public/js/frappe/views/treeview.js:494 #: frappe/public/js/frappe/widgets/quick_list_widget.js:258 msgid "View List" -msgstr "" +msgstr "Xem danh sách" #. Name of a DocType #: frappe/core/doctype/view_log/view_log.json msgid "View Log" -msgstr "" +msgstr "Xem nhật ký" -#: frappe/core/doctype/user/user.js:140 +#: frappe/core/doctype/user/user.js:143 #: frappe/core/doctype/user_permission/user_permission.js:26 msgid "View Permitted Documents" -msgstr "" +msgstr "Xem các tài liệu được phép" #. Label of the view_properties (Button) field in DocType 'Notification' #: frappe/email/doctype/notification/notification.json msgid "View Properties (via Customize Form)" -msgstr "" +msgstr "Xem Thuộc tính (thông qua Biểu mẫu Tùy chỉnh)" #. Option for the 'Action' (Select) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json msgid "View Report" -msgstr "" +msgstr "Xem báo cáo" #. Label of the view_settings (Section Break) field in DocType 'DocType' #. Label of the view_settings_section (Section Break) field in DocType @@ -29331,16 +29375,16 @@ msgstr "" #: frappe/core/doctype/doctype/doctype.json #: frappe/custom/doctype/customize_form/customize_form.json msgid "View Settings" -msgstr "" +msgstr "Xem cài đặt" #: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.js:11 msgid "View Sidebar" -msgstr "" +msgstr "Xem thanh bên" #. Label of the view_switcher (Check) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "View Switcher" -msgstr "" +msgstr "Xem bộ chuyển đổi" #: frappe/website/doctype/website_settings/website_settings.js:16 msgid "View Website" @@ -29348,47 +29392,47 @@ msgstr "" #: frappe/core/page/permission_manager/permission_manager.js:397 msgid "View all {0} users" -msgstr "" +msgstr "Xem tất cả người dùng {0}" #: frappe/www/confirm_workflow_action.html:12 msgid "View document" -msgstr "" +msgstr "Xem tài liệu" #: frappe/templates/emails/auto_email_report.html:60 msgid "View report in your browser" -msgstr "" +msgstr "Xem báo cáo trong trình duyệt của bạn" #: frappe/templates/emails/print_link.html:2 msgid "View this in your browser" -msgstr "" +msgstr "Xem cái này trong trình duyệt của bạn" #: frappe/public/js/frappe/web_form/web_form.js:474 msgctxt "Button in web form" msgid "View your response" -msgstr "" +msgstr "Xem phản hồi của bạn" #: frappe/automation/doctype/auto_repeat/auto_repeat.js:43 #: frappe/desk/doctype/calendar_view/calendar_view_list.js:10 #: frappe/desk/doctype/dashboard/dashboard_list.js:10 msgid "View {0}" -msgstr "" +msgstr "Xem {0}" #. Label of the viewed_by (Data) field in DocType 'View Log' #: frappe/core/doctype/view_log/view_log.json msgid "Viewed By" -msgstr "" +msgstr "Được xem bởi" #. Group in DocType's connections #. Label of a Card Break in the Build Workspace #: frappe/core/doctype/doctype/doctype.json #: frappe/core/workspace/build/build.json msgid "Views" -msgstr "" +msgstr "Lượt xem" #. Label of the is_virtual (Check) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Virtual" -msgstr "" +msgstr "Ảo" #: frappe/model/virtual_doctype.py:76 msgid "Virtual DocType {} requires a static method called {} found {}" @@ -29398,27 +29442,27 @@ msgstr "" msgid "Virtual DocType {} requires overriding an instance method called {} found {}" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1686 +#: frappe/core/doctype/doctype/doctype.py:1689 msgid "Virtual tables must be virtual fields" msgstr "" #. Label of the visibility_section (Section Break) field in DocType 'DocField' #: frappe/core/doctype/docfield/docfield.json msgid "Visibility" -msgstr "" +msgstr "Khả năng hiển thị" #: frappe/public/js/frappe/form/templates/timeline_message_box.html:41 msgid "Visible to website/portal users." -msgstr "" +msgstr "Hiển thị cho người dùng trang web/cổng thông tin." #. Option for the 'Type' (Select) field in DocType 'Communication' #: frappe/core/doctype/communication/communication.json msgid "Visit" -msgstr "" +msgstr "Ghé thăm" #: frappe/desk/doctype/desktop_settings/desktop_settings.js:6 msgid "Visit Desktop" -msgstr "" +msgstr "Truy cập Máy tính để bàn" #: frappe/website/doctype/website_route_meta/website_route_meta.js:7 msgid "Visit Web Page" @@ -29427,16 +29471,16 @@ msgstr "" #. Label of the visitor_id (Data) field in DocType 'Web Page View' #: frappe/website/doctype/web_page_view/web_page_view.json msgid "Visitor ID" -msgstr "" +msgstr "ID khách truy cập" #: frappe/templates/discussions/reply_section.html:39 msgid "Want to discuss?" -msgstr "" +msgstr "Bạn muốn thảo luận?" #. Option for the 'Address Type' (Select) field in DocType 'Address' #: frappe/contacts/doctype/address/address.json msgid "Warehouse" -msgstr "" +msgstr "Kho hàng" #. Option for the 'Button Color' (Select) field in DocType 'DocField' #. Option for the 'Button Color' (Select) field in DocType 'Custom Field' @@ -29446,27 +29490,27 @@ msgstr "" #: frappe/core/doctype/docfield/docfield.json #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json -#: frappe/public/js/frappe/router.js:618 +#: frappe/public/js/frappe/router.js:619 #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Warning" -msgstr "" +msgstr "Cảnh báo" #: frappe/custom/doctype/customize_form/customize_form.js:217 msgid "Warning: DATA LOSS IMMINENT! Proceeding will permanently delete following database columns from doctype {0}:" -msgstr "" +msgstr "Cảnh báo: MẤT DỮ LIỆU NGAY LẬP TỨC! Việc tiếp tục sẽ xóa vĩnh viễn các cột cơ sở dữ liệu sau khỏi loại tài liệu {0}:" -#: frappe/core/doctype/doctype/doctype.py:1143 +#: frappe/core/doctype/doctype/doctype.py:1146 msgid "Warning: Naming is not set" -msgstr "" +msgstr "Cảnh báo: Chưa đặt tên" #: frappe/public/js/frappe/model/meta.js:190 msgid "Warning: Unable to find {0} in any table related to {1}" -msgstr "" +msgstr "Cảnh báo: Không thể tìm thấy {0} trong bất kỳ bảng nào liên quan đến {1}" #. Description of the 'Counter' (Int) field in DocType 'Document Naming Rule' #: frappe/core/doctype/document_naming_rule/document_naming_rule.json msgid "Warning: Updating counter may lead to document name conflicts if not done properly" -msgstr "" +msgstr "Cảnh báo: Việc cập nhật bộ đếm có thể dẫn đến xung đột tên tài liệu nếu không được thực hiện đúng cách" #: frappe/core/doctype/doctype/doctype.py:458 msgid "Warning: Usage of 'format:' is discouraged." @@ -29474,11 +29518,11 @@ msgstr "" #: frappe/website/doctype/help_article/templates/help_article.html:24 msgid "Was this article helpful?" -msgstr "" +msgstr "Bài viết này có hữu ích không?" #: frappe/public/js/frappe/widgets/onboarding_widget.js:127 msgid "Watch Tutorial" -msgstr "" +msgstr "Xem hướng dẫn" #. Option for the 'Action' (Select) field in DocType 'Onboarding Step' #: frappe/desk/doctype/onboarding_step/onboarding_step.json @@ -29491,23 +29535,23 @@ msgstr "" #: frappe/templates/emails/delete_data_confirmation.html:2 msgid "We have received a request for deletion of {0} data associated with: {1}" -msgstr "" +msgstr "Chúng tôi đã nhận được yêu cầu xóa dữ liệu {0} được liên kết với: {1}" #: frappe/templates/emails/download_data.html:2 msgid "We have received a request from you to download your {0} data associated with: {1}" -msgstr "" +msgstr "Chúng tôi đã nhận được yêu cầu từ bạn tải xuống dữ liệu {0} của bạn được liên kết với: {1}" #: frappe/www/attribution.html:12 msgid "We would like to thank the authors of these packages for their contribution." -msgstr "" +msgstr "Chúng tôi xin cảm ơn các tác giả của các gói này vì sự đóng góp của họ." #: frappe/www/contact.py:57 msgid "We've received your query!" -msgstr "" +msgstr "Chúng tôi đã nhận được câu hỏi của bạn!" #: frappe/public/js/frappe/form/controls/password.js:87 msgid "Weak" -msgstr "" +msgstr "Yếu" #. Name of a DocType #: frappe/website/doctype/web_form/web_form.json @@ -29539,7 +29583,7 @@ msgstr "" msgid "Web Page Block" msgstr "" -#: frappe/public/js/frappe/utils/utils.js:1991 +#: frappe/public/js/frappe/utils/utils.js:2001 msgid "Web Page URL" msgstr "" @@ -29691,7 +29735,7 @@ msgstr "" msgid "Website Search Field" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1551 +#: frappe/core/doctype/doctype/doctype.py:1554 msgid "Website Search Field must be a valid fieldname" msgstr "" @@ -29786,16 +29830,16 @@ msgstr "" #: frappe/desk/doctype/event/event.json #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Wednesday" -msgstr "" +msgstr "Thứ Tư" -#: frappe/public/js/frappe/views/calendar/calendar.js:281 +#: frappe/public/js/frappe/views/calendar/calendar.js:283 msgid "Week" -msgstr "" +msgstr "Tuần" #. Option for the 'Frequency' (Select) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "Weekdays" -msgstr "" +msgstr "Ngày làm việc" #. Option for the 'Frequency' (Select) field in DocType 'Auto Repeat' #. Option for the 'Frequency' (Select) field in DocType 'Scheduled Job Type' @@ -29817,18 +29861,18 @@ msgstr "" #: frappe/public/js/frappe/utils/common.js:408 #: frappe/website/report/website_analytics/website_analytics.js:24 msgid "Weekly" -msgstr "" +msgstr "Hàng tuần" #. 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 "Weekly Long" -msgstr "" +msgstr "Dài hàng tuần" #: frappe/desk/page/setup_wizard/setup_wizard.js:384 msgid "Welcome" -msgstr "" +msgstr "Chào mừng" #. Label of the welcome_email_template (Link) field in DocType 'System #. Settings' @@ -29841,12 +29885,12 @@ msgstr "" #. Label of the welcome_url (Data) field in DocType 'Email Group' #: frappe/email/doctype/email_group/email_group.json msgid "Welcome URL" -msgstr "" +msgstr "URL chào mừng" #. Name of a Workspace #: frappe/core/workspace/welcome_workspace/welcome_workspace.json msgid "Welcome Workspace" -msgstr "" +msgstr "Chào mừng không gian làm việc" #: frappe/core/doctype/user/user.py:457 msgid "Welcome email sent" @@ -29854,11 +29898,11 @@ msgstr "" #: frappe/core/doctype/user/user.py:518 msgid "Welcome to {0}" -msgstr "" +msgstr "Chào mừng đến với {0}" #: frappe/public/js/frappe/ui/notifications/notifications.js:80 msgid "What's New" -msgstr "" +msgstr "Có gì mới" #. Description of the 'Allow Guests to Upload Files' (Check) field in DocType #. 'System Settings' @@ -29898,7 +29942,7 @@ msgstr "" #: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:14 #: frappe/public/js/print_format_builder/ConfigureColumns.vue:11 msgid "Width" -msgstr "" +msgstr "Chiều rộng" #: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:2 msgid "Widths can be set in px or %." @@ -29907,7 +29951,7 @@ msgstr "" #. Label of the wildcard_filter (Check) field in DocType 'Report Filter' #: frappe/core/doctype/report_filter/report_filter.json msgid "Wildcard Filter" -msgstr "" +msgstr "Bộ lọc ký tự đại diện" #. Description of the 'Wildcard Filter' (Check) field in DocType 'Report #. Filter' @@ -29915,13 +29959,13 @@ msgstr "" msgid "Will add \"%\" before and after the query" msgstr "" -#: frappe/desk/page/setup_wizard/setup_wizard.js:485 +#: frappe/desk/page/setup_wizard/setup_wizard.js:479 msgid "Will be your login ID" msgstr "" #: frappe/printing/page/print_format_builder/print_format_builder.js:424 msgid "Will only be shown if section headings are enabled" -msgstr "" +msgstr "Sẽ chỉ được hiển thị nếu tiêu đề phần được bật" #. Description of the 'Run Jobs only Daily if Inactive For (Days)' (Int) field #. in DocType 'System Settings' @@ -29931,18 +29975,18 @@ msgstr "" #: frappe/public/js/frappe/form/print_utils.js:46 msgid "With Letter head" -msgstr "" +msgstr "Có đầu thư" #. Label of the worker_information_section (Section Break) field in DocType 'RQ #. Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "Worker Information" -msgstr "" +msgstr "Thông tin Người lao động" #. Label of the worker_name (Data) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_worker/rq_worker.json msgid "Worker Name" -msgstr "" +msgstr "Tên công nhân" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #. Group in DocType's connections @@ -29952,42 +29996,42 @@ msgstr "" #: frappe/public/js/workflow_builder/store.js:129 #: frappe/workflow/doctype/workflow/workflow.json msgid "Workflow" -msgstr "" +msgstr "Quy trình làm việc" #. Name of a DocType #: frappe/workflow/doctype/workflow_action/workflow_action.json #: frappe/workflow/doctype/workflow_action/workflow_action.py:446 msgid "Workflow Action" -msgstr "" +msgstr "Hành động của quy trình làm việc" #. Name of a DocType #. Description of a DocType #: frappe/workflow/doctype/workflow_action_master/workflow_action_master.json msgid "Workflow Action Master" -msgstr "" +msgstr "Bậc thầy hành động quy trình làm việc" #. Label of the workflow_action_name (Data) field in DocType 'Workflow Action #. Master' #: frappe/workflow/doctype/workflow_action_master/workflow_action_master.json msgid "Workflow Action Name" -msgstr "" +msgstr "Tên hành động quy trình làm việc" #. Name of a DocType #: frappe/workflow/doctype/workflow_action_permitted_role/workflow_action_permitted_role.json msgid "Workflow Action Permitted Role" -msgstr "" +msgstr "Vai trò được phép hành động của quy trình làm việc" #. Description of the 'Is Optional State' (Check) field in DocType 'Workflow #. Document State' #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Workflow Action is not created for optional states" -msgstr "" +msgstr "Hành động quy trình làm việc không được tạo cho các trạng thái tùy chọn" #: frappe/public/js/workflow_builder/store.js:129 #: frappe/workflow/doctype/workflow/workflow.js:25 #: frappe/workflow/page/workflow_builder/workflow_builder.js:4 msgid "Workflow Builder" -msgstr "" +msgstr "Trình tạo quy trình làm việc" #. Label of the workflow_builder_id (Data) field in DocType 'Workflow Document #. State' @@ -29996,7 +30040,7 @@ msgstr "" #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json #: frappe/workflow/doctype/workflow_transition/workflow_transition.json msgid "Workflow Builder ID" -msgstr "" +msgstr "ID trình tạo quy trình làm việc" #: 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 their properties from the sidebar." @@ -30005,82 +30049,82 @@ msgstr "" #. Label of the workflow_data (JSON) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "Workflow Data" -msgstr "" +msgstr "Dữ liệu quy trình làm việc" #: frappe/public/js/workflow_builder/components/Properties.vue:44 msgid "Workflow Details" -msgstr "" +msgstr "Chi tiết quy trình làm việc" #. Name of a DocType #: frappe/workflow/doctype/workflow_document_state/workflow_document_state.json msgid "Workflow Document State" -msgstr "" +msgstr "Trạng thái tài liệu quy trình công việc" #: frappe/model/workflow.py:113 msgid "Workflow Evaluation Error" -msgstr "" +msgstr "Lỗi đánh giá quy trình làm việc" #. Label of the workflow_name (Data) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "Workflow Name" -msgstr "" +msgstr "Tên quy trình làm việc" #. Label of the workflow_state (Data) field in DocType 'Workflow Action' #. Name of a DocType #: frappe/workflow/doctype/workflow_action/workflow_action.json #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Workflow State" -msgstr "" +msgstr "Trạng thái quy trình làm việc" #. Label of the workflow_state_field (Data) field in DocType 'Workflow' #: frappe/workflow/doctype/workflow/workflow.json msgid "Workflow State Field" -msgstr "" +msgstr "Trường trạng thái quy trình làm việc" #: frappe/model/workflow.py:67 msgid "Workflow State not set" -msgstr "" +msgstr "Trạng thái quy trình làm việc chưa được đặt" #: frappe/model/workflow.py:281 frappe/model/workflow.py:289 msgid "Workflow State transition not allowed from {0} to {1}" -msgstr "" +msgstr "Không được phép chuyển đổi trạng thái quy trình làm việc từ {0} sang {1}" #: frappe/workflow/doctype/workflow/workflow.js:140 msgid "Workflow States Don't Exist" -msgstr "" +msgstr "Trạng thái quy trình làm việc không tồn tại" #: frappe/model/workflow.py:405 msgid "Workflow Status" -msgstr "" +msgstr "Trạng thái quy trình làm việc" #. Option for the 'Script Type' (Select) field in DocType 'Server Script' #: frappe/core/doctype/server_script/server_script.json msgid "Workflow Task" -msgstr "" +msgstr "Nhiệm vụ quy trình làm việc" #. Name of a DocType #: frappe/workflow/doctype/workflow_transition/workflow_transition.json msgid "Workflow Transition" -msgstr "" +msgstr "Chuyển đổi quy trình làm việc" #. Name of a DocType #: frappe/workflow/doctype/workflow_transition_task/workflow_transition_task.json msgid "Workflow Transition Task" -msgstr "" +msgstr "Nhiệm vụ chuyển đổi quy trình làm việc" #. Name of a DocType #: frappe/workflow/doctype/workflow_transition_tasks/workflow_transition_tasks.json msgid "Workflow Transition Tasks" -msgstr "" +msgstr "Nhiệm vụ chuyển đổi quy trình làm việc" #. Description of a DocType #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Workflow state represents the current state of a document." -msgstr "" +msgstr "Trạng thái quy trình công việc thể hiện trạng thái hiện tại của tài liệu." #: frappe/public/js/workflow_builder/store.js:83 msgid "Workflow updated successfully" -msgstr "" +msgstr "Quy trình làm việc được cập nhật thành công" #. Label of the workspace_section (Section Break) field in DocType 'User' #. Label of a Link in the Build Workspace @@ -30092,50 +30136,50 @@ 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:92 -#: frappe/public/js/frappe/utils/utils.js:956 +#: frappe/public/js/frappe/utils/utils.js:967 #: frappe/public/js/frappe/views/workspace/workspace.js:10 msgid "Workspace" -msgstr "" +msgstr "Không gian làm việc" -#: frappe/public/js/frappe/router.js:180 +#: frappe/public/js/frappe/router.js:181 msgid "Workspace {0} does not exist" -msgstr "" +msgstr "Không gian làm việc {0} không tồn tại" #. Name of a DocType #: frappe/desk/doctype/workspace_chart/workspace_chart.json msgid "Workspace Chart" -msgstr "" +msgstr "Biểu đồ không gian làm việc" #. Name of a DocType #: frappe/desk/doctype/workspace_custom_block/workspace_custom_block.json msgid "Workspace Custom Block" -msgstr "" +msgstr "Khối tùy chỉnh không gian làm việc" #. Name of a DocType #: frappe/desk/doctype/workspace_link/workspace_link.json msgid "Workspace Link" -msgstr "" +msgstr "Liên kết không gian làm việc" #. Name of a role #: frappe/desk/doctype/custom_html_block/custom_html_block.json #: frappe/desk/doctype/workspace/workspace.json msgid "Workspace Manager" -msgstr "" +msgstr "Trình quản lý không gian làm việc" #. Name of a DocType #: frappe/desk/doctype/workspace_number_card/workspace_number_card.json msgid "Workspace Number Card" -msgstr "" +msgstr "Thẻ số vùng làm việc" #. Name of a DocType #: frappe/desk/doctype/workspace_quick_list/workspace_quick_list.json msgid "Workspace Quick List" -msgstr "" +msgstr "Danh sách nhanh không gian làm việc" #. Name of a DocType #: frappe/desk/doctype/workspace_shortcut/workspace_shortcut.json msgid "Workspace Shortcut" -msgstr "" +msgstr "Phím tắt không gian làm việc" #. Option for the 'Link Type' (Select) field in DocType 'Desktop Icon' #. Name of a DocType @@ -30143,21 +30187,21 @@ msgstr "" #: frappe/desk/doctype/desktop_icon/desktop_icon.json #: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json msgid "Workspace Sidebar" -msgstr "" +msgstr "Thanh bên của không gian làm việc" #. Name of a DocType #: frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json msgid "Workspace Sidebar Item" -msgstr "" +msgstr "Mục thanh bên của không gian làm việc" #: frappe/public/js/frappe/views/workspace/workspace.js:602 msgid "Workspace {0} created" -msgstr "" +msgstr "Không gian làm việc {0} đã được tạo" #. Option for the 'View' (Select) field in DocType 'Form Tour' #: frappe/desk/doctype/form_tour/form_tour.json msgid "Workspaces" -msgstr "" +msgstr "Không gian làm việc" #: frappe/public/js/frappe/form/footer/form_timeline.js:757 msgid "Would you like to publish this comment? This means it will become visible to website/portal users." @@ -30169,7 +30213,7 @@ msgstr "" #: frappe/desk/page/setup_wizard/setup_wizard.py:41 msgid "Wrapping up" -msgstr "" +msgstr "Kết thúc" #. Label of the write (Check) field in DocType 'Custom DocPerm' #. Label of the write (Check) field in DocType 'DocPerm' @@ -30182,25 +30226,25 @@ msgstr "" #: frappe/core/page/permission_manager/permission_manager_help.html:36 #: frappe/public/js/frappe/form/templates/set_sharing.html:3 msgid "Write" -msgstr "" +msgstr "Viết" -#: frappe/model/base_document.py:1069 +#: frappe/model/base_document.py:1082 msgid "Wrong Fetch From value" -msgstr "" +msgstr "Tìm nạp sai giá trị từ" -#: frappe/public/js/frappe/views/reports/report_view.js:489 +#: frappe/public/js/frappe/views/reports/report_view.js:491 msgid "X Axis Field" -msgstr "" +msgstr "Trường trục X" #. Label of the x_field (Select) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "X Field" -msgstr "" +msgstr "Trường X" #. Option for the 'Format' (Select) field in DocType 'Auto Email Report' #: frappe/email/doctype/auto_email_report/auto_email_report.json msgid "XLSX" -msgstr "" +msgstr "XLSX" #: frappe/public/js/frappe/file_uploader/FileUploader.vue:644 msgid "XMLHttpRequest Error" @@ -30209,17 +30253,17 @@ msgstr "" #. Label of the y_axis (Table) field in DocType 'Dashboard Chart' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json msgid "Y Axis" -msgstr "" +msgstr "Trục Y" -#: frappe/public/js/frappe/views/reports/report_view.js:496 +#: frappe/public/js/frappe/views/reports/report_view.js:498 msgid "Y Axis Fields" -msgstr "" +msgstr "Trường trục Y" #. Label of the y_field (Select) field in DocType 'Dashboard Chart Field' #: frappe/desk/doctype/dashboard_chart_field/dashboard_chart_field.json #: frappe/public/js/frappe/views/reports/query_report.js:1268 msgid "Y Field" -msgstr "" +msgstr "Trường Y" #. Option for the 'Service' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json @@ -30229,14 +30273,14 @@ msgstr "" #. Option for the 'Service' (Select) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "Yandex.Mail" -msgstr "" +msgstr "Yandex.Mail" #. Label of the heatmap_year (Select) field in DocType 'Dashboard Chart' #. Label of the year (Data) field in DocType 'Company History' #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/website/doctype/company_history/company_history.json msgid "Year" -msgstr "" +msgstr "Năm" #. Option for the 'Frequency' (Select) field in DocType 'Auto Repeat' #. Option for the 'Frequency' (Select) field in DocType 'Scheduled Job Type' @@ -30254,14 +30298,14 @@ msgstr "" #: frappe/email/doctype/auto_email_report/auto_email_report.json #: frappe/public/js/frappe/utils/common.js:412 msgid "Yearly" -msgstr "" +msgstr "Hàng năm" #. Option for the 'Color' (Select) field in DocType 'DocType State' #. Option for the 'Indicator' (Select) field in DocType 'Kanban Board Column' #: frappe/core/doctype/doctype_state/doctype_state.json #: frappe/desk/doctype/kanban_board_column/kanban_board_column.json msgid "Yellow" -msgstr "" +msgstr "Màu vàng" #. Option for the 'Standard' (Select) field in DocType 'Page' #. Option for the 'Is Standard' (Select) field in DocType 'Report' @@ -30281,48 +30325,48 @@ 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:568 -#: frappe/public/js/frappe/list/base_list.js:948 +#: frappe/public/js/frappe/form/controls/link.js:579 +#: frappe/public/js/frappe/list/base_list.js:950 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:170 #: frappe/public/js/frappe/views/reports/query_report.js:47 #: frappe/website/doctype/help_article/templates/help_article.html:25 msgid "Yes" -msgstr "" +msgstr "Có" #: frappe/public/js/frappe/ui/messages.js:32 msgctxt "Approve confirmation dialog" msgid "Yes" -msgstr "" +msgstr "Đồng ý" #: frappe/public/js/frappe/ui/filters/filter.js:544 msgctxt "Checkbox is checked" msgid "Yes" -msgstr "" +msgstr "Đồng ý" #: frappe/public/js/frappe/ui/filters/filter.js:726 msgid "Yesterday" -msgstr "" +msgstr "Hôm qua" #: frappe/public/js/frappe/utils/user.js:33 msgctxt "Name of the current user. For example: You edited this 5 hours ago." msgid "You" -msgstr "" +msgstr "Bạn" #: frappe/public/js/frappe/form/footer/form_timeline.js:463 msgid "You Liked" -msgstr "" +msgstr "Bạn đã thích" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:271 msgid "You added 1 row to {0}" -msgstr "" +msgstr "Bạn đã thêm 1 hàng vào {0}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:249 msgid "You added {0} rows to {1}" -msgstr "" +msgstr "Bạn đã thêm {0} hàng vào {1}" -#: frappe/public/js/frappe/router.js:647 +#: frappe/public/js/frappe/router.js:648 msgid "You are about to open an external link. To confirm, click the link again." -msgstr "" +msgstr "Bạn sắp mở một liên kết bên ngoài. Để xác nhận, hãy nhấp vào liên kết một lần nữa." #: frappe/public/js/frappe/dom.js:435 msgid "You are connected to internet." @@ -30330,31 +30374,31 @@ msgstr "" #: frappe/integrations/frappe_providers/frappecloud_billing.py:28 msgid "You are not allowed to access this resource" -msgstr "" +msgstr "Bạn không được phép truy cập tài nguyên này" #: frappe/permissions.py:443 msgid "You are not allowed to access this {0} record because it is linked to {1} '{2}' in field {3}" -msgstr "" +msgstr "Bạn không được phép truy cập bản ghi {0} này vì nó được liên kết với {1} '{2}' trong trường {3}" #: frappe/permissions.py:432 msgid "You are not allowed to access this {0} record because it is linked to {1} '{2}' in row {3}, field {4}" -msgstr "" +msgstr "Bạn không được phép truy cập bản ghi {0} này vì nó được liên kết với {1} '{2}' trong hàng {3}, trường {4}" #: frappe/public/js/frappe/views/kanban/kanban_board.bundle.js:68 msgid "You are not allowed to create columns" -msgstr "" +msgstr "Bạn không được phép tạo cột" #: frappe/core/doctype/report/report.py:102 msgid "You are not allowed to delete Standard Report" -msgstr "" +msgstr "Bạn không được phép xóa Báo cáo Chuẩn" #: frappe/website/doctype/website_theme/website_theme.py:73 msgid "You are not allowed to delete a standard Website Theme" msgstr "" -#: frappe/core/doctype/report/report.py:396 +#: frappe/core/doctype/report/report.py:398 msgid "You are not allowed to edit the report." -msgstr "" +msgstr "Bạn không được phép chỉnh sửa báo cáo." #: frappe/core/doctype/data_import/exporter.py:121 #: frappe/core/doctype/data_import/exporter.py:125 @@ -30365,7 +30409,7 @@ msgstr "" #: frappe/public/js/frappe/views/treeview.js:458 msgid "You are not allowed to print this report" -msgstr "" +msgstr "Bạn không được phép in báo cáo này" #: frappe/public/js/frappe/views/communication.js:845 msgid "You are not allowed to send emails related to this document" @@ -30373,7 +30417,7 @@ msgstr "" #: frappe/desk/doctype/event/event.py:251 msgid "You are not allowed to update the status of this event." -msgstr "" +msgstr "Bạn không được phép cập nhật trạng thái của sự kiện này." #: frappe/website/doctype/web_form/web_form.py:633 msgid "You are not allowed to update this Web Form Document" @@ -30389,11 +30433,11 @@ msgstr "" #: frappe/www/desk.py:27 msgid "You are not permitted to access this page." -msgstr "" +msgstr "Bạn không được phép truy cập trang này." -#: frappe/__init__.py:462 +#: frappe/__init__.py:464 msgid "You are not permitted to access this resource. Login to access" -msgstr "" +msgstr "Bạn không được phép truy cập tài nguyên này. Đăng nhập để truy cập" #: frappe/public/js/frappe/form/sidebar/document_follow.js:131 msgid "You are now following this document. You will receive daily updates via email. You can change this in User Settings." @@ -30401,7 +30445,7 @@ msgstr "" #: frappe/core/doctype/installed_applications/installed_applications.py:126 msgid "You are only allowed to update order, do not remove or add apps." -msgstr "" +msgstr "Bạn chỉ được phép cập nhật đơn hàng, không được xóa hoặc thêm ứng dụng." #: frappe/email/doctype/email_account/email_account.js:284 msgid "You are selecting Sync Option as ALL, It will resync all read as well as unread message from server. This may also cause the duplication of Communication (emails)." @@ -30410,7 +30454,7 @@ msgstr "" #: frappe/public/js/frappe/form/footer/form_timeline.js:414 msgctxt "Form timeline" msgid "You attached {0}" -msgstr "" +msgstr "Bạn đã đính kèm {0}" #: frappe/printing/page/print_format_builder/print_format_builder.js:783 msgid "You can add dynamic properties from the document by using Jinja templating." @@ -30422,39 +30466,39 @@ msgstr "" #: frappe/templates/emails/new_user.html:22 msgid "You can also copy-paste following link in your browser" -msgstr "" +msgstr "Bạn cũng có thể sao chép-dán liên kết sau vào trình duyệt của mình" #: frappe/templates/emails/download_data.html:9 msgid "You can also copy-paste this" -msgstr "" +msgstr "Bạn cũng có thể sao chép-dán" #: frappe/templates/emails/delete_data_confirmation.html:11 msgid "You can also copy-paste this {0} to your browser" -msgstr "" +msgstr "Bạn cũng có thể sao chép-dán {0} này vào trình duyệt của mình" #: 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 "Bạn có thể yêu cầu nhóm của mình gửi lại lời mời nếu bạn vẫn muốn tham gia." #: frappe/public/js/frappe/logtypes.js:21 msgid "You can change the retention policy from {0}." -msgstr "" +msgstr "Bạn có thể thay đổi chính sách lưu giữ từ {0}." #: frappe/public/js/frappe/widgets/onboarding_widget.js:194 msgid "You can continue with the onboarding after exploring this page" -msgstr "" +msgstr "Bạn có thể tiếp tục quá trình làm quen sau khi khám phá trang này" #: frappe/model/delete_doc.py:179 msgid "You can disable this {0} instead of deleting it." -msgstr "" +msgstr "Bạn có thể tắt {0} này thay vì xóa nó." -#: frappe/core/doctype/file/file.py:768 +#: frappe/core/doctype/file/file.py:773 msgid "You can increase the limit from System Settings." -msgstr "" +msgstr "Bạn có thể tăng giới hạn từ Cài đặt hệ thống." #: frappe/utils/synchronization.py:48 msgid "You can manually remove the lock if you think it's safe: {}" -msgstr "" +msgstr "Bạn có thể tháo khóa theo cách thủ công nếu bạn cho rằng nó an toàn: {}" #: frappe/public/js/frappe/form/controls/markdown_editor.js:75 msgid "You can only insert images in Markdown fields" @@ -30462,11 +30506,11 @@ msgstr "" #: frappe/public/js/frappe/list/bulk_operations.js:42 msgid "You can only print upto {0} documents at a time" -msgstr "" +msgstr "Bạn chỉ có thể in tối đa {0} tài liệu mỗi lần" #: frappe/core/doctype/user_type/user_type.py:104 msgid "You can only set the 3 custom doctypes in the Document Types table." -msgstr "" +msgstr "Bạn chỉ có thể đặt 3 loại tài liệu tùy chỉnh trong bảng Loại tài liệu." #: frappe/handler.py:184 msgid "You can only upload JPG, PNG, GIF, PDF, TXT, CSV or Microsoft documents." @@ -30474,121 +30518,121 @@ msgstr "" #: frappe/core/doctype/data_export/exporter.py:199 msgid "You can only upload upto 5000 records in one go. (may be less in some cases)" -msgstr "" +msgstr "Bạn chỉ có thể tải lên tối đa 5000 bản ghi trong một lần. (có thể ít hơn trong một số trường hợp)" #: frappe/website/doctype/web_page/web_page.js:92 msgid "You can select one from the following," -msgstr "" +msgstr "Bạn có thể chọn một trong các tùy chọn sau," #. Description of the 'Rate limit for email link login' (Int) field in DocType #. 'System Settings' #: frappe/core/doctype/system_settings/system_settings.json msgid "You can set a high value here if multiple users will be logging in from the same network." -msgstr "" +msgstr "Bạn có thể đặt giá trị cao ở đây nếu nhiều người dùng đăng nhập từ cùng một mạng." #: frappe/desk/query_report.py:383 msgid "You can try changing the filters of your report." -msgstr "" +msgstr "Bạn có thể thử thay đổi bộ lọc của báo cáo." #: frappe/core/page/permission_manager/permission_manager_help.html:94 msgid "You can use Customize Form to set levels on fields." -msgstr "" +msgstr "Bạn có thể sử dụng Tùy chỉnh biểu mẫu để đặt cấp độ trên các trường." #: frappe/public/js/frappe/form/link_selector.js:30 msgid "You can use wildcard %" -msgstr "" +msgstr "Bạn có thể sử dụng ký tự đại diện %" #: frappe/custom/doctype/customize_form/customize_form.py:394 msgid "You can't set 'Options' for field {0}" -msgstr "" +msgstr "Bạn không thể đặt 'Tùy chọn' cho trường {0}" #: frappe/custom/doctype/customize_form/customize_form.py:398 msgid "You can't set 'Translatable' for field {0}" -msgstr "" +msgstr "Bạn không thể đặt 'Có thể dịch' cho trường {0}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:74 msgctxt "Form timeline" msgid "You cancelled this document" -msgstr "" +msgstr "Bạn đã hủy tài liệu này" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:61 msgctxt "Form timeline" msgid "You cancelled this document {1}" -msgstr "" +msgstr "Bạn đã hủy tài liệu này {1}" #: frappe/desk/doctype/dashboard_chart/dashboard_chart.py:417 msgid "You cannot create a dashboard chart from single DocTypes" msgstr "" -#: frappe/share.py:246 +#: frappe/share.py:241 msgid "You cannot share `{0}` on {1} `{2}` as you do not have `{0}` permission on `{1}`" -msgstr "" +msgstr "Bạn không thể chia sẻ `{0}` trên {1} `{2}` vì bạn không có quyền `{0}` trên `{1}`" #: frappe/custom/doctype/customize_form/customize_form.py:390 msgid "You cannot unset 'Read Only' for field {0}" -msgstr "" +msgstr "Bạn không thể bỏ đặt 'Chỉ đọc' cho trường {0}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:125 msgid "You changed the value of {0}" -msgstr "" +msgstr "Bạn đã thay đổi giá trị của {0}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:114 msgid "You changed the value of {0} {1}" -msgstr "" +msgstr "Bạn đã thay đổi giá trị của {0} {1}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:196 msgid "You changed the values for {0}" -msgstr "" +msgstr "Bạn đã thay đổi giá trị cho {0}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:185 msgid "You changed the values for {0} {1}" -msgstr "" +msgstr "Bạn đã thay đổi giá trị cho {0} {1}" #: frappe/public/js/frappe/form/footer/form_timeline.js:443 msgctxt "Form timeline" msgid "You changed {0} to {1}" -msgstr "" +msgstr "Bạn đã thay đổi {0} thành {1}" #: frappe/public/js/frappe/form/footer/form_timeline.js:140 msgid "You created this" -msgstr "" +msgstr "Bạn đã tạo cái này" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:345 msgctxt "Form timeline" msgid "You created this document {0}" -msgstr "" +msgstr "Bạn đã tạo tài liệu này {0}" -#: frappe/public/js/frappe/request.js:175 +#: frappe/public/js/frappe/request.js:176 msgid "You do not have enough permissions to access this resource. Please contact your manager to get access." -msgstr "" +msgstr "Bạn không có đủ quyền để truy cập tài nguyên này. Vui lòng liên hệ với người quản lý của bạn để có được quyền truy cập." #: frappe/app.py:384 msgid "You do not have enough permissions to complete the action" -msgstr "" +msgstr "Bạn không có đủ quyền để hoàn thành hành động" #: frappe/core/doctype/data_import/data_import.py:83 msgid "You do not have import permission for {0}" -msgstr "" +msgstr "Bạn không có quyền nhập đối với {0}" -#: frappe/database/query.py:943 +#: frappe/database/query.py:963 msgid "You do not have permission to access child table field: {0}" -msgstr "" +msgstr "Bạn không có quyền truy cập vào trường bảng con: {0}" -#: frappe/database/query.py:953 +#: frappe/database/query.py:973 msgid "You do not have permission to access field: {0}" -msgstr "" +msgstr "Bạn không có quyền truy cập vào trường: {0}" #: frappe/desk/query_report.py:968 msgid "You do not have permission to access {0}: {1}." -msgstr "" +msgstr "Bạn không có quyền truy cập {0}: {1}." #: frappe/public/js/frappe/form/form.js:1000 msgid "You do not have permissions to cancel all linked documents." -msgstr "" +msgstr "Bạn không có quyền hủy tất cả tài liệu được liên kết." #: frappe/desk/query_report.py:44 msgid "You don't have access to Report: {0}" -msgstr "" +msgstr "Bạn không có quyền truy cập vào Báo cáo: {0}" #: frappe/website/doctype/web_form/web_form.py:840 msgid "You don't have permission to access the {0} DocType." @@ -30596,78 +30640,78 @@ msgstr "" #: frappe/utils/response.py:291 frappe/utils/response.py:295 msgid "You don't have permission to access this file" -msgstr "" +msgstr "Bạn không có quyền truy cập tập tin này" #: frappe/desk/query_report.py:50 msgid "You don't have permission to get a report on: {0}" -msgstr "" +msgstr "Bạn không có quyền nhận báo cáo về: {0}" #: frappe/website/doctype/web_form/web_form.py:176 msgid "You don't have the permissions to access this document" -msgstr "" +msgstr "Bạn không có quyền truy cập tài liệu này" #: frappe/templates/emails/new_message.html:1 msgid "You have a new message from:" -msgstr "" +msgstr "Bạn có tin nhắn mới từ:" #: frappe/handler.py:120 msgid "You have been successfully logged out" -msgstr "" +msgstr "Bạn đã đăng xuất thành công" #: frappe/custom/doctype/customize_form/customize_form.py:247 msgid "You have hit the row size limit on database table: {0}" -msgstr "" +msgstr "Bạn đã đạt đến giới hạn kích thước hàng trên bảng cơ sở dữ liệu: {0}" #: frappe/public/js/frappe/list/bulk_operations.js:426 msgid "You have not entered a value. The field will be set to empty." -msgstr "" +msgstr "Bạn chưa nhập giá trị. Trường này sẽ được đặt thành trống." #: frappe/twofactor.py:446 msgid "You have to enable Two Factor Auth from System Settings." -msgstr "" +msgstr "Bạn phải bật Xác thực hai yếu tố từ Cài đặt hệ thống." #: frappe/public/js/frappe/model/create_new.js:328 msgid "You have unsaved changes in this form. Please save before you continue." -msgstr "" +msgstr "Bạn có những thay đổi chưa được lưu trong biểu mẫu này. Hãy lưu lại trước khi bạn tiếp tục." #: frappe/core/doctype/log_settings/log_settings.py:125 msgid "You have unseen {0}" -msgstr "" +msgstr "Bạn chưa thấy {0}" #: frappe/public/js/frappe/views/dashboard/dashboard_view.js:192 msgid "You haven't added any Dashboard Charts or Number Cards yet." -msgstr "" +msgstr "Bạn chưa thêm bất kỳ Biểu đồ bảng điều khiển hoặc Thẻ số nào." -#: frappe/public/js/frappe/list/list_view.js:507 +#: frappe/public/js/frappe/list/list_view.js:516 msgid "You haven't created a {0} yet" -msgstr "" +msgstr "Bạn chưa tạo {0}" #: frappe/rate_limiter.py:166 msgid "You hit the rate limit because of too many requests. Please try after sometime." -msgstr "" +msgstr "Bạn đã đạt đến giới hạn tốc độ vì có quá nhiều yêu cầu. Vui lòng thử lại sau." #: frappe/public/js/frappe/form/footer/form_timeline.js:151 msgid "You last edited this" -msgstr "" +msgstr "Lần cuối cùng bạn chỉnh sửa cái này" #: frappe/public/js/frappe/widgets/widget_dialog.js:352 msgid "You must add atleast one link." -msgstr "" +msgstr "Bạn phải thêm ít nhất một liên kết." #: frappe/website/doctype/web_form/web_form.py:836 msgid "You must be logged in to use this form." -msgstr "" +msgstr "Bạn phải đăng nhập để sử dụng biểu mẫu này." #: frappe/website/doctype/web_form/web_form.py:677 msgid "You must login to submit this form" -msgstr "" +msgstr "Bạn phải đăng nhập để gửi biểu mẫu này" #: frappe/model/document.py:390 msgid "You need the '{0}' permission on {1} {2} to perform this action." -msgstr "" +msgstr "Bạn cần có quyền '{0}' trên {1} {2} để thực hiện hành động này." #: frappe/desk/doctype/workspace/workspace.py:129 -#: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py:71 +#: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py:74 msgid "You need to be Workspace Manager to delete a public workspace." msgstr "" @@ -30689,15 +30733,15 @@ msgstr "" #: frappe/www/me.py:13 frappe/www/third_party_apps.py:10 msgid "You need to be logged in to access this page" -msgstr "" +msgstr "Bạn cần phải đăng nhập để truy cập trang này" #: frappe/website/doctype/web_form/web_form.py:165 msgid "You need to be logged in to access this {0}." -msgstr "" +msgstr "Bạn cần phải đăng nhập để truy cập {0} này." #: frappe/public/js/frappe/widgets/links_widget.js:63 msgid "You need to create these first:" -msgstr "" +msgstr "Bạn cần tạo những thứ này trước:" #: frappe/www/login.html:76 msgid "You need to enable JavaScript for your app to work." @@ -30705,48 +30749,48 @@ msgstr "" #: frappe/core/doctype/docshare/docshare.py:62 msgid "You need to have \"Share\" permission" -msgstr "" +msgstr "Bạn cần có quyền \"Chia sẻ\"" -#: frappe/utils/print_format.py:313 +#: frappe/utils/print_format.py:322 msgid "You need to install pycups to use this feature!" msgstr "" #: frappe/core/doctype/recorder/recorder.js:38 msgid "You need to select indexes you want to add first." -msgstr "" +msgstr "Bạn cần chọn các chỉ mục bạn muốn thêm trước." -#: frappe/email/doctype/email_account/email_account.py:160 +#: frappe/email/doctype/email_account/email_account.py:161 msgid "You need to set one IMAP folder for {0}" -msgstr "" +msgstr "Bạn cần đặt một thư mục IMAP cho {0}" #: frappe/model/rename_doc.py:391 msgid "You need write permission on {0} {1} to merge" -msgstr "" +msgstr "Bạn cần có quyền ghi trên {0} {1} để hợp nhất" #: frappe/model/rename_doc.py:386 msgid "You need write permission on {0} {1} to rename" -msgstr "" +msgstr "Bạn cần có quyền ghi trên {0} {1} để đổi tên" #: frappe/client.py:501 msgid "You need {0} permission to fetch values from {1} {2}" -msgstr "" +msgstr "Bạn cần có quyền {0} để tìm nạp các giá trị từ {1} {2}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:316 msgid "You removed 1 row from {0}" -msgstr "" +msgstr "Bạn đã xóa 1 hàng khỏi {0}" #: frappe/public/js/frappe/form/footer/form_timeline.js:419 msgctxt "Form timeline" msgid "You removed attachment {0}" -msgstr "" +msgstr "Bạn đã xóa tệp đính kèm {0}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:294 msgid "You removed {0} rows from {1}" -msgstr "" +msgstr "Bạn đã xóa {0} hàng khỏi {1}" #: frappe/public/js/frappe/widgets/onboarding_widget.js:520 msgid "You seem good to go!" -msgstr "" +msgstr "Bạn có vẻ tốt để đi!" #: frappe/templates/includes/contact.js:20 msgid "You seem to have written your name instead of your email. Please enter a valid email address so that we can get back." @@ -30754,37 +30798,37 @@ msgstr "" #: frappe/public/js/frappe/list/bulk_operations.js:31 msgid "You selected Draft or Cancelled documents" -msgstr "" +msgstr "Bạn đã chọn Tài liệu nháp hoặc Đã hủy" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:48 msgctxt "Form timeline" msgid "You submitted this document" -msgstr "" +msgstr "Bạn đã gửi tài liệu này" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:35 msgctxt "Form timeline" msgid "You submitted this document {0}" -msgstr "" +msgstr "Bạn đã gửi tài liệu này {0}" #: frappe/public/js/frappe/form/sidebar/document_follow.js:144 msgid "You unfollowed this document" -msgstr "" +msgstr "Bạn đã hủy theo dõi tài liệu này" #: frappe/public/js/frappe/form/footer/form_timeline.js:183 msgid "You viewed this" -msgstr "" +msgstr "Bạn đã xem cái này" -#: frappe/public/js/frappe/router.js:658 +#: frappe/public/js/frappe/router.js:659 msgid "You will be redirected to:" -msgstr "" +msgstr "Bạn sẽ được chuyển hướng đến:" #: frappe/core/doctype/user_invitation/user_invitation.py:113 msgid "You've been invited to join {0}" -msgstr "" +msgstr "Bạn đã được mời tham gia {0}" #: frappe/templates/emails/user_invitation.html:5 msgid "You've been invited to join {0}." -msgstr "" +msgstr "Bạn đã được mời tham gia {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." @@ -30800,28 +30844,28 @@ msgstr "" #: frappe/desk/page/setup_wizard/setup_wizard.js:397 msgid "Your Country" -msgstr "" +msgstr "Đất nước của bạn" #: frappe/desk/page/setup_wizard/setup_wizard.js:389 msgid "Your Language" -msgstr "" +msgstr "Ngôn ngữ của bạn" #: frappe/templates/includes/comments/comments.html:21 msgid "Your Name" -msgstr "" +msgstr "Tên của bạn" #: frappe/public/js/frappe/list/bulk_operations.js:132 msgid "Your PDF is ready for download" -msgstr "" +msgstr "Bản PDF của bạn đã sẵn sàng để tải xuống" #: frappe/patches/v14_0/update_workspace2.py:34 msgid "Your Shortcuts" -msgstr "" +msgstr "Phím tắt của bạn" #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.py:145 #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.py:151 msgid "Your account has been deleted" -msgstr "" +msgstr "Tài khoản của bạn đã bị xóa" #: frappe/auth.py:520 msgid "Your account has been locked and will resume after {0} seconds" @@ -30829,7 +30873,7 @@ msgstr "" #: frappe/desk/form/assign_to.py:279 msgid "Your assignment on {0} {1} has been removed by {2}" -msgstr "" +msgstr "Bài tập của bạn trên {0} {1} đã bị {2}" #: frappe/core/doctype/file/file.js:78 msgid "Your browser does not support the audio element." @@ -30849,11 +30893,11 @@ msgstr "" #: frappe/desk/utils.py:105 msgid "Your exported report: {0}" -msgstr "" +msgstr "Báo cáo đã xuất của bạn: {0}" #: frappe/public/js/frappe/web_form/web_form.js:448 msgid "Your form has been successfully updated" -msgstr "" +msgstr "Biểu mẫu của bạn đã được cập nhật thành công" #: frappe/templates/emails/user_invitation_cancelled.html:5 msgid "Your invitation to join {0} has been cancelled by the site administrator." @@ -30861,7 +30905,7 @@ msgstr "" #: frappe/templates/emails/user_invitation_expired.html:5 msgid "Your invitation to join {0} has expired." -msgstr "" +msgstr "Lời mời tham gia {0} của bạn đã hết hạn." #: frappe/templates/emails/new_user.html:6 msgid "Your login id is" @@ -30869,11 +30913,11 @@ msgstr "" #: frappe/www/update-password.html:192 msgid "Your new password has been set successfully." -msgstr "" +msgstr "Mật khẩu mới của bạn đã được đặt thành công." #: frappe/www/update-password.html:172 msgid "Your old password is incorrect." -msgstr "" +msgstr "Mật khẩu cũ của bạn không chính xác." #. Description of the 'Email Footer Address' (Small Text) field in DocType #. 'System Settings' @@ -30883,7 +30927,7 @@ msgstr "" #: frappe/templates/emails/auto_reply.html:2 msgid "Your query has been received. We will reply back shortly. If you have any additional information, please reply to this mail." -msgstr "" +msgstr "Truy vấn của bạn đã được nhận. Chúng tôi sẽ trả lời lại trong thời gian ngắn. Nếu bạn có thêm thông tin gì, vui lòng trả lời thư này." #: frappe/desk/query_report.py:343 frappe/desk/reportview.py:399 msgid "Your report is being generated in the background. You will receive an email on {0} with a download link once it is ready." @@ -30891,7 +30935,7 @@ msgstr "" #: frappe/app.py:377 msgid "Your session has expired, please login again to continue." -msgstr "" +msgstr "Phiên của bạn đã hết hạn, vui lòng đăng nhập lại để tiếp tục." #: frappe/templates/emails/verification_code.html:1 msgid "Your verification code is {0}" @@ -30899,7 +30943,7 @@ msgstr "" #: frappe/utils/data.py:1557 msgid "Zero" -msgstr "" +msgstr "Không" #. Description of the 'Only Send Records Updated in Last X Hours' (Int) field #. in DocType 'Auto Email Report' @@ -30909,7 +30953,7 @@ msgstr "" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:363 msgid "[Action taken by {0}]" -msgstr "" +msgstr "[Hành động được thực hiện bởi {0}]" #: frappe/database/database.py:367 msgid "`as_iterator` only works with `as_list=True` or `as_dict=True`" @@ -30917,38 +30961,38 @@ msgstr "" #: frappe/utils/background_jobs.py:121 msgid "`job_id` paramater is required for deduplication." -msgstr "" +msgstr "Cần có thông số `job_id` để loại bỏ trùng lặp." #. Option for the 'Doc Event' (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "after_insert" -msgstr "" +msgstr "after_insert" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "amend" -msgstr "" +msgstr "sửa đổi" -#: frappe/public/js/frappe/utils/utils.js:396 frappe/utils/data.py:1567 +#: frappe/public/js/frappe/utils/utils.js:407 frappe/utils/data.py:1567 msgid "and" msgstr "" #: frappe/public/js/frappe/ui/sort_selector.html:5 #: frappe/public/js/frappe/ui/sort_selector.js:48 msgid "ascending" -msgstr "" +msgstr "tăng dần" #. Option for the 'Background Color' (Select) field in DocType 'Desktop Icon' #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/desktop_icon/desktop_icon.json #: frappe/desk/doctype/workspace/workspace.json msgid "blue" -msgstr "" +msgstr "màu xanh" #: frappe/public/js/frappe/form/workflow.js:35 msgid "by Role" -msgstr "" +msgstr "theo vai trò" #. Label of the profile (Code) field in DocType 'Recorder' #: frappe/core/doctype/recorder/recorder.json @@ -30957,18 +31001,18 @@ msgstr "" #: frappe/public/js/frappe/ui/toolbar/search_utils.js:297 msgid "calendar" -msgstr "" +msgstr "lịch" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "cancel" -msgstr "" +msgstr "hủy" #. Option for the 'Status' (Select) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "canceled" -msgstr "" +msgstr "bị hủy" #. Option for the 'PDF Generator' (Select) field in DocType 'Print Format' #. Option for the 'PDF Generator' (Select) field in DocType 'Print Settings' @@ -30977,27 +31021,23 @@ msgstr "" msgid "chrome" msgstr "" -#: frappe/templates/includes/list/filters.html:19 -msgid "clear" -msgstr "" - #: frappe/public/js/frappe/form/templates/timeline_message_box.html:34 msgid "commented" -msgstr "" +msgstr "đã bình luận" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "create" -msgstr "" +msgstr "tạo" #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "cyan" -msgstr "" +msgstr "lục lam" #: frappe/public/js/frappe/form/controls/duration.js:219 -#: frappe/public/js/frappe/utils/utils.js:1192 +#: frappe/public/js/frappe/utils/utils.js:1203 msgctxt "Days (Field: Duration)" msgid "d" msgstr "" @@ -31005,11 +31045,11 @@ msgstr "" #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "darkgrey" -msgstr "" +msgstr "màu xám đen" #: frappe/core/page/dashboard_view/dashboard_view.js:65 msgid "dashboard" -msgstr "" +msgstr "tổng quan" #. Option for the 'Date Format' (Select) field in DocType 'Language' #. Option for the 'Date Format' (Select) field in DocType 'System Settings' @@ -31023,41 +31063,41 @@ msgstr "" #: frappe/core/doctype/language/language.json #: frappe/core/doctype/system_settings/system_settings.json msgid "dd.mm.yyyy" -msgstr "" +msgstr "đ.mm.yyyy" #. Option for the 'Date Format' (Select) field in DocType 'Language' #. Option for the 'Date Format' (Select) field in DocType 'System Settings' #: frappe/core/doctype/language/language.json #: frappe/core/doctype/system_settings/system_settings.json msgid "dd/mm/yyyy" -msgstr "" +msgstr "đ/mm/năm" #. Option for the 'Queue' (Select) field in DocType 'RQ Job' #. Option for the 'Queue Type(s)' (Select) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_job/rq_job.json #: frappe/core/doctype/rq_worker/rq_worker.json msgid "default" -msgstr "" +msgstr "mặc định" #. Option for the 'Status' (Select) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "deferred" -msgstr "" +msgstr "hoãn lại" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "delete" -msgstr "" +msgstr "xóa" #: frappe/public/js/frappe/ui/sort_selector.html:5 #: frappe/public/js/frappe/ui/sort_selector.js:48 msgid "descending" -msgstr "" +msgstr "giảm dần" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:232 msgid "document type..., e.g. customer" -msgstr "" +msgstr "loại tài liệu..., ví dụ: khách hàng" #. Description of the 'Email Account Name' (Data) field in DocType 'Email #. Account' @@ -31067,27 +31107,27 @@ msgstr "" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:257 msgid "e.g. (55 + 434) / 4 or =Math.sin(Math.PI/2)..." -msgstr "" +msgstr "ví dụ. (55 + 434) / 4 hoặc =Math.sin(Math.PI/2)..." #. Description of the 'Incoming Server' (Data) field in DocType 'Email Account' #. Description of the 'Incoming Server' (Data) field in DocType 'Email Domain' #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "e.g. pop.gmail.com / imap.gmail.com" -msgstr "" +msgstr "ví dụ. pop.gmail.com / imap.gmail.com" #. Description of the 'Default Incoming' (Check) field in DocType 'Email #. Account' #: frappe/email/doctype/email_account/email_account.json msgid "e.g. replies@yourcomany.com. All replies will come to this inbox." -msgstr "" +msgstr "ví dụ. reply@yourcomany.com. Tất cả các câu trả lời sẽ đến hộp thư đến này." #. Description of the 'Outgoing Server' (Data) field in DocType 'Email Account' #. Description of the 'Outgoing Server' (Data) field in DocType 'Email Domain' #: frappe/email/doctype/email_account/email_account.json #: frappe/email/doctype/email_domain/email_domain.json msgid "e.g. smtp.gmail.com" -msgstr "" +msgstr "ví dụ. smtp.gmail.com" #: frappe/custom/doctype/custom_field/custom_field.js:98 msgid "e.g.:" @@ -31113,12 +31153,12 @@ msgstr "" #: frappe/permissions.py:437 frappe/permissions.py:448 msgid "empty" -msgstr "" +msgstr "trống" -#: frappe/public/js/frappe/form/controls/link.js:588 +#: frappe/public/js/frappe/form/controls/link.js:599 msgctxt "Comparison value is empty" msgid "empty" -msgstr "" +msgstr "trống" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:41 msgid "esc" @@ -31128,7 +31168,7 @@ msgstr "" #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "export" -msgstr "" +msgstr "xuất khẩu" #. Option for the 'Social Link Type' (Select) field in DocType 'Social Link #. Settings' @@ -31139,91 +31179,91 @@ msgstr "" #. Option for the 'Status' (Select) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "failed" -msgstr "" +msgstr "thất bại" #. Option for the 'Social Login Provider' (Select) field in DocType 'Social #. Login Key' #: frappe/integrations/doctype/social_login_key/social_login_key.json msgid "fairlogin" -msgstr "" +msgstr "đăng nhập công bằng" #. Option for the 'Status' (Select) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "finished" -msgstr "" +msgstr "xong" #. Option for the 'Background Color' (Select) field in DocType 'Desktop Icon' #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/desktop_icon/desktop_icon.json #: frappe/desk/doctype/workspace/workspace.json msgid "gray" -msgstr "" +msgstr "màu xám" #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "green" -msgstr "" +msgstr "màu xanh lá cây" #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "grey" -msgstr "" +msgstr "màu xám" #: frappe/utils/backups.py:399 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:1196 +#: frappe/public/js/frappe/utils/utils.js:1207 msgctxt "Hours (Field: Duration)" msgid "h" -msgstr "" +msgstr "h" #: frappe/public/js/frappe/ui/toolbar/search_utils.js:308 msgid "hub" -msgstr "" +msgstr "trung tâm" #. Label of the icon (Data) field in DocType 'Page' #: frappe/core/doctype/page/page.json msgid "icon" -msgstr "" +msgstr "biểu tượng" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "import" -msgstr "" +msgstr "nhập liệu" -#: frappe/public/js/frappe/form/controls/link.js:625 -#: frappe/public/js/frappe/form/controls/link.js:630 -#: frappe/public/js/frappe/form/controls/link.js:643 -#: frappe/public/js/frappe/form/controls/link.js:650 +#: frappe/public/js/frappe/form/controls/link.js:636 +#: frappe/public/js/frappe/form/controls/link.js:641 +#: frappe/public/js/frappe/form/controls/link.js:654 +#: frappe/public/js/frappe/form/controls/link.js:661 msgid "is disabled" -msgstr "" +msgstr "bị vô hiệu hóa" -#: frappe/public/js/frappe/form/controls/link.js:624 -#: frappe/public/js/frappe/form/controls/link.js:631 -#: frappe/public/js/frappe/form/controls/link.js:644 -#: frappe/public/js/frappe/form/controls/link.js:649 +#: frappe/public/js/frappe/form/controls/link.js:635 +#: frappe/public/js/frappe/form/controls/link.js:642 +#: frappe/public/js/frappe/form/controls/link.js:655 +#: frappe/public/js/frappe/form/controls/link.js:660 msgid "is enabled" -msgstr "" +msgstr "được kích hoạt" #: frappe/templates/signup.html:11 frappe/www/login.html:11 msgid "jane@example.com" -msgstr "" +msgstr "jane@example.com" #: frappe/public/js/frappe/utils/pretty_date.js:46 msgid "just now" -msgstr "" +msgstr "vừa rồi" #: frappe/desk/desktop.py:255 frappe/desk/query_report.py:292 msgid "label" -msgstr "" +msgstr "nhãn" #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "light-blue" -msgstr "" +msgstr "xanh nhạt" #. Option for the 'Social Link Type' (Select) field in DocType 'Social Link #. Settings' @@ -31233,28 +31273,28 @@ msgstr "" #: frappe/www/third_party_apps.html:43 msgid "logged in" -msgstr "" +msgstr "đã đăng nhập" #: frappe/website/doctype/web_form/web_form.js:382 msgid "login_required" -msgstr "" +msgstr "đăng nhập_required" #. Option for the 'Queue' (Select) field in DocType 'RQ Job' #. Option for the 'Queue Type(s)' (Select) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_job/rq_job.json #: frappe/core/doctype/rq_worker/rq_worker.json msgid "long" -msgstr "" +msgstr "dài" #: frappe/public/js/frappe/form/controls/duration.js:221 -#: frappe/public/js/frappe/utils/utils.js:1200 +#: frappe/public/js/frappe/utils/utils.js:1211 msgctxt "Minutes (Field: Duration)" msgid "m" msgstr "" #: frappe/model/rename_doc.py:215 msgid "merged {0} into {1}" -msgstr "" +msgstr "đã sáp nhập {0} vào {1}" #. Option for the 'Date Format' (Select) field in DocType 'Language' #. Option for the 'Date Format' (Select) field in DocType 'System Settings' @@ -31268,24 +31308,24 @@ msgstr "" #: frappe/core/doctype/language/language.json #: frappe/core/doctype/system_settings/system_settings.json msgid "mm/dd/yyyy" -msgstr "" +msgstr "tháng/ngày/năm" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:247 msgid "module name..." -msgstr "" +msgstr "tên mô-đun..." #: frappe/public/js/frappe/ui/toolbar/search_utils.js:171 msgid "new" -msgstr "" +msgstr "mới" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:227 msgid "new type of document" -msgstr "" +msgstr "loại tài liệu mới" #. Label of the no_failed (Int) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json msgid "no failed attempts" -msgstr "" +msgstr "không có lần thất bại nào" #. Label of the nonce (Data) field in DocType 'OAuth Authorization Code' #: frappe/integrations/doctype/oauth_authorization_code/oauth_authorization_code.json @@ -31295,125 +31335,125 @@ msgstr "" #. Label of the notified (Check) field in DocType 'Reminder' #: frappe/automation/doctype/reminder/reminder.json msgid "notified" -msgstr "" +msgstr "đã thông báo" #: frappe/public/js/frappe/utils/pretty_date.js:25 msgid "now" -msgstr "" +msgstr "bây giờ" #: frappe/public/js/frappe/form/grid_pagination.js:116 msgid "of" -msgstr "" +msgstr "của" #. Label of the old_parent (Data) field in DocType 'File' #: frappe/core/doctype/file/file.json msgid "old_parent" -msgstr "" +msgstr "old_parent" #. Option for the 'Doc Event' (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "on_cancel" -msgstr "" +msgstr "on_cancel" #. Option for the 'Doc Event' (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "on_change" -msgstr "" +msgstr "on_change" #. Option for the 'Doc Event' (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "on_submit" -msgstr "" +msgstr "on_submit" #. Option for the 'Doc Event' (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "on_trash" -msgstr "" +msgstr "on_trash" #. Option for the 'Doc Event' (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "on_update" -msgstr "" +msgstr "on_update" #. Option for the 'Doc Event' (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "on_update_after_submit" -msgstr "" +msgstr "on_update_after_submit" -#: frappe/public/js/frappe/utils/utils.js:393 frappe/www/login.html:90 +#: frappe/public/js/frappe/utils/utils.js:404 frappe/www/login.html:90 #: frappe/www/login.py:112 msgid "or" -msgstr "" +msgstr "hoặc" #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "orange" -msgstr "" +msgstr "màu cam" #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "pink" -msgstr "" +msgstr "hồng" #. Option for the 'Code challenge method' (Select) field in DocType 'OAuth #. Authorization Code' #: frappe/integrations/doctype/oauth_authorization_code/oauth_authorization_code.json msgid "plain" -msgstr "" +msgstr "đồng bằng" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "print" -msgstr "" +msgstr "in" #. Label of the processlist (HTML) field in DocType 'System Console' #: frappe/desk/doctype/system_console/system_console.json msgid "processlist" -msgstr "" +msgstr "danh sách quy trình" #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "purple" -msgstr "" +msgstr "màu tím" #. Option for the 'Status' (Select) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "queued" -msgstr "" +msgstr "xếp hàng" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "read" -msgstr "" +msgstr "đọc" #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "red" -msgstr "" +msgstr "đỏ" #: frappe/model/rename_doc.py:217 msgid "renamed from {0} to {1}" -msgstr "" +msgstr "được đổi tên từ {0} thành {1}" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "report" -msgstr "" +msgstr "báo cáo" #. Label of the response (HTML) field in DocType 'Custom Role' #: frappe/core/doctype/custom_role/custom_role.json msgid "response" -msgstr "" +msgstr "phản hồi" #: frappe/core/doctype/deleted_document/deleted_document.py:61 msgid "restored {0} as {1}" -msgstr "" +msgstr "đã khôi phục {0} thành {1}" #: frappe/public/js/frappe/form/controls/duration.js:222 -#: frappe/public/js/frappe/utils/utils.js:1204 +#: frappe/public/js/frappe/utils/utils.js:1215 msgctxt "Seconds (Field: Duration)" msgid "s" msgstr "" @@ -31422,56 +31462,56 @@ msgstr "" #. Authorization Code' #: frappe/integrations/doctype/oauth_authorization_code/oauth_authorization_code.json msgid "s256" -msgstr "" +msgstr "s256" #. Option for the 'Status' (Select) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "scheduled" -msgstr "" +msgstr "theo lịch trình" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "select" -msgstr "" +msgstr "chọn" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "share" -msgstr "" +msgstr "chia sẻ" #. Option for the 'Queue' (Select) field in DocType 'RQ Job' #. Option for the 'Queue Type(s)' (Select) field in DocType 'RQ Worker' #: frappe/core/doctype/rq_job/rq_job.json #: frappe/core/doctype/rq_worker/rq_worker.json msgid "short" -msgstr "" +msgstr "ngắn" #: frappe/public/js/frappe/widgets/number_card_widget.js:310 msgid "since last month" -msgstr "" +msgstr "kể từ tháng trước" #: frappe/public/js/frappe/widgets/number_card_widget.js:309 msgid "since last week" -msgstr "" +msgstr "kể từ tuần trước" #: frappe/public/js/frappe/widgets/number_card_widget.js:311 msgid "since last year" -msgstr "" +msgstr "kể từ năm ngoái" #: frappe/public/js/frappe/widgets/number_card_widget.js:308 msgid "since yesterday" -msgstr "" +msgstr "từ hôm qua" #. Option for the 'Status' (Select) field in DocType 'RQ Job' #: frappe/core/doctype/rq_job/rq_job.json msgid "started" -msgstr "" +msgstr "bắt đầu" #: frappe/desk/page/setup_wizard/setup_wizard.js:201 msgid "starting the setup..." -msgstr "" +msgstr "bắt đầu thiết lập..." #. Description of the 'Group Object Class' (Data) field in DocType 'LDAP #. Settings' @@ -31495,35 +31535,35 @@ msgstr "" #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "submit" -msgstr "" +msgstr "gửi" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:242 msgid "tag name..., e.g. #tag" -msgstr "" +msgstr "tên thẻ..., ví dụ: #tag" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:237 msgid "text in document type" -msgstr "" +msgstr "văn bản trong loại tài liệu" #: frappe/public/js/frappe/form/controls/data.js:36 msgid "this form" -msgstr "" +msgstr "mẫu này" #: frappe/tests/test_translate.py:174 msgid "this shouldn't break" -msgstr "" +msgstr "cái này không nên hỏng" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:41 msgid "to close" -msgstr "" +msgstr "đóng" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:41 msgid "to navigate" -msgstr "" +msgstr "để điều hướng" #: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:41 msgid "to select" -msgstr "" +msgstr "để chọn" #: frappe/templates/emails/download_data.html:9 msgid "to your browser" @@ -31537,33 +31577,33 @@ msgstr "" #: frappe/public/js/frappe/change_log.html:7 msgid "updated to {0}" -msgstr "" +msgstr "đã cập nhật lên {0}" #: frappe/public/js/frappe/ui/filters/filter.js:360 msgid "use % as wildcard" -msgstr "" +msgstr "sử dụng % làm ký tự đại diện" #: frappe/public/js/frappe/ui/filters/filter.js:359 msgid "values separated by commas" -msgstr "" +msgstr "các giá trị được phân tách bằng dấu phẩy" #. Label of the version_table (HTML) field in DocType 'Audit Trail' #: frappe/core/doctype/audit_trail/audit_trail.json msgid "version_table" -msgstr "" +msgstr "phiên bản_bảng" #: frappe/automation/doctype/assignment_rule/assignment_rule.py:382 msgid "via Assignment Rule" -msgstr "" +msgstr "thông qua Quy tắc phân công" #: frappe/automation/doctype/auto_repeat/auto_repeat.py:264 msgid "via Auto Repeat" -msgstr "" +msgstr "thông qua Tự động lặp lại" #: frappe/core/doctype/data_import/importer.py:271 #: frappe/core/doctype/data_import/importer.py:292 msgid "via Data Import" -msgstr "" +msgstr "thông qua Nhập dữ liệu" #. Description of the 'Add Video Conferencing' (Check) field in DocType 'Event' #: frappe/desk/doctype/event/event.json @@ -31572,11 +31612,11 @@ msgstr "" #: frappe/email/doctype/notification/notification.py:410 msgid "via Notification" -msgstr "" +msgstr "qua Thông báo" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:17 msgid "via {0}" -msgstr "" +msgstr "qua {0}" #. Option for the 'Code Editor Type' (Select) field in DocType 'User' #: frappe/core/doctype/user/user.json @@ -31590,13 +31630,13 @@ msgstr "" #: frappe/templates/includes/oauth_confirmation.html:5 msgid "wants to access the following details from your account" -msgstr "" +msgstr "muốn truy cập các chi tiết sau từ tài khoản của bạn" #. Description of the 'Popover Element' (Check) field in DocType 'Form Tour #. Step' #: frappe/desk/doctype/form_tour_step/form_tour_step.json msgid "when clicked on element it will focus popover if present." -msgstr "" +msgstr "khi nhấp vào phần tử, nó sẽ tập trung vào cửa sổ bật lên nếu có." #. Option for the 'PDF Generator' (Select) field in DocType 'Print Format' #. Option for the 'PDF Generator' (Select) field in DocType 'Print Settings' @@ -31612,22 +31652,22 @@ msgstr "" #. Option for the 'Doc Event' (Select) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json msgid "workflow_transition" -msgstr "" +msgstr "quy trình làm việc_transition" #. Option for the 'Permission Type' (Select) field in DocType 'Permission #. Inspector' #: frappe/core/doctype/permission_inspector/permission_inspector.json msgid "write" -msgstr "" +msgstr "viết" #. Option for the 'Indicator Color' (Select) field in DocType 'Workspace' #: frappe/desk/doctype/workspace/workspace.json msgid "yellow" -msgstr "" +msgstr "màu vàng" #: frappe/public/js/frappe/utils/pretty_date.js:58 msgid "yesterday" -msgstr "" +msgstr "hôm qua" #. Option for the 'Date Format' (Select) field in DocType 'Language' #. Option for the 'Date Format' (Select) field in DocType 'System Settings' @@ -31639,54 +31679,54 @@ msgstr "" #: frappe/desk/doctype/event/event.js:87 #: frappe/public/js/frappe/form/footer/form_timeline.js:547 msgid "{0}" -msgstr "" +msgstr "{0}" #: frappe/public/js/frappe/ui/toolbar/search_utils.js:204 msgid "{0} ${skip_list ? \"\" : type}" -msgstr "" +msgstr "{0} ${skip_list ? \"\" : loại}" #: frappe/public/js/frappe/ui/toolbar/search_utils.js:209 msgid "{0} ${type}" -msgstr "" +msgstr "{0} ${type}" #: frappe/public/js/frappe/data_import/data_exporter.js:80 #: frappe/public/js/frappe/views/gantt/gantt_view.js:54 msgid "{0} ({1})" -msgstr "" +msgstr "{0} ({1})" #: frappe/public/js/frappe/data_import/data_exporter.js:77 msgid "{0} ({1}) (1 row mandatory)" -msgstr "" +msgstr "{0} ({1}) (bắt buộc 1 hàng)" #: frappe/public/js/frappe/views/gantt/gantt_view.js:53 msgid "{0} ({1}) - {2}%" -msgstr "" +msgstr "{0} ({1}) - {2}%" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:448 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:452 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:439 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:443 msgid "{0} = {1}" -msgstr "" +msgstr "{0} = {1}" #: frappe/public/js/frappe/views/calendar/calendar.js:30 msgid "{0} Calendar" -msgstr "" +msgstr "{0} Lịch" -#: frappe/public/js/frappe/views/reports/report_view.js:569 +#: frappe/public/js/frappe/views/reports/report_view.js:571 msgid "{0} Chart" -msgstr "" +msgstr "{0} Biểu đồ" #: frappe/core/page/dashboard_view/dashboard_view.js:67 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:361 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:362 #: frappe/public/js/frappe/views/dashboard/dashboard_view.js:12 msgid "{0} Dashboard" -msgstr "" +msgstr "{0} Trang tổng quan" #: frappe/public/js/frappe/form/grid_row.js:488 #: frappe/public/js/frappe/list/list_settings.js:225 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:178 msgid "{0} Fields" -msgstr "" +msgstr "{0} Trường" #: frappe/integrations/doctype/google_calendar/google_calendar.py:376 msgid "{0} Google Calendar Events synced." @@ -31698,47 +31738,47 @@ msgstr "" #: frappe/public/js/frappe/form/footer/form_timeline.js:464 msgid "{0} Liked" -msgstr "" +msgstr "{0} Đã thích" #: frappe/public/js/frappe/widgets/chart_widget.js:358 frappe/www/portal.html:8 msgid "{0} List" -msgstr "" +msgstr "{0} Danh sách" #: frappe/public/js/frappe/list/list_settings.js:33 msgid "{0} List View Settings" -msgstr "" +msgstr "{0} Cài đặt chế độ xem danh sách" #: frappe/public/js/frappe/utils/pretty_date.js:37 msgid "{0} M" -msgstr "" +msgstr "{0} M" #: frappe/public/js/frappe/views/map/map_view.js:14 msgid "{0} Map" -msgstr "" +msgstr "{0} Bản đồ" #: frappe/public/js/frappe/form/quick_entry.js:134 msgid "{0} Name" -msgstr "" +msgstr "{0} Tên" -#: frappe/model/base_document.py:1273 +#: frappe/model/base_document.py:1286 msgid "{0} Not allowed to change {1} after submission from {2} to {3}" -msgstr "" +msgstr "{0} Không được phép thay đổi {1} sau khi gửi từ {2} thành {3}" #: frappe/public/js/frappe/widgets/chart_widget.js:366 msgid "{0} Report" -msgstr "" +msgstr "{0} Báo cáo" #: frappe/public/js/frappe/views/reports/query_report.js:980 msgid "{0} Reports" -msgstr "" +msgstr "{0} Báo cáo" #: frappe/public/js/frappe/views/kanban/kanban_settings.js:26 msgid "{0} Settings" -msgstr "" +msgstr "{0} cài đặt" #: frappe/public/js/frappe/views/treeview.js:153 msgid "{0} Tree" -msgstr "" +msgstr "{0} Cây" #: frappe/public/js/frappe/form/footer/form_timeline.js:128 #: frappe/public/js/frappe/form/sidebar/form_sidebar.js:152 @@ -31747,27 +31787,27 @@ msgstr "" #: frappe/public/js/frappe/form/link_selector.js:234 msgid "{0} added" -msgstr "" +msgstr "{0} đã thêm" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:273 msgid "{0} added 1 row to {1}" -msgstr "" +msgstr "{0} đã thêm 1 hàng vào {1}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:251 msgid "{0} added {1} rows to {2}" -msgstr "" +msgstr "{0} đã thêm {1} hàng vào {2}" #: frappe/public/js/frappe/form/controls/data.js:215 msgid "{0} already exists. Select another name" -msgstr "" +msgstr "{0} đã tồn tại. Chọn tên khác" #: frappe/email/doctype/email_unsubscribe/email_unsubscribe.py:36 msgid "{0} already unsubscribed" -msgstr "" +msgstr "{0} đã hủy đăng ký" #: frappe/email/doctype/email_unsubscribe/email_unsubscribe.py:49 msgid "{0} already unsubscribed for {1} {2}" -msgstr "" +msgstr "{0} đã hủy đăng ký {1} {2}" #: frappe/utils/data.py:1770 msgid "{0} and {1}" @@ -31783,33 +31823,33 @@ msgstr "" #: frappe/desk/form/assign_to.py:286 msgid "{0} assigned a new task {1} {2} to you" -msgstr "" +msgstr "{0} đã giao nhiệm vụ mới {1} {2} cho bạn" #: frappe/desk/doctype/todo/todo.py:48 msgid "{0} assigned {1}: {2}" -msgstr "" +msgstr "{0} được chỉ định {1}: {2}" #: frappe/public/js/frappe/form/footer/form_timeline.js:415 msgctxt "Form timeline" msgid "{0} attached {1}" -msgstr "" +msgstr "{0} đính kèm {1}" #: frappe/core/doctype/system_settings/system_settings.py:159 msgid "{0} can not be more than {1}" -msgstr "" +msgstr "{0} không được nhiều hơn {1}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:77 msgid "{0} cancelled this document" -msgstr "" +msgstr "{0} đã hủy tài liệu này" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:68 msgctxt "Form timeline" msgid "{0} cancelled this document {1}" -msgstr "" +msgstr "{0} đã hủy tài liệu này {1}" #: frappe/model/document.py:582 msgid "{0} cannot be amended because it is not cancelled. Please cancel the document before creating an amendment." -msgstr "" +msgstr "{0} không thể sửa đổi được vì nó chưa bị hủy. Vui lòng hủy tài liệu trước khi tạo sửa đổi." #: frappe/public/js/form_builder/store.js:213 msgid "{0} cannot be hidden and mandatory without any default value" @@ -31817,45 +31857,45 @@ msgstr "" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:128 msgid "{0} changed the value of {1}" -msgstr "" +msgstr "{0} đã thay đổi giá trị của {1}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:119 msgid "{0} changed the value of {1} {2}" -msgstr "" +msgstr "{0} đã thay đổi giá trị của {1} {2}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:199 msgid "{0} changed the values for {1}" -msgstr "" +msgstr "{0} đã thay đổi giá trị của {1}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:190 msgid "{0} changed the values for {1} {2}" -msgstr "" +msgstr "{0} đã thay đổi giá trị của {1} {2}" #: frappe/public/js/frappe/form/footer/form_timeline.js:444 msgctxt "Form timeline" msgid "{0} changed {1} to {2}" -msgstr "" +msgstr "{0} đã thay đổi {1} thành {2}" -#: frappe/core/doctype/doctype/doctype.py:1634 +#: frappe/core/doctype/doctype/doctype.py:1637 msgid "{0} contains an invalid Fetch From expression, Fetch From can't be self-referential." -msgstr "" +msgstr "{0} chứa biểu thức Tìm nạp từ không hợp lệ, Tìm nạp từ không thể tự tham chiếu." -#: frappe/public/js/frappe/form/controls/link.js:663 +#: frappe/public/js/frappe/form/controls/link.js:674 msgid "{0} contains {1}" -msgstr "" +msgstr "{0} chứa {1}" #: frappe/public/js/frappe/views/interaction.js:261 msgid "{0} created successfully" -msgstr "" +msgstr "{0} được tạo thành công" #: frappe/public/js/frappe/form/footer/form_timeline.js:141 msgid "{0} created this" -msgstr "" +msgstr "{0} đã tạo cái này" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:348 msgctxt "Form timeline" msgid "{0} created this document {1}" -msgstr "" +msgstr "{0} đã tạo tài liệu này {1}" #: frappe/public/js/frappe/utils/pretty_date.js:33 msgid "{0} d" @@ -31863,20 +31903,20 @@ msgstr "" #: frappe/public/js/frappe/utils/pretty_date.js:60 msgid "{0} days ago" -msgstr "" +msgstr "{0} ngày trước" -#: frappe/public/js/frappe/form/controls/link.js:665 +#: frappe/public/js/frappe/form/controls/link.js:676 msgid "{0} does not contain {1}" -msgstr "" +msgstr "{0} không chứa {1}" #: frappe/website/doctype/website_settings/website_settings.py:96 #: frappe/website/doctype/website_settings/website_settings.py:116 msgid "{0} does not exist in row {1}" -msgstr "" +msgstr "{0} không tồn tại trong hàng {1}" -#: frappe/public/js/frappe/form/controls/link.js:638 +#: frappe/public/js/frappe/form/controls/link.js:649 msgid "{0} equals {1}" -msgstr "" +msgstr "{0} bằng {1}" #: frappe/database/mariadb/schema.py:141 frappe/database/postgres/schema.py:187 msgid "{0} field cannot be set as unique in {1}, as there are non-unique existing values" @@ -31888,62 +31928,62 @@ msgstr "" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:101 msgid "{0} from {1} to {2}" -msgstr "" +msgstr "{0} từ {1} đến {2}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:170 msgid "{0} from {1} to {2} in row #{3}" -msgstr "" +msgstr "{0} từ {1} đến {2} ở hàng #{3}" #: frappe/public/js/frappe/utils/pretty_date.js:29 msgid "{0} h" -msgstr "" +msgstr "{0} giờ" #: frappe/core/doctype/user_permission/user_permission.py:77 msgid "{0} has already assigned default value for {1}." -msgstr "" +msgstr "{0} đã gán giá trị mặc định cho {1}." -#: frappe/database/query.py:1202 +#: frappe/database/query.py:1217 msgid "{0} has invalid backtick notation: {1}" -msgstr "" +msgstr "{0} có ký hiệu dấu ngược không hợp lệ: {1}" #: frappe/email/queue.py:124 msgid "{0} has left the conversation in {1} {2}" -msgstr "" +msgstr "{0} đã rời khỏi cuộc trò chuyện trong {1} {2}" #: frappe/public/js/frappe/utils/pretty_date.js:54 msgid "{0} hours ago" -msgstr "" +msgstr "{0} giờ trước" -#: frappe/website/doctype/web_form/templates/web_form.html:155 +#: frappe/website/doctype/web_form/templates/web_form.html:164 msgid "{0} if you are not redirected within {1} seconds" -msgstr "" +msgstr "{0} nếu bạn không được chuyển hướng trong vòng {1} giây" #: frappe/website/doctype/website_settings/website_settings.py:102 #: frappe/website/doctype/website_settings/website_settings.py:122 msgid "{0} in row {1} cannot have both URL and child items" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:704 +#: frappe/public/js/frappe/form/controls/link.js:715 msgid "{0} is a descendant of {1}" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:952 +#: frappe/core/doctype/doctype/doctype.py:955 msgid "{0} is a mandatory field" msgstr "" -#: frappe/core/doctype/file/file.py:576 +#: frappe/core/doctype/file/file.py:577 msgid "{0} is a not a valid zip file" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:668 +#: frappe/public/js/frappe/form/controls/link.js:679 msgid "{0} is after {1}" -msgstr "" +msgstr "{0} đứng sau {1}" -#: frappe/public/js/frappe/form/controls/link.js:706 +#: frappe/public/js/frappe/form/controls/link.js:717 msgid "{0} is an ancestor of {1}" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1647 +#: frappe/core/doctype/doctype/doctype.py:1650 msgid "{0} is an invalid Data field." msgstr "" @@ -31951,16 +31991,16 @@ msgstr "" msgid "{0} is an invalid email address in 'Recipients'" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:673 +#: frappe/public/js/frappe/form/controls/link.js:684 msgid "{0} is before {1}" -msgstr "" +msgstr "{0} ở trước {1}" -#: frappe/public/js/frappe/form/controls/link.js:702 +#: frappe/public/js/frappe/form/controls/link.js:713 msgid "{0} is between {1}" -msgstr "" +msgstr "{0} nằm trong khoảng {1}" -#: frappe/public/js/frappe/form/controls/link.js:699 -#: frappe/public/js/frappe/views/reports/report_view.js:1464 +#: frappe/public/js/frappe/form/controls/link.js:710 +#: frappe/public/js/frappe/views/reports/report_view.js:1470 msgid "{0} is between {1} and {2}" msgstr "" @@ -31969,53 +32009,49 @@ msgstr "" msgid "{0} is currently {1}" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:636 -#: frappe/public/js/frappe/form/controls/link.js:654 +#: frappe/public/js/frappe/form/controls/link.js:647 +#: frappe/public/js/frappe/form/controls/link.js:665 msgid "{0} is disabled" -msgstr "" +msgstr "{0} bị tắt" -#: frappe/public/js/frappe/form/controls/link.js:635 -#: frappe/public/js/frappe/form/controls/link.js:655 +#: frappe/public/js/frappe/form/controls/link.js:646 +#: frappe/public/js/frappe/form/controls/link.js:666 msgid "{0} is enabled" -msgstr "" +msgstr "{0} được bật" -#: frappe/public/js/frappe/views/reports/report_view.js:1433 +#: frappe/public/js/frappe/views/reports/report_view.js:1439 msgid "{0} is equal to {1}" -msgstr "" +msgstr "{0} bằng {1}" -#: frappe/public/js/frappe/form/controls/link.js:680 -#: frappe/public/js/frappe/views/reports/report_view.js:1453 +#: frappe/public/js/frappe/form/controls/link.js:691 +#: frappe/public/js/frappe/views/reports/report_view.js:1459 msgid "{0} is greater than or equal to {1}" -msgstr "" +msgstr "{0} lớn hơn hoặc bằng {1}" -#: frappe/public/js/frappe/form/controls/link.js:670 -#: frappe/public/js/frappe/views/reports/report_view.js:1443 +#: frappe/public/js/frappe/form/controls/link.js:681 +#: frappe/public/js/frappe/views/reports/report_view.js:1449 msgid "{0} is greater than {1}" -msgstr "" +msgstr "{0} lớn hơn {1}" -#: frappe/public/js/frappe/form/controls/link.js:685 -#: frappe/public/js/frappe/views/reports/report_view.js:1458 +#: frappe/public/js/frappe/form/controls/link.js:696 +#: frappe/public/js/frappe/views/reports/report_view.js:1464 msgid "{0} is less than or equal to {1}" -msgstr "" +msgstr "{0} nhỏ hơn hoặc bằng {1}" -#: frappe/public/js/frappe/form/controls/link.js:675 -#: frappe/public/js/frappe/views/reports/report_view.js:1448 +#: frappe/public/js/frappe/form/controls/link.js:686 +#: frappe/public/js/frappe/views/reports/report_view.js:1454 msgid "{0} is less than {1}" -msgstr "" +msgstr "{0} nhỏ hơn {1}" -#: frappe/public/js/frappe/views/reports/report_view.js:1483 +#: frappe/public/js/frappe/views/reports/report_view.js:1489 msgid "{0} is like {1}" -msgstr "" +msgstr "{0} giống như {1}" -#: frappe/email/doctype/email_account/email_account.py:193 +#: frappe/email/doctype/email_account/email_account.py:194 msgid "{0} is mandatory" msgstr "" -#: frappe/database/query.py:860 -msgid "{0} is not a child table of {1}" -msgstr "" - -#: frappe/public/js/frappe/form/controls/link.js:708 +#: frappe/public/js/frappe/form/controls/link.js:719 msgid "{0} is not a descendant of {1}" msgstr "" @@ -32072,7 +32108,7 @@ msgstr "" msgid "{0} is not a valid report format. Report format should one of the following {1}" msgstr "" -#: frappe/core/doctype/file/file.py:556 +#: frappe/core/doctype/file/file.py:557 msgid "{0} is not a zip file" msgstr "" @@ -32080,47 +32116,47 @@ msgstr "" msgid "{0} is not an allowed role for {1}" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:710 +#: frappe/public/js/frappe/form/controls/link.js:721 msgid "{0} is not an ancestor of {1}" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:657 -#: frappe/public/js/frappe/views/reports/report_view.js:1438 +#: frappe/public/js/frappe/form/controls/link.js:668 +#: frappe/public/js/frappe/views/reports/report_view.js:1444 msgid "{0} is not equal to {1}" -msgstr "" +msgstr "{0} không bằng {1}" -#: frappe/public/js/frappe/views/reports/report_view.js:1485 +#: frappe/public/js/frappe/views/reports/report_view.js:1491 msgid "{0} is not like {1}" -msgstr "" +msgstr "{0} không giống {1}" -#: frappe/public/js/frappe/form/controls/link.js:661 -#: frappe/public/js/frappe/views/reports/report_view.js:1479 +#: frappe/public/js/frappe/form/controls/link.js:672 +#: frappe/public/js/frappe/views/reports/report_view.js:1485 msgid "{0} is not one of {1}" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:691 -#: frappe/public/js/frappe/views/reports/report_view.js:1489 +#: frappe/public/js/frappe/form/controls/link.js:702 +#: frappe/public/js/frappe/views/reports/report_view.js:1495 msgid "{0} is not set" -msgstr "" +msgstr "{0} chưa được đặt" #: frappe/printing/doctype/print_format/print_format.py:176 msgid "{0} is now default print format for {1} doctype" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:678 +#: frappe/public/js/frappe/form/controls/link.js:689 msgid "{0} is on or after {1}" -msgstr "" +msgstr "{0} ở trên hoặc sau {1}" -#: frappe/public/js/frappe/form/controls/link.js:683 +#: frappe/public/js/frappe/form/controls/link.js:694 msgid "{0} is on or before {1}" -msgstr "" +msgstr "{0} ở trên hoặc trước {1}" -#: frappe/public/js/frappe/form/controls/link.js:659 -#: frappe/public/js/frappe/views/reports/report_view.js:1472 +#: frappe/public/js/frappe/form/controls/link.js:670 +#: frappe/public/js/frappe/views/reports/report_view.js:1478 msgid "{0} is one of {1}" msgstr "" -#: frappe/email/doctype/email_account/email_account.py:304 +#: frappe/email/doctype/email_account/email_account.py:305 #: frappe/model/naming.py:224 #: frappe/printing/doctype/print_format/print_format.py:101 #: frappe/printing/doctype/print_format/print_format.py:104 @@ -32128,81 +32164,81 @@ msgstr "" msgid "{0} is required" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:688 -#: frappe/public/js/frappe/views/reports/report_view.js:1488 +#: frappe/public/js/frappe/form/controls/link.js:699 +#: frappe/public/js/frappe/views/reports/report_view.js:1494 msgid "{0} is set" -msgstr "" +msgstr "{0} được đặt" -#: frappe/public/js/frappe/form/controls/link.js:712 -#: frappe/public/js/frappe/views/reports/report_view.js:1467 +#: frappe/public/js/frappe/form/controls/link.js:723 +#: frappe/public/js/frappe/views/reports/report_view.js:1473 msgid "{0} is within {1}" -msgstr "" +msgstr "{0} nằm trong {1}" -#: frappe/public/js/frappe/form/controls/link.js:693 +#: frappe/public/js/frappe/form/controls/link.js:704 msgid "{0} is {1}" msgstr "" -#: frappe/public/js/frappe/list/list_view.js:1854 +#: frappe/public/js/frappe/list/list_view.js:1865 msgid "{0} items selected" -msgstr "" +msgstr "{0} mục đã chọn" #: frappe/core/doctype/user/user.py:1461 msgid "{0} just impersonated as you. They gave this reason: {1}" -msgstr "" +msgstr "{0} vừa mạo danh bạn. Họ đưa ra lý do thế này: {1}" #: frappe/public/js/frappe/form/footer/form_timeline.js:152 msgid "{0} last edited this" -msgstr "" +msgstr "{0} chỉnh sửa lần cuối" #: frappe/core/doctype/activity_log/feed.py:13 msgid "{0} logged in" -msgstr "" +msgstr "{0} đăng nhập" #: frappe/core/doctype/activity_log/feed.py:19 msgid "{0} logged out: {1}" -msgstr "" +msgstr "{0} đăng xuất: {1}" #: frappe/public/js/frappe/utils/pretty_date.js:27 msgid "{0} m" -msgstr "" +msgstr "{0} phút" #: frappe/desk/notifications.py:407 msgid "{0} mentioned you in a comment in {1} {2}" -msgstr "" +msgstr "{0} đã đề cập đến bạn trong nhận xét trong {1} {2}" #: frappe/public/js/frappe/utils/pretty_date.js:50 msgid "{0} minutes ago" -msgstr "" +msgstr "{0} phút trước" #: frappe/public/js/frappe/utils/pretty_date.js:68 msgid "{0} months ago" -msgstr "" +msgstr "{0} tháng trước" #: frappe/model/document.py:1860 msgid "{0} must be after {1}" -msgstr "" +msgstr "{0} phải sau {1}" #: frappe/model/document.py:1612 msgid "{0} must be beginning with '{1}'" -msgstr "" +msgstr "{0} phải bắt đầu bằng '{1}'" #: frappe/model/document.py:1614 msgid "{0} must be equal to '{1}'" -msgstr "" +msgstr "{0} phải bằng '{1}'" #: frappe/model/document.py:1610 msgid "{0} must be none of {1}" -msgstr "" +msgstr "{0} không được phép nào trong số {1}" #: frappe/model/document.py:1608 frappe/utils/csvutils.py:161 msgid "{0} must be one of {1}" msgstr "" -#: frappe/model/base_document.py:991 +#: frappe/model/base_document.py:1004 msgid "{0} must be set first" -msgstr "" +msgstr "{0} phải được đặt trước" -#: frappe/model/base_document.py:846 +#: frappe/model/base_document.py:859 msgid "{0} must be unique" msgstr "" @@ -32220,122 +32256,122 @@ msgstr "" #: frappe/model/rename_doc.py:394 msgid "{0} not allowed to be renamed" -msgstr "" +msgstr "{0} không được phép đổi tên" -#: frappe/core/doctype/report/report.py:433 -#: frappe/public/js/frappe/list/list_view.js:1231 +#: frappe/core/doctype/report/report.py:435 +#: frappe/public/js/frappe/list/list_view.js:1242 msgid "{0} of {1}" -msgstr "" +msgstr "{0} trong số {1}" -#: frappe/public/js/frappe/list/list_view.js:1233 +#: frappe/public/js/frappe/list/list_view.js:1244 msgid "{0} of {1} ({2} rows with children)" -msgstr "" +msgstr "{0} trong số {1} ({2} hàng có con)" #: frappe/utils/data.py:1571 msgctxt "Money in words" msgid "{0} only." -msgstr "" +msgstr "{0} chỉ." #: frappe/utils/data.py:1752 msgid "{0} or {1}" -msgstr "" +msgstr "{0} hoặc {1}" #: frappe/core/doctype/user_permission/user_permission_list.js:177 msgid "{0} record deleted" -msgstr "" +msgstr "{0} bản ghi đã bị xóa" #: frappe/public/js/frappe/logtypes.js:22 msgid "{0} records are not automatically deleted." -msgstr "" +msgstr "{0} bản ghi không được tự động xóa." #: frappe/public/js/frappe/logtypes.js:29 msgid "{0} records are retained for {1} days." -msgstr "" +msgstr "Bản ghi {0} được lưu giữ trong {1} ngày." #: frappe/core/doctype/user_permission/user_permission_list.js:179 msgid "{0} records deleted" -msgstr "" +msgstr "{0} bản ghi đã bị xóa" #: frappe/public/js/frappe/data_import/data_exporter.js:230 msgid "{0} records will be exported" -msgstr "" +msgstr "Bản ghi {0} sẽ được xuất" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:318 msgid "{0} removed 1 row from {1}" -msgstr "" +msgstr "{0} đã xóa 1 hàng khỏi {1}" #: frappe/public/js/frappe/form/footer/form_timeline.js:420 msgctxt "Form timeline" msgid "{0} removed attachment {1}" -msgstr "" +msgstr "{0} đã xóa tệp đính kèm {1}" #: frappe/desk/doctype/todo/todo.py:58 msgid "{0} removed their assignment." -msgstr "" +msgstr "{0} đã xóa bài tập của họ." #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:296 msgid "{0} removed {1} rows from {2}" -msgstr "" +msgstr "{0} đã xóa {1} hàng khỏi {2}" #: frappe/public/js/frappe/roles_editor.js:64 msgid "{0} role does not have permission on any doctype" -msgstr "" +msgstr "Vai trò {0} không có quyền đối với bất kỳ loại tài liệu nào" #: frappe/model/document.py:1851 msgid "{0} row #{1}:" -msgstr "" +msgstr "{0} hàng #{1}:" #: 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 "" +msgstr "{0} hàng từ {1}" #: 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 "" +msgstr "{0} hàng tới {1}" #: frappe/desk/query_report.py:700 msgid "{0} saved successfully" -msgstr "" +msgstr "{0} đã lưu thành công" #: frappe/desk/doctype/todo/todo.py:44 msgid "{0} self assigned this task: {1}" -msgstr "" +msgstr "{0} tự giao nhiệm vụ này: {1}" -#: frappe/share.py:262 +#: frappe/share.py:257 msgid "{0} shared a document {1} {2} with you" -msgstr "" +msgstr "{0} đã chia sẻ một tài liệu {1} {2} với bạn" #: frappe/core/doctype/docshare/docshare.py:77 msgid "{0} shared this document with everyone" -msgstr "" +msgstr "{0} đã chia sẻ tài liệu này với mọi người" #: frappe/core/doctype/docshare/docshare.py:80 msgid "{0} shared this document with {1}" -msgstr "" +msgstr "{0} đã chia sẻ tài liệu này với {1}" #: frappe/core/doctype/doctype/doctype.py:318 msgid "{0} should be indexed because it's referred in dashboard connections" -msgstr "" +msgstr "{0} nên được lập chỉ mục vì nó được đề cập trong các kết nối trang tổng quan" #: frappe/automation/doctype/auto_repeat/auto_repeat.py:149 msgid "{0} should not be same as {1}" -msgstr "" +msgstr "{0} không được giống với {1}" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:51 msgid "{0} submitted this document" -msgstr "" +msgstr "{0} đã gửi tài liệu này" #: frappe/public/js/frappe/form/footer/version_timeline_content_builder.js:42 msgctxt "Form timeline" msgid "{0} submitted this document {1}" -msgstr "" +msgstr "{0} đã gửi tài liệu này {1}" #: frappe/email/doctype/email_group/email_group.py:71 #: frappe/email/doctype/email_group/email_group.py:142 msgid "{0} subscribers added" -msgstr "" +msgstr "{0} người đăng ký đã được thêm" #: frappe/email/queue.py:69 msgid "{0} to stop receiving emails of this type" @@ -32345,23 +32381,23 @@ msgstr "" #: frappe/public/js/frappe/form/controls/date_range.js:71 #: frappe/public/js/frappe/form/formatters.js:238 msgid "{0} to {1}" -msgstr "" +msgstr "{0} đến {1}" #: frappe/core/doctype/docshare/docshare.py:89 msgid "{0} un-shared this document with {1}" -msgstr "" +msgstr "{0} đã hủy chia sẻ tài liệu này với {1}" #: frappe/custom/doctype/customize_form/customize_form.py:256 msgid "{0} updated" -msgstr "" +msgstr "{0} đã cập nhật" #: frappe/public/js/frappe/form/controls/multiselect_list.js:212 msgid "{0} values selected" -msgstr "" +msgstr "Đã chọn giá trị {0}" #: frappe/public/js/frappe/form/footer/form_timeline.js:184 msgid "{0} viewed this" -msgstr "" +msgstr "{0} đã xem cái này" #: frappe/public/js/frappe/utils/pretty_date.js:35 msgid "{0} w" @@ -32369,33 +32405,33 @@ msgstr "" #: frappe/public/js/frappe/utils/pretty_date.js:64 msgid "{0} weeks ago" -msgstr "" +msgstr "{0} tuần trước" #: frappe/core/page/permission_manager/permission_manager.js:380 msgid "{0} with the role {1}" -msgstr "" +msgstr "{0} với vai trò _{1}" #: frappe/public/js/frappe/utils/pretty_date.js:39 msgid "{0} y" -msgstr "" +msgstr "{0} y" #: frappe/public/js/frappe/utils/pretty_date.js:72 msgid "{0} years ago" -msgstr "" +msgstr "{0} năm trước" #: frappe/public/js/frappe/form/link_selector.js:228 msgid "{0} {1} added" -msgstr "" +msgstr "{0} {1} đã thêm" #: frappe/public/js/frappe/utils/dashboard_utils.js:276 msgid "{0} {1} added to Dashboard {2}" -msgstr "" +msgstr "{0} {1} đã thêm vào Trang tổng quan {2}" -#: frappe/model/base_document.py:765 frappe/model/rename_doc.py:110 +#: frappe/model/base_document.py:778 frappe/model/rename_doc.py:110 msgid "{0} {1} already exists" -msgstr "" +msgstr "{0} {1} đã tồn tại" -#: frappe/model/base_document.py:1102 +#: frappe/model/base_document.py:1115 msgid "{0} {1} cannot be \"{2}\". It should be one of \"{3}\"" msgstr "" @@ -32405,34 +32441,34 @@ msgstr "" #: frappe/model/rename_doc.py:376 msgid "{0} {1} does not exist, select a new target to merge" -msgstr "" +msgstr "{0} {1} không tồn tại, hãy chọn mục tiêu mới để hợp nhất" #: frappe/public/js/frappe/form/form.js:991 msgid "{0} {1} is linked with the following submitted documents: {2}" -msgstr "" +msgstr "{0} {1} được liên kết với các tài liệu đã gửi sau: {2}" #: frappe/model/document.py:277 frappe/permissions.py:592 msgid "{0} {1} not found" -msgstr "" +msgstr "{0} {1} không tìm thấy" #: frappe/model/delete_doc.py:290 msgid "{0} {1}: Submitted Record cannot be deleted. You must {2} Cancel {3} it first." -msgstr "" +msgstr "{0} {1}: Không thể xóa Bản ghi đã gửi. Trước tiên, bạn phải {2} Hủy {3} nó." -#: frappe/model/base_document.py:1234 +#: frappe/model/base_document.py:1247 msgid "{0}, Row {1}" -msgstr "" +msgstr "{0}, Hàng {1}" #: frappe/utils/data.py:1570 msgctxt "Money in words" msgid "{0}." msgstr "{0}." -#: frappe/utils/print_format.py:149 frappe/utils/print_format.py:193 +#: frappe/utils/print_format.py:150 frappe/utils/print_format.py:194 msgid "{0}/{1} complete | Please leave this tab open until completion." msgstr "" -#: frappe/model/base_document.py:1239 +#: frappe/model/base_document.py:1252 msgid "{0}: '{1}' ({3}) will get truncated, as max characters allowed is {2}" msgstr "" @@ -32440,150 +32476,150 @@ msgstr "" msgid "{0}: Failed to attach new recurring document. To enable attaching document in the auto repeat notification email, enable {1} in Print Settings" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1455 +#: frappe/core/doctype/doctype/doctype.py:1458 msgid "{0}: Field '{1}' cannot be set as Unique as it has non-unique values" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1363 +#: frappe/core/doctype/doctype/doctype.py:1366 msgid "{0}: Field {1} in row {2} cannot be hidden and mandatory without default" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1322 +#: frappe/core/doctype/doctype/doctype.py:1325 msgid "{0}: Field {1} of type {2} cannot be mandatory" -msgstr "" +msgstr "{0}: Trường {1} thuộc loại {2} không thể bắt buộc" -#: frappe/core/doctype/doctype/doctype.py:1310 +#: frappe/core/doctype/doctype/doctype.py:1313 msgid "{0}: Fieldname {1} appears multiple times in rows {2}" -msgstr "" +msgstr "{0}: Tên trường {1} xuất hiện nhiều lần trong hàng {2}" -#: frappe/core/doctype/doctype/doctype.py:1442 +#: frappe/core/doctype/doctype/doctype.py:1445 msgid "{0}: Fieldtype {1} for {2} cannot be unique" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1804 +#: frappe/core/doctype/doctype/doctype.py:1807 msgid "{0}: No basic permissions set" -msgstr "" +msgstr "{0}: Chưa đặt quyền cơ bản" -#: frappe/core/doctype/doctype/doctype.py:1818 +#: frappe/core/doctype/doctype/doctype.py:1821 msgid "{0}: Only one rule allowed with the same Role, Level and {1}" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1344 +#: frappe/core/doctype/doctype/doctype.py:1347 msgid "{0}: Options must be a valid DocType for field {1} in row {2}" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1333 +#: frappe/core/doctype/doctype/doctype.py:1336 msgid "{0}: Options required for Link or Table type field {1} in row {2}" -msgstr "" +msgstr "{0}: Các tùy chọn cần thiết cho trường Loại liên kết hoặc Bảng {1} trong hàng {2}" -#: frappe/core/doctype/doctype/doctype.py:1351 +#: frappe/core/doctype/doctype/doctype.py:1354 msgid "{0}: Options {1} must be the same as doctype name {2} for the field {3}" -msgstr "" +msgstr "{0}: Tùy chọn {1} phải giống với tên loại tài liệu {2} cho trường {3}" #: frappe/public/js/frappe/form/workflow.js:45 msgid "{0}: Other permission rules may also apply" -msgstr "" +msgstr "{0}: Các quy tắc cấp phép khác cũng có thể được áp dụng" -#: frappe/core/doctype/doctype/doctype.py:1833 +#: frappe/core/doctype/doctype/doctype.py:1836 msgid "{0}: Permission at level 0 must be set before higher levels are set" -msgstr "" +msgstr "{0}: Phải đặt quyền ở cấp 0 trước khi đặt cấp cao hơn" -#: frappe/core/doctype/doctype/doctype.py:1910 +#: frappe/core/doctype/doctype/doctype.py:1913 msgid "{0}: The 'Amend' permission cannot be granted for a non-submittable DocType." -msgstr "" +msgstr "{0}: Không thể cấp quyền 'Sửa đổi' cho Loại tài liệu không thể gửi." -#: frappe/core/doctype/doctype/doctype.py:1858 +#: frappe/core/doctype/doctype/doctype.py:1861 msgid "{0}: The 'Amend' permission cannot be granted without the 'Create' permission." -msgstr "" +msgstr "{0}: Không thể cấp quyền 'Sửa đổi' nếu không có quyền 'Tạo'." -#: frappe/core/doctype/doctype/doctype.py:1845 +#: frappe/core/doctype/doctype/doctype.py:1848 msgid "{0}: The 'Cancel' permission cannot be granted without the 'Submit' permission." -msgstr "" +msgstr "{0}: Không thể cấp quyền 'Hủy' nếu không có quyền 'Gửi'." -#: frappe/core/doctype/doctype/doctype.py:1892 +#: frappe/core/doctype/doctype/doctype.py:1895 msgid "{0}: The 'Export' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: Quyền 'Xuất' đã bị xóa vì không thể cấp quyền này cho một Loại tài liệu 'đơn'." -#: frappe/core/doctype/doctype/doctype.py:1918 +#: frappe/core/doctype/doctype/doctype.py:1921 msgid "{0}: The 'Import' permission cannot be granted for a non-importable DocType." -msgstr "" +msgstr "{0}: Không thể cấp quyền 'Nhập' cho Loại tài liệu không thể nhập." -#: frappe/core/doctype/doctype/doctype.py:1864 +#: frappe/core/doctype/doctype/doctype.py:1867 msgid "{0}: The 'Import' permission cannot be granted without the 'Create' permission." -msgstr "" +msgstr "{0}: Không thể cấp quyền 'Nhập' nếu không có quyền 'Tạo'." -#: frappe/core/doctype/doctype/doctype.py:1884 +#: frappe/core/doctype/doctype/doctype.py:1887 msgid "{0}: The 'Import' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: Quyền 'Nhập' đã bị xóa vì không thể cấp quyền này cho một Loại tài liệu 'đơn'." -#: frappe/core/doctype/doctype/doctype.py:1876 +#: frappe/core/doctype/doctype/doctype.py:1879 msgid "{0}: The 'Report' permission was removed because it cannot be granted for a 'single' DocType." -msgstr "" +msgstr "{0}: Quyền 'Báo cáo' đã bị xóa vì không thể cấp quyền này cho một Loại tài liệu 'đơn'." -#: frappe/core/doctype/doctype/doctype.py:1903 +#: frappe/core/doctype/doctype/doctype.py:1906 msgid "{0}: The 'Submit' permission cannot be granted for a non-submittable DocType." -msgstr "" +msgstr "{0}: Không thể cấp quyền 'Gửi' cho Loại tài liệu không thể gửi." -#: frappe/core/doctype/doctype/doctype.py:1852 +#: frappe/core/doctype/doctype/doctype.py:1855 msgid "{0}: The 'Submit', 'Cancel', and 'Amend' permissions cannot be granted without the 'Write' permission." msgstr "" #: frappe/public/js/frappe/form/controls/data.js:51 msgid "{0}: You can increase the limit for the field if required via {1}" -msgstr "" +msgstr "{0}: Bạn có thể tăng giới hạn cho trường nếu được yêu cầu thông qua {1}" -#: frappe/core/doctype/doctype/doctype.py:1297 +#: frappe/core/doctype/doctype/doctype.py:1300 msgid "{0}: fieldname cannot be set to reserved field {1} in DocType" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1288 +#: frappe/core/doctype/doctype/doctype.py:1291 msgid "{0}: fieldname cannot be set to reserved keyword {1}" -msgstr "" +msgstr "{0}: tên trường không thể được đặt thành từ khóa dành riêng {1}" #: frappe/contacts/doctype/address/address.js:35 #: frappe/contacts/doctype/contact/contact.js:88 msgid "{0}: {1}" -msgstr "" +msgstr "{0}: {1}" #: frappe/workflow/doctype/workflow_action/workflow_action.py:172 msgid "{0}: {1} is set to state {2}" -msgstr "" +msgstr "{0}: {1} được đặt ở trạng thái {2}" #: frappe/public/js/frappe/views/reports/query_report.js:1326 msgid "{0}: {1} vs {2}" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1463 +#: frappe/core/doctype/doctype/doctype.py:1466 msgid "{0}:Fieldtype {1} for {2} cannot be indexed" -msgstr "" +msgstr "{0}:Loại trường {1} cho {2} không thể lập chỉ mục" #: frappe/public/js/frappe/form/quick_entry.js:203 msgid "{1} saved" -msgstr "" +msgstr "{1} đã lưu" #: frappe/public/js/frappe/utils/datatable.js:12 msgid "{count} cell copied" -msgstr "" +msgstr "{count} đã sao chép ô" #: frappe/public/js/frappe/utils/datatable.js:13 msgid "{count} cells copied" -msgstr "" +msgstr "{count} ô được sao chép" #: frappe/public/js/frappe/utils/datatable.js:16 msgid "{count} row selected" -msgstr "" +msgstr "Đã chọn hàng {count}" #: frappe/public/js/frappe/utils/datatable.js:17 msgid "{count} rows selected" -msgstr "" +msgstr "Đã chọn {count} hàng" -#: frappe/core/doctype/doctype/doctype.py:1517 +#: frappe/core/doctype/doctype/doctype.py:1520 msgid "{{{0}}} is not a valid fieldname pattern. It should be {{field_name}}." msgstr "" #: frappe/public/js/frappe/form/form.js:525 msgid "{} Complete" -msgstr "" +msgstr "{} Hoàn thành" #: frappe/utils/data.py:2621 msgid "{} Invalid python code on line {}" @@ -32595,22 +32631,22 @@ msgstr "" #: frappe/core/doctype/log_settings/log_settings.py:54 msgid "{} does not support automated log clearing." -msgstr "" +msgstr "{} không hỗ trợ xóa nhật ký tự động." #: frappe/core/doctype/audit_trail/audit_trail.py:41 msgid "{} field cannot be empty." -msgstr "" +msgstr "Trường {} không được để trống." -#: frappe/email/doctype/email_account/email_account.py:223 -#: frappe/email/doctype/email_account/email_account.py:231 +#: frappe/email/doctype/email_account/email_account.py:224 +#: frappe/email/doctype/email_account/email_account.py:232 msgid "{} has been disabled. It can only be enabled if {} is checked." -msgstr "" +msgstr "{} đã bị vô hiệu hóa. Nó chỉ có thể được kích hoạt nếu {} được chọn." #: frappe/utils/data.py:145 msgid "{} is not a valid date string." msgstr "" -#: frappe/commands/utils.py:564 +#: frappe/commands/utils.py:512 msgid "{} not found in PATH! This is required to access the console." msgstr "" diff --git a/frappe/locale/zh.po b/frappe/locale/zh.po index 12a522a802..ea2b258367 100644 --- a/frappe/locale/zh.po +++ b/frappe/locale/zh.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: developers@frappe.io\n" -"POT-Creation-Date: 2026-02-01 09:42+0000\n" -"PO-Revision-Date: 2026-02-02 16:52\n" +"POT-Creation-Date: 2026-02-15 09:42+0000\n" +"PO-Revision-Date: 2026-02-16 19:56\n" "Last-Translator: developers@frappe.io\n" "Language-Team: Chinese Simplified\n" "MIME-Version: 1.0\n" @@ -70,7 +70,7 @@ msgstr "© Frappe科技有限公司及贡献者" msgid "<head> HTML" msgstr "<HEAD> HTML" -#: frappe/database/query.py:2196 +#: frappe/database/query.py:2275 msgid "'*' is only allowed in {0} SQL function(s)" msgstr "" @@ -78,7 +78,7 @@ msgstr "" msgid "'In Global Search' is not allowed for field {0} of type {1}" msgstr "字段类型{1}的字段{0}不允许启用'全局搜索'" -#: frappe/core/doctype/doctype/doctype.py:1383 +#: frappe/core/doctype/doctype/doctype.py:1386 msgid "'In Global Search' not allowed for type {0} in row {1}" msgstr "行{1}中的类型{0}不允许“全局搜索”" @@ -102,15 +102,15 @@ msgstr "“{0}”不是有效的IBAN号码" msgid "'{0}' is not a valid URL" msgstr "'{0}' 不是有效的URL" -#: frappe/core/doctype/doctype/doctype.py:1377 +#: frappe/core/doctype/doctype/doctype.py:1380 msgid "'{0}' not allowed for type {1} in row {2}" msgstr "第{2}行类型{1}不允许使用'{0}'" -#: frappe/public/js/frappe/data_import/data_exporter.js:303 +#: frappe/public/js/frappe/data_import/data_exporter.js:317 msgid "(Mandatory)" msgstr "(必填项)" -#: frappe/model/rename_doc.py:703 +#: frappe/model/rename_doc.py:706 msgid "** Failed: {0} to {1}: {2}" msgstr "**失败:{0} {1}:{2}" @@ -778,7 +778,7 @@ msgstr ">" msgid ">=" msgstr ">=" -#: frappe/core/doctype/doctype/doctype.py:1052 +#: frappe/core/doctype/doctype/doctype.py:1055 msgid "A DocType's name should start with a letter and can only consist of letters, numbers, spaces, underscores and hyphens" msgstr "文档类型名称应以字母开头,只能包含字母、数字、空格、下划线和连字符" @@ -796,7 +796,7 @@ msgstr "包含您数据的下载链接将发送至您账户关联的邮件地址 msgid "A field with the name {0} already exists in {1}" msgstr "字段{0}已在{1}中存在" -#: frappe/core/doctype/file/file.py:279 +#: frappe/core/doctype/file/file.py:280 msgid "A file with same name {} already exists" msgstr "同名文件{}已存在" @@ -920,7 +920,7 @@ msgstr "API端点参数应为有效的JSON格式" #. Label of the api_key (Data) field in DocType 'Google Settings' #. Label of the sb_01 (Section Break) field in DocType 'Google Settings' #. Label of the api_key (Data) field in DocType 'Push Notification Settings' -#: frappe/core/doctype/user/user.js:466 frappe/core/doctype/user/user.json +#: frappe/core/doctype/user/user.js:477 frappe/core/doctype/user/user.json #: frappe/email/doctype/email_account/email_account.json #: frappe/integrations/doctype/geolocation_settings/geolocation_settings.json #: frappe/integrations/doctype/google_settings/google_settings.json @@ -939,7 +939,7 @@ msgstr "与中继服务器交互的API密钥和密钥。当从本站点安装的 msgid "API Key cannot be regenerated" msgstr "无法重新生成API密钥" -#: frappe/core/doctype/user/user.js:463 +#: frappe/core/doctype/user/user.js:474 msgid "API Keys" msgstr "API密钥" @@ -963,7 +963,7 @@ msgstr "API请求日志" #. Label of the api_secret (Password) field in DocType 'Email Account' #. Label of the api_secret (Password) field in DocType 'Push Notification #. Settings' -#: frappe/core/doctype/user/user.js:473 frappe/core/doctype/user/user.json +#: frappe/core/doctype/user/user.js:484 frappe/core/doctype/user/user.json #: frappe/email/doctype/email_account/email_account.json #: frappe/integrations/doctype/push_notification_settings/push_notification_settings.json msgid "API Secret" @@ -1164,7 +1164,7 @@ msgstr "操作{0}在{2} {1}上失败。查看{3}" #: frappe/custom/doctype/customize_form/customize_form.js:148 #: frappe/custom/doctype/customize_form/customize_form.js:293 #: frappe/custom/doctype/customize_form/customize_form.json -#: frappe/public/js/frappe/ui/page.html:74 +#: frappe/public/js/frappe/ui/page.html:75 #: frappe/public/js/frappe/views/reports/query_report.js:192 #: frappe/public/js/frappe/views/reports/query_report.js:205 #: frappe/public/js/frappe/views/reports/query_report.js:215 @@ -1228,9 +1228,10 @@ msgstr "用户操作日志" #: frappe/core/page/permission_manager/permission_manager.js:534 #: frappe/email/doctype/email_group/email_group.js:60 #: frappe/public/js/frappe/form/grid_row.js:503 -#: frappe/public/js/frappe/form/sidebar/assign_to.js:104 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:112 #: frappe/public/js/frappe/form/templates/set_sharing.html:82 #: frappe/public/js/frappe/list/bulk_operations.js:451 +#: frappe/public/js/frappe/list/list_view.js:306 #: frappe/public/js/frappe/views/dashboard/dashboard_view.js:441 #: frappe/public/js/frappe/views/reports/query_report.js:267 #: frappe/public/js/frappe/views/reports/query_report.js:295 @@ -1289,8 +1290,8 @@ msgstr "添加子项" #: frappe/public/js/frappe/views/kanban/kanban_board.html:4 #: frappe/public/js/frappe/views/reports/query_report.js:1939 #: frappe/public/js/frappe/views/reports/query_report.js:1942 -#: frappe/public/js/frappe/views/reports/report_view.js:354 -#: frappe/public/js/frappe/views/reports/report_view.js:379 +#: frappe/public/js/frappe/views/reports/report_view.js:356 +#: frappe/public/js/frappe/views/reports/report_view.js:381 #: frappe/public/js/print_format_builder/Field.vue:112 msgid "Add Column" msgstr "添加列" @@ -1374,7 +1375,7 @@ msgstr "添加订阅者" msgid "Add Tags" msgstr "添加标签" -#: frappe/public/js/frappe/list/list_view.js:2238 +#: frappe/public/js/frappe/list/list_view.js:2249 msgctxt "Button in list view actions menu" msgid "Add Tags" msgstr "添加标签" @@ -1407,6 +1408,11 @@ msgstr "添加用户权限限制" msgid "Add Video Conferencing" msgstr "添加视频会议" +#. Label of the add_x_original_from (Check) field in DocType 'Email Account' +#: frappe/email/doctype/email_account/email_account.json +msgid "Add X-Original-From header" +msgstr "" + #: frappe/public/js/frappe/ui/filters/filter_list.js:299 msgid "Add a Filter" msgstr "添加筛选" @@ -1480,7 +1486,7 @@ msgstr "添加分页符" msgid "Add row" msgstr "" -#: frappe/custom/doctype/client_script/client_script.js:18 +#: frappe/custom/doctype/client_script/client_script.js:22 msgid "Add script for Child Table" msgstr "添加子表的脚本" @@ -1502,7 +1508,7 @@ msgstr "添加页签" msgid "Add to Dashboard" msgstr "添加到仪表板" -#: frappe/public/js/frappe/form/sidebar/assign_to.js:102 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:110 msgid "Add to ToDo" msgstr "新增待办" @@ -1518,7 +1524,7 @@ msgstr "发送邮件至{0}参与此活动" msgid "Add {0}" msgstr "添加{0}" -#: frappe/public/js/frappe/list/list_view.js:289 +#: frappe/public/js/frappe/list/list_view.js:295 msgctxt "Primary action in list view" msgid "Add {0}" msgstr "添加{0}" @@ -1681,8 +1687,8 @@ msgstr "高级" msgid "Advanced Control" msgstr "高级控制" -#: frappe/public/js/frappe/form/controls/link.js:493 -#: frappe/public/js/frappe/form/controls/link.js:495 +#: frappe/public/js/frappe/form/controls/link.js:504 +#: frappe/public/js/frappe/form/controls/link.js:506 msgid "Advanced Search" msgstr "高级搜索" @@ -1763,7 +1769,7 @@ msgstr "创建仪表板图表需要聚合函数字段" msgid "Alert" msgstr "警报" -#: frappe/database/query.py:2244 +#: frappe/database/query.py:2323 msgid "Alias must be a string" msgstr "别名必须为字符串" @@ -2086,7 +2092,7 @@ msgstr "允许列表中有分页符" msgid "Allow print" msgstr "允许打印" -#: frappe/desk/page/setup_wizard/setup_wizard.js:431 +#: frappe/desk/page/setup_wizard/setup_wizard.js:425 msgid "Allow recording my first session to improve user experience" msgstr "允许记录我的首次会话以改善用户体验" @@ -2096,7 +2102,7 @@ msgstr "允许记录我的首次会话以改善用户体验" msgid "Allow saving if mandatory fields are not filled" msgstr "必填字段未填完整允许保存" -#: frappe/desk/page/setup_wizard/setup_wizard.js:424 +#: frappe/desk/page/setup_wizard/setup_wizard.js:418 msgid "Allow sending usage data for improving applications" msgstr "允许发送使用数据以改进应用程序" @@ -2252,11 +2258,11 @@ msgstr "已注册" msgid "Already in the following Users ToDo list:{0}" msgstr "已在以下用户待办列表中:{0}" -#: frappe/public/js/frappe/views/reports/report_view.js:901 +#: frappe/public/js/frappe/views/reports/report_view.js:903 msgid "Also adding the dependent currency field {0}" msgstr "还要添加从属货币字段{0}" -#: frappe/public/js/frappe/views/reports/report_view.js:914 +#: frappe/public/js/frappe/views/reports/report_view.js:916 msgid "Also adding the status dependency field {0}" msgstr "同时添加状态依赖字段{0}" @@ -2403,7 +2409,7 @@ msgstr "匿名化矩阵" msgid "Anonymous responses" msgstr "匿名响应" -#: frappe/public/js/frappe/request.js:187 +#: frappe/public/js/frappe/request.js:188 msgid "Another transaction is blocking this one. Please try again in a few seconds." msgstr "另一个交易正在进行中。请稍后再试。" @@ -2470,7 +2476,7 @@ msgstr "应用名称(客户端名称)" msgid "App not found for module: {0}" msgstr "未找到模块{0}对应的应用" -#: frappe/__init__.py:1110 +#: frappe/__init__.py:1112 msgid "App {0} is not installed" msgstr "未安装应用程序{0}" @@ -2490,7 +2496,7 @@ msgstr "添加邮件到已发送" msgid "Append To" msgstr "追加到" -#: frappe/email/doctype/email_account/email_account.py:202 +#: frappe/email/doctype/email_account/email_account.py:203 msgid "Append To can be one of {0}" msgstr "追加到可以是一个{0}" @@ -2544,7 +2550,7 @@ msgstr "" msgid "Apply" msgstr "应用" -#: frappe/public/js/frappe/list/list_view.js:2223 +#: frappe/public/js/frappe/list/list_view.js:2234 msgctxt "Button in list view actions menu" msgid "Apply Assignment Rule" msgstr "应用分配规则" @@ -2631,11 +2637,11 @@ msgstr "归档列" msgid "Are you sure you want to cancel the invitation?" msgstr "是否确认取消邀请?" -#: frappe/public/js/frappe/list/list_view.js:2202 +#: frappe/public/js/frappe/list/list_view.js:2213 msgid "Are you sure you want to clear the assignments?" msgstr "确定要清除分配吗?" -#: frappe/public/js/frappe/form/grid.js:319 +#: frappe/public/js/frappe/form/grid.js:324 msgid "Are you sure you want to delete all {0} rows?" msgstr "" @@ -2749,16 +2755,16 @@ msgstr "分配" msgid "Assign Condition" msgstr "分派条件" -#: frappe/public/js/frappe/form/sidebar/assign_to.js:186 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:194 msgid "Assign To" msgstr "执行人" -#: frappe/public/js/frappe/list/list_view.js:2184 +#: frappe/public/js/frappe/list/list_view.js:2195 msgctxt "Button in list view actions menu" msgid "Assign To" msgstr "分配给" -#: frappe/public/js/frappe/form/sidebar/assign_to.js:196 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:204 msgid "Assign To User Group" msgstr "分配给用户组" @@ -2768,7 +2774,7 @@ msgstr "分配给用户组" msgid "Assign To Users" msgstr "指派给用户" -#: frappe/public/js/frappe/form/sidebar/assign_to.js:367 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:375 msgid "Assign a user" msgstr "分配用户" @@ -2776,7 +2782,7 @@ msgstr "分配用户" msgid "Assign one by one, in sequence" msgstr "按顺序逐个用户分派" -#: frappe/public/js/frappe/form/sidebar/assign_to.js:177 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:185 msgid "Assign to me" msgstr "自己认领" @@ -2803,7 +2809,7 @@ msgstr "发起人" msgid "Assigned By Full Name" msgstr "发起人姓名" -#: frappe/model/meta.py:62 frappe/public/js/frappe/list/base_list.js:808 +#: frappe/model/meta.py:62 frappe/public/js/frappe/list/base_list.js:810 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:37 #: frappe/public/js/frappe/model/meta.js:218 #: frappe/public/js/frappe/model/model.js:136 @@ -2820,7 +2826,7 @@ msgstr "执行人/发起人" msgid "Assignee" msgstr "负责人" -#: frappe/public/js/frappe/form/sidebar/assign_to.js:376 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:384 msgid "Assigning..." msgstr "分派中..." @@ -2882,7 +2888,7 @@ msgstr "{1}移除了{0}的分配" #. Label of the enable_email_assignment (Check) field in DocType 'Notification #. Settings' #: frappe/desk/doctype/notification_settings/notification_settings.json -#: frappe/public/js/frappe/form/sidebar/assign_to.js:362 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:370 msgid "Assignments" msgstr "任务分派" @@ -2977,7 +2983,7 @@ msgstr "关联的字段" msgid "Attached To Name" msgstr "关联单据名" -#: frappe/core/doctype/file/file.py:153 +#: frappe/core/doctype/file/file.py:154 msgid "Attached To Name must be a string or an integer" msgstr "附加到名称必须是字符串或整数" @@ -2993,7 +2999,7 @@ msgstr "附件" msgid "Attachment Limit (MB)" msgstr "附件大小限制(MB)" -#: frappe/core/doctype/file/file.py:348 +#: frappe/core/doctype/file/file.py:349 #: frappe/public/js/frappe/form/sidebar/attachments.js:36 msgid "Attachment Limit Reached" msgstr "已达到附件限制" @@ -3016,7 +3022,7 @@ msgstr "" #. Label of the attachments (Code) field in DocType 'Email Queue' #: frappe/email/doctype/email_queue/email_queue.json #: frappe/public/js/frappe/form/templates/form_sidebar.html:105 -#: frappe/website/doctype/web_form/templates/web_form.html:113 +#: frappe/website/doctype/web_form/templates/web_form.html:122 msgid "Attachments" msgstr "附件" @@ -3078,7 +3084,7 @@ msgstr "认证" msgid "Authentication Apps you can use are:" msgstr "可使用的认证应用包括:" -#: frappe/email/doctype/email_account/email_account.py:339 +#: frappe/email/doctype/email_account/email_account.py:340 msgid "Authentication failed while receiving emails from Email Account: {0}." msgstr "从电子邮件账户{0}接收邮件时认证失败。" @@ -3285,11 +3291,11 @@ msgstr "自动消息" msgid "Automatic" msgstr "自动" -#: frappe/email/doctype/email_account/email_account.py:772 +#: frappe/email/doctype/email_account/email_account.py:773 msgid "Automatic Linking can be activated only for one Email Account." msgstr "只能为一个电子邮箱帐号激活自动链接。" -#: frappe/email/doctype/email_account/email_account.py:766 +#: frappe/email/doctype/email_account/email_account.py:767 msgid "Automatic Linking can be activated only if Incoming is enabled." msgstr "仅当勾选“收邮件”时,才能激活自动链接。" @@ -3471,7 +3477,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/sidebar/sidebar.js:333 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:353 msgid "Background Jobs" msgstr "后台任务" @@ -3884,7 +3890,7 @@ msgstr "批量删除" msgid "Bulk Edit" msgstr "批量修改" -#: frappe/public/js/frappe/form/grid.js:1248 +#: frappe/public/js/frappe/form/grid.js:1253 msgid "Bulk Edit {0}" msgstr "批量编辑{0}" @@ -3892,7 +3898,7 @@ msgstr "批量编辑{0}" msgid "Bulk Operation Failed" msgstr "批量操作失败" -#: frappe/desk/reportview.py:644 +#: frappe/desk/reportview.py:646 msgid "Bulk Operation Successful" msgstr "批量操作成功" @@ -4003,7 +4009,7 @@ msgstr "绕过受限制的IP地址检查如果双因素验证启用" msgid "C5E" msgstr "C5E" -#: frappe/templates/print_formats/standard_macros.html:216 +#: frappe/templates/print_formats/standard_macros.html:219 msgid "CANCELLED" msgstr "已取消" @@ -4121,7 +4127,7 @@ msgid "Camera" msgstr "摄像头" #. Label of the campaign (Data) field in DocType 'Web Page View' -#: frappe/public/js/frappe/utils/utils.js:2008 +#: frappe/public/js/frappe/utils/utils.js:2018 #: frappe/website/doctype/web_page_view/web_page_view.json #: frappe/website/report/website_analytics/website_analytics.js:39 msgid "Campaign" @@ -4137,7 +4143,7 @@ msgstr "活动描述(可选)" msgid "Can not rename as column {0} is already present on DocType." msgstr "无法重命名,因为列{0}已存在于文档类型中。" -#: frappe/core/doctype/doctype/doctype.py:1181 +#: frappe/core/doctype/doctype/doctype.py:1184 msgid "Can only change to/from Autoincrement naming rule when there is no data in the doctype" msgstr "仅在单据类型无数据时修改自增编号" @@ -4169,7 +4175,7 @@ msgstr "无法将{0}重命名为{1},因为{0}不存在。" msgid "Cancel" msgstr "取消" -#: frappe/public/js/frappe/list/list_view.js:2293 +#: frappe/public/js/frappe/list/list_view.js:2304 msgctxt "Button in list view actions menu" msgid "Cancel" msgstr "取消" @@ -4195,7 +4201,7 @@ msgstr "" msgid "Cancel Prepared Report" msgstr "" -#: frappe/public/js/frappe/list/list_view.js:2298 +#: frappe/public/js/frappe/list/list_view.js:2309 msgctxt "Title of confirmation dialog" msgid "Cancel {0} documents?" msgstr "确定要取消{0}个文档吗?" @@ -4244,11 +4250,11 @@ msgstr "无法获取值" msgid "Cannot Remove" msgstr "无法删除" -#: frappe/model/base_document.py:1280 +#: frappe/model/base_document.py:1293 msgid "Cannot Update After Submit" msgstr "不允许提交后修改" -#: frappe/core/doctype/file/file.py:653 +#: frappe/core/doctype/file/file.py:657 msgid "Cannot access file path {0}" msgstr "无法访问文件路径{0}" @@ -4280,7 +4286,7 @@ msgstr "无法更改已取消文档的状态({0}状态)" msgid "Cannot change state of Cancelled Document. Transition row {0}" msgstr "不能改变已取消单据的状态。状态转换第{0}行" -#: frappe/core/doctype/doctype/doctype.py:1171 +#: frappe/core/doctype/doctype/doctype.py:1174 msgid "Cannot change to/from autoincrement autoname in Customize Form" msgstr "定制表单不支持修改自增编号" @@ -4288,7 +4294,7 @@ msgstr "定制表单不支持修改自增编号" msgid "Cannot create a {0} against a child document: {1}" msgstr "无法创建{0}子单据:{1}" -#: frappe/desk/doctype/workspace/workspace.py:282 +#: frappe/desk/doctype/workspace/workspace.py:289 msgid "Cannot create private workspace of other users" msgstr "无法创建其他用户的私有工作空间" @@ -4296,7 +4302,7 @@ msgstr "无法创建其他用户的私有工作空间" msgid "Cannot delete Desktop Icon '{0}' as it is restricted" msgstr "" -#: frappe/core/doctype/file/file.py:175 +#: frappe/core/doctype/file/file.py:176 msgid "Cannot delete Home and Attachments folders" msgstr "无法删除主文件和附件文件夹" @@ -4376,11 +4382,11 @@ msgstr "不能编辑标准字段" msgid "Cannot enable {0} for a non-submittable doctype" msgstr "无法为非可提交文档类型启用{0}" -#: frappe/core/doctype/file/file.py:274 +#: frappe/core/doctype/file/file.py:275 msgid "Cannot find file {} on disk" msgstr "无法在磁盘上找到文件{}" -#: frappe/core/doctype/file/file.py:593 +#: frappe/core/doctype/file/file.py:594 msgid "Cannot get file contents of a Folder" msgstr "无法获取文件夹内容" @@ -4388,7 +4394,7 @@ msgstr "无法获取文件夹内容" msgid "Cannot have multiple printers mapped to a single print format." msgstr "不能将多个打印机映射到单个打印格式。" -#: frappe/public/js/frappe/form/grid.js:1192 +#: frappe/public/js/frappe/form/grid.js:1197 msgid "Cannot import table with more than 5000 rows." msgstr "无法导入超过5000行的表格。" @@ -4408,7 +4414,7 @@ msgstr "上传文件中的字段{0}无法匹配目标单据字段" msgid "Cannot move row" msgstr "不能移动行" -#: frappe/public/js/frappe/views/reports/report_view.js:926 +#: frappe/public/js/frappe/views/reports/report_view.js:928 msgid "Cannot remove ID field" msgstr "无法删除ID字段" @@ -4433,11 +4439,11 @@ msgstr "无法提交{0}。" msgid "Cannot update {0}" msgstr "无法更新{0}" -#: frappe/model/db_query.py:1222 +#: frappe/model/db_query.py:1233 msgid "Cannot use sub-query here." msgstr "此处不能使用子查询。" -#: frappe/model/db_query.py:1254 +#: frappe/model/db_query.py:1265 msgid "Cannot use {0} in order/group by" msgstr "不能在order/group by中使用{0}" @@ -4613,7 +4619,7 @@ msgstr "图表来源" #. 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:504 +#: frappe/public/js/frappe/views/reports/report_view.js:506 msgid "Chart Type" msgstr "图表类型" @@ -4715,7 +4721,7 @@ msgstr "子文档类型" msgid "Child Item" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1675 +#: frappe/core/doctype/doctype/doctype.py:1678 msgid "Child Table {0} for field {1} must be virtual" msgstr "字段{1}的子表{0}必须为虚拟表" @@ -4725,7 +4731,7 @@ msgstr "字段{1}的子表{0}必须为虚拟表" msgid "Child Tables are shown as a Grid in other DocTypes" msgstr "嵌入其它单据类型中作为表格,一对多关系中的多这一方" -#: frappe/database/query.py:1105 +#: frappe/database/query.py:1120 msgid "Child query fields for '{0}' must be a list or tuple." msgstr "“{0}”的子查询字段必须为列表或元组。" @@ -4781,7 +4787,7 @@ msgstr "清除并添加模板" msgid "Clear All" msgstr "清空全部" -#: frappe/public/js/frappe/list/list_view.js:2199 +#: frappe/public/js/frappe/list/list_view.js:2210 msgctxt "Button in list view actions menu" msgid "Clear Assignment" msgstr "清除分配" @@ -4823,7 +4829,7 @@ msgstr "点击定制按钮开始定制" msgid "Click below to get started:" msgstr "点击下方开始使用:" -#: frappe/website/doctype/web_form/templates/web_form.html:154 +#: frappe/website/doctype/web_form/templates/web_form.html:163 msgid "Click here" msgstr "点击此处" @@ -4875,7 +4881,7 @@ msgstr "点击设置动态筛选器" msgid "Click to Set Filters" msgstr "单击设置过滤条件" -#: frappe/public/js/frappe/list/list_view.js:745 +#: frappe/public/js/frappe/list/list_view.js:754 msgid "Click to sort by {0}" msgstr "点击按{0}排序" @@ -5044,7 +5050,7 @@ msgid "Code challenge method" msgstr "代码挑战方法" #: frappe/public/js/frappe/form/form_tour.js:276 -#: frappe/public/js/frappe/ui/sidebar/sidebar.html:44 +#: frappe/public/js/frappe/ui/sidebar/sidebar.html:45 #: frappe/public/js/frappe/widgets/base_widget.js:159 msgid "Collapse" msgstr "收起" @@ -5216,7 +5222,7 @@ msgstr "Comm10E" #: frappe/core/doctype/comment/comment.json #: frappe/core/doctype/version/version_view.html:52 #: frappe/public/js/frappe/form/controls/comment.js:9 -#: frappe/public/js/frappe/form/sidebar/assign_to.js:240 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:248 #: frappe/templates/includes/comments/comments.html:34 msgid "Comment" msgstr "评论" @@ -5247,7 +5253,7 @@ msgstr "评论公开状态仅可由原作者或系统管理员修改。" #: frappe/model/meta.py:61 frappe/public/js/frappe/form/controls/comment.js:9 #: frappe/public/js/frappe/model/meta.js:217 #: frappe/public/js/frappe/model/model.js:135 -#: frappe/website/doctype/web_form/templates/web_form.html:129 +#: frappe/website/doctype/web_form/templates/web_form.html:138 msgid "Comments" msgstr "评论" @@ -5338,7 +5344,7 @@ msgid "Company Name" msgstr "公司名" #: frappe/core/doctype/server_script/server_script.js:14 -#: frappe/custom/doctype/client_script/client_script.js:56 +#: frappe/custom/doctype/client_script/client_script.js:60 #: frappe/public/js/frappe/utils/diffview.js:28 msgid "Compare Versions" msgstr "版本比较" @@ -5357,7 +5363,7 @@ msgstr "编译成功" msgid "Complete" msgstr "完成" -#: frappe/public/js/frappe/form/sidebar/assign_to.js:206 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:214 msgid "Complete By" msgstr "完成日期" @@ -5468,7 +5474,7 @@ msgstr "配置" msgid "Configuration" msgstr "配置" -#: frappe/public/js/frappe/views/reports/report_view.js:486 +#: frappe/public/js/frappe/views/reports/report_view.js:488 msgid "Configure Chart" msgstr "配置图表" @@ -5499,7 +5505,7 @@ msgstr "设置修订后单据编号规则\n" msgid "Configure various aspects of how document naming works like naming series, current counter." msgstr "配置文档命名的各项参数,如命名序列、当前计数器。" -#: frappe/core/doctype/user/user.js:407 frappe/public/js/frappe/dom.js:342 +#: frappe/core/doctype/user/user.js:410 frappe/public/js/frappe/dom.js:342 #: frappe/www/update-password.html:66 msgid "Confirm" msgstr "确认" @@ -5518,7 +5524,7 @@ msgstr "确认访问" msgid "Confirm Deletion of Account" msgstr "确认删除账户" -#: frappe/core/doctype/user/user.js:189 +#: frappe/core/doctype/user/user.js:192 msgid "Confirm New Password" msgstr "确认新密码" @@ -5682,7 +5688,7 @@ msgstr "包含{0}个安全修复" #. 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:2024 +#: frappe/public/js/frappe/utils/utils.js:2034 #: 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 @@ -5751,11 +5757,11 @@ 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:1085 +#: frappe/public/js/frappe/utils/utils.js:1096 msgid "Copied to clipboard." msgstr "复制到剪贴板。" -#: frappe/public/js/frappe/list/list_view.js:2517 +#: frappe/public/js/frappe/list/list_view.js:2528 msgid "Copied {0} {1} to clipboard" msgstr "" @@ -5767,16 +5773,16 @@ msgstr "复制链接" msgid "Copy embed code" msgstr "复制嵌入代码" -#: frappe/public/js/frappe/request.js:619 +#: frappe/public/js/frappe/request.js:620 msgid "Copy error to clipboard" msgstr "将出错日志复制到剪贴板" #: frappe/public/js/frappe/form/toolbar.js:543 -#: frappe/public/js/frappe/list/list_view.js:2401 +#: frappe/public/js/frappe/list/list_view.js:2412 msgid "Copy to Clipboard" msgstr "复制到剪贴板" -#: frappe/core/doctype/user/user.js:494 +#: frappe/core/doctype/user/user.js:505 msgid "Copy token to clipboard" msgstr "复制令牌至剪贴板" @@ -5809,7 +5815,7 @@ msgstr "找不到{0}" msgid "Could not map column {0} to field {1}" msgstr "无法映射列{0}到字段{1}" -#: frappe/database/query.py:1003 +#: frappe/database/query.py:1023 msgid "Could not parse field: {0}" msgstr "无法解析字段:{0}" @@ -5962,7 +5968,7 @@ msgstr "创建日志" msgid "Create New" msgstr "新建" -#: frappe/public/js/frappe/list/list_view.js:518 +#: frappe/public/js/frappe/list/list_view.js:527 msgctxt "Create a new document from list view" msgid "Create New" msgstr "新建" @@ -5979,7 +5985,7 @@ msgstr "新建看板面板" msgid "Create Saved Filter" msgstr "" -#: frappe/core/doctype/user/user.js:271 +#: frappe/core/doctype/user/user.js:274 msgid "Create User Email" msgstr "创建用户电子邮件" @@ -5999,10 +6005,10 @@ msgstr "新建..." msgid "Create a new record" msgstr "新建一笔记录" -#: frappe/public/js/frappe/form/controls/link.js:469 -#: frappe/public/js/frappe/form/controls/link.js:471 +#: frappe/public/js/frappe/form/controls/link.js:480 +#: frappe/public/js/frappe/form/controls/link.js:482 #: frappe/public/js/frappe/form/link_selector.js:147 -#: frappe/public/js/frappe/list/list_view.js:510 +#: frappe/public/js/frappe/list/list_view.js:519 #: frappe/public/js/frappe/web_form/web_form_list.js:226 msgid "Create a new {0}" msgstr "新建{0}" @@ -6019,7 +6025,7 @@ msgstr "创建或修改打印格式" msgid "Create or Edit Workflow" msgstr "创建或修改工作流" -#: frappe/public/js/frappe/list/list_view.js:513 +#: frappe/public/js/frappe/list/list_view.js:522 msgid "Create your first {0}" msgstr "新建 {0}" @@ -6038,7 +6044,7 @@ msgstr "创建" msgid "Created At" msgstr "创建时间" -#: frappe/model/meta.py:58 frappe/public/js/frappe/list/base_list.js:810 +#: frappe/model/meta.py:58 frappe/public/js/frappe/list/base_list.js:812 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:39 #: frappe/public/js/frappe/model/meta.js:214 #: frappe/public/js/frappe/model/model.js:123 @@ -6127,7 +6133,7 @@ msgstr "Ctrl + Enter 添加评论" #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/desk/doctype/dashboard_chart/dashboard_chart.json #: frappe/desk/doctype/number_card/number_card.json -#: frappe/desk/page/setup_wizard/setup_wizard.js:414 +#: frappe/desk/page/setup_wizard/setup_wizard.js:411 #: frappe/geo/doctype/currency/currency.json #: frappe/website/doctype/web_form_field/web_form_field.json msgid "Currency" @@ -6246,7 +6252,7 @@ msgstr "被授权链接的单据类型" msgid "Custom Document Types Limit Exceeded" msgstr "超出自定义文档类型限制" -#: frappe/desk/desktop.py:510 +#: frappe/desk/desktop.py:512 msgid "Custom Documents" msgstr "自定义文档" @@ -6337,7 +6343,7 @@ msgstr "自定义覆盖" msgid "Custom Report" msgstr "自定义报表" -#: frappe/desk/desktop.py:511 +#: frappe/desk/desktop.py:513 msgid "Custom Reports" msgstr "自定义报表" @@ -6408,7 +6414,7 @@ msgstr "{0}的自定义已导出到:
{1}" msgid "Customize" msgstr "定制" -#: frappe/public/js/frappe/list/list_view.js:1960 +#: frappe/public/js/frappe/list/list_view.js:1971 msgctxt "Button in list view menu" msgid "Customize" msgstr "自定义" @@ -6440,6 +6446,11 @@ msgstr "自定义表单 - {0}" msgid "Customize Form Field" msgstr "定制表单字段" +#: frappe/public/js/frappe/list/list_view.js:1997 +msgctxt "Customize qucik filters of List View" +msgid "Customize Quick Filters" +msgstr "" + #. Description of a Card Break in the Build Workspace #: frappe/core/workspace/build/build.json msgid "Customize properties, naming, fields and more for standard doctypes" @@ -6475,7 +6486,7 @@ msgstr "倒序" msgid "DLE" msgstr "数据列表编辑器" -#: frappe/templates/print_formats/standard_macros.html:211 +#: frappe/templates/print_formats/standard_macros.html:214 msgid "DRAFT" msgstr "草稿" @@ -6563,7 +6574,7 @@ msgstr "暗色主题" #: 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:576 -#: frappe/public/js/frappe/utils/utils.js:959 +#: frappe/public/js/frappe/utils/utils.js:970 msgid "Dashboard" msgstr "数据面板" @@ -6757,7 +6768,7 @@ msgstr "日期范围" msgid "Date and Number Format" msgstr "日期和数字格式" -#: frappe/public/js/frappe/form/controls/date.js:253 +#: frappe/public/js/frappe/form/controls/date.js:252 msgid "Date {0} must be in format: {1}" msgstr "日期{0}必须采用格式:{1}" @@ -6784,7 +6795,7 @@ msgstr "时间日期" #. Label of the day (Select) field in DocType 'Auto Repeat Day' #: frappe/automation/doctype/assignment_rule_day/assignment_rule_day.json #: frappe/automation/doctype/auto_repeat_day/auto_repeat_day.json -#: frappe/public/js/frappe/views/calendar/calendar.js:282 +#: frappe/public/js/frappe/views/calendar/calendar.js:284 msgid "Day" msgstr "天" @@ -6813,7 +6824,7 @@ msgstr "参考日期前" msgid "Days Before or After" msgstr "天数(前或后)" -#: frappe/public/js/frappe/request.js:250 +#: frappe/public/js/frappe/request.js:251 msgid "Deadlock Occurred" msgstr "发生死锁" @@ -6898,7 +6909,7 @@ msgstr "默认收件箱" #. Label of the default_incoming (Check) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json -#: frappe/email/doctype/email_account/email_account.py:224 +#: frappe/email/doctype/email_account/email_account.py:225 msgid "Default Incoming" msgstr "默认收件箱" @@ -6918,7 +6929,7 @@ msgstr "默认单据编号规则" #. Label of the default_outgoing (Check) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json -#: frappe/email/doctype/email_account/email_account.py:232 +#: frappe/email/doctype/email_account/email_account.py:233 msgid "Default Outgoing" msgstr "默认外发" @@ -7010,11 +7021,11 @@ msgstr "默认工作区" msgid "Default display currency" msgstr "默认显示货币" -#: frappe/core/doctype/doctype/doctype.py:1405 +#: frappe/core/doctype/doctype/doctype.py:1408 msgid "Default for 'Check' type of field {0} must be either '0' or '1'" msgstr "字段{0}的'复选框'类型默认值必须为'0'或'1'" -#: frappe/core/doctype/doctype/doctype.py:1418 +#: frappe/core/doctype/doctype/doctype.py:1421 msgid "Default value for {0} must be in the list of options." msgstr "{0}的默认值必须在选项列表中。" @@ -7039,7 +7050,7 @@ msgstr "默认值" msgid "Defaults" msgstr "默认" -#: frappe/email/doctype/email_account/email_account.py:243 +#: frappe/email/doctype/email_account/email_account.py:244 msgid "Defaults Updated" msgstr "默认设置已更新" @@ -7076,7 +7087,7 @@ msgstr "已逾期" #: frappe/public/js/frappe/form/grid.js:66 #: frappe/public/js/frappe/form/grid_row_form.js:44 #: frappe/public/js/frappe/form/toolbar.js:500 -#: frappe/public/js/frappe/views/reports/report_view.js:1754 +#: frappe/public/js/frappe/views/reports/report_view.js:1760 #: frappe/public/js/frappe/views/treeview.js:337 #: frappe/public/js/frappe/web_form/web_form_list.js:283 #: frappe/templates/discussions/reply_card.html:35 @@ -7084,12 +7095,12 @@ msgstr "已逾期" msgid "Delete" msgstr "删除" -#: frappe/public/js/frappe/list/list_view.js:2261 +#: frappe/public/js/frappe/list/list_view.js:2272 msgctxt "Button in list view actions menu" msgid "Delete" msgstr "删除" -#: frappe/website/doctype/web_form/templates/web_form.html:52 +#: frappe/website/doctype/web_form/templates/web_form.html:61 msgctxt "Button in web form" msgid "Delete" msgstr "删除" @@ -7131,7 +7142,7 @@ msgstr "删除标签页" msgid "Delete all" msgstr "全部删除" -#: frappe/public/js/frappe/form/grid.js:367 +#: frappe/public/js/frappe/form/grid.js:372 msgid "Delete all {0} rows" msgstr "" @@ -7163,7 +7174,7 @@ msgctxt "Button text" msgid "Delete entire tab with fields" msgstr "删除包含字段的整个标签页" -#: frappe/public/js/frappe/form/grid.js:237 +#: frappe/public/js/frappe/form/grid.js:242 msgid "Delete row" msgstr "" @@ -7181,17 +7192,17 @@ msgstr "删除标签页" msgid "Delete this record to allow sending to this email address" msgstr "删除此记录允许发送此邮件地址" -#: frappe/public/js/frappe/list/list_view.js:2266 +#: frappe/public/js/frappe/list/list_view.js:2277 msgctxt "Title of confirmation dialog" msgid "Delete {0} item permanently?" msgstr "永久删除 {0} 项?" -#: frappe/public/js/frappe/list/list_view.js:2272 +#: frappe/public/js/frappe/list/list_view.js:2283 msgctxt "Title of confirmation dialog" msgid "Delete {0} items permanently?" msgstr "永久删除 {0} 项?" -#: frappe/public/js/frappe/form/grid.js:240 +#: frappe/public/js/frappe/form/grid.js:245 msgid "Delete {0} rows" msgstr "" @@ -7221,10 +7232,6 @@ msgstr "已删除单据(垃圾桶)" msgid "Deleted Name" msgstr "删除名称" -#: frappe/desk/reportview.py:644 -msgid "Deleted all documents successfully" -msgstr "已成功删除选择的单据" - #: frappe/public/js/frappe/web_form/web_form.js:207 msgid "Deleted!" msgstr "已删除!" @@ -7237,7 +7244,7 @@ msgstr "删除{0}" msgid "Deleting {0} records..." msgstr "删除 {0} 笔单据..." -#: frappe/public/js/frappe/model/model.js:692 +#: frappe/public/js/frappe/model/model.js:704 msgid "Deleting {0}..." msgstr "删除 {0} 笔单据..." @@ -7401,6 +7408,7 @@ msgstr "桌面主题" #: frappe/desk/doctype/number_card/number_card.json #: frappe/desk/doctype/onboarding_step/onboarding_step.json #: frappe/desk/doctype/workspace/workspace.json +#: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json #: frappe/email/doctype/document_follow/document_follow.json #: frappe/email/doctype/email_template/email_template.json #: frappe/integrations/doctype/google_calendar/google_calendar.json @@ -7626,7 +7634,7 @@ msgstr "禁用自动回复" msgid "Discard" msgstr "丢弃" -#: frappe/website/doctype/web_form/templates/web_form.html:44 +#: frappe/website/doctype/web_form/templates/web_form.html:53 msgctxt "Button in web form" msgid "Discard" msgstr "放弃" @@ -7714,11 +7722,11 @@ msgstr "不创建新用户" msgid "Do not create new user if user with email does not exist in the system" msgstr "如果系统中不存在该邮箱用户,则不创建新用户" -#: frappe/public/js/frappe/form/grid.js:1253 +#: frappe/public/js/frappe/form/grid.js:1258 msgid "Do not edit headers which are preset in the template" msgstr "不要编辑模板中预设的标题" -#: frappe/public/js/frappe/router.js:629 +#: frappe/public/js/frappe/router.js:630 msgid "Do not warn me again about {0}" msgstr "不再就{0}向我发出警告" @@ -7818,7 +7826,7 @@ msgstr "以下状态的文档状态已更改:
{0}
\n" msgid "DocType" msgstr "单据类型" -#: frappe/core/doctype/doctype/doctype.py:1606 +#: frappe/core/doctype/doctype/doctype.py:1609 msgid "DocType {0} provided for the field {1} must have atleast one Link field" msgstr "字段 {1} 指定的DocType {0} 必须至少包含一个链接字段" @@ -7911,7 +7919,7 @@ msgstr "文档类型 {0} 不存在" msgid "DocType {} not found" msgstr "未找到文档类型 {}" -#: frappe/core/doctype/doctype/doctype.py:1046 +#: frappe/core/doctype/doctype/doctype.py:1049 msgid "DocType's name should not start or end with whitespace" msgstr "文档类型名称首尾不可包含空格" @@ -7925,7 +7933,7 @@ msgstr "文档类型不可修改,请使用 {0}" msgid "Doctype" msgstr "单据类型" -#: frappe/core/doctype/doctype/doctype.py:1040 +#: frappe/core/doctype/doctype/doctype.py:1043 msgid "Doctype name is limited to {0} characters ({1})" msgstr "文档类型名称长度限制为 {0} 字符(当前:{1})" @@ -7987,19 +7995,19 @@ msgstr "单据关联" msgid "Document Links" msgstr "单据关联" -#: frappe/core/doctype/doctype/doctype.py:1229 +#: frappe/core/doctype/doctype/doctype.py:1232 msgid "Document Links Row #{0}: Could not find field {1} in {2} DocType" msgstr "文档链接第 #{0} 行:在 {2} 文档类型中未找到字段 {1}" -#: frappe/core/doctype/doctype/doctype.py:1249 +#: frappe/core/doctype/doctype/doctype.py:1252 msgid "Document Links Row #{0}: Invalid doctype or fieldname." msgstr "文档链接第 #{0} 行:无效的文档类型或字段名" -#: frappe/core/doctype/doctype/doctype.py:1212 +#: frappe/core/doctype/doctype/doctype.py:1215 msgid "Document Links Row #{0}: Parent DocType is mandatory for internal links" msgstr "文档链接第 #{0} 行:内部链接必须指定父文档类型" -#: frappe/core/doctype/doctype/doctype.py:1218 +#: frappe/core/doctype/doctype/doctype.py:1221 msgid "Document Links Row #{0}: Table Fieldname is mandatory for internal links" msgstr "文档链接第 #{0} 行:内部链接必须指定表字段名" @@ -8198,7 +8206,7 @@ msgstr "单据类型与权限" msgid "Document Unlocked" msgstr "文档已解锁" -#: frappe/database/query.py:554 +#: frappe/database/query.py:563 msgid "Document cannot be used as a filter value" msgstr "" @@ -8206,15 +8214,15 @@ msgstr "" msgid "Document follow is not enabled for this user." msgstr "该用户未启用文档关注功能" -#: frappe/public/js/frappe/list/list_view.js:1320 +#: frappe/public/js/frappe/list/list_view.js:1331 msgid "Document has been cancelled" msgstr "文档已取消" -#: frappe/public/js/frappe/list/list_view.js:1319 +#: frappe/public/js/frappe/list/list_view.js:1330 msgid "Document has been submitted" msgstr "文档已提交" -#: frappe/public/js/frappe/list/list_view.js:1318 +#: frappe/public/js/frappe/list/list_view.js:1329 msgid "Document is in draft state" msgstr "文档处于草稿状态" @@ -8352,7 +8360,7 @@ msgstr "双层圆环图" msgid "Double click to edit label" msgstr "双击修改标签" -#: frappe/core/doctype/file/file.js:15 frappe/core/doctype/user/user.js:481 +#: frappe/core/doctype/file/file.js:15 frappe/core/doctype/user/user.js:492 #: frappe/email/doctype/auto_email_report/auto_email_report.js:8 #: frappe/public/js/frappe/form/grid.js:66 msgid "Download" @@ -8392,9 +8400,9 @@ msgstr "下载报表" msgid "Download Template" msgstr "下载模板" -#: frappe/website/doctype/personal_data_download_request/personal_data_download_request.py:61 -#: frappe/website/doctype/personal_data_download_request/personal_data_download_request.py:69 -#: frappe/website/doctype/personal_data_download_request/test_personal_data_download_request.py:48 +#: frappe/website/doctype/personal_data_download_request/personal_data_download_request.py:62 +#: frappe/website/doctype/personal_data_download_request/personal_data_download_request.py:70 +#: frappe/website/doctype/personal_data_download_request/test_personal_data_download_request.py:50 msgid "Download Your Data" msgstr "下载您的数据" @@ -8479,7 +8487,7 @@ msgstr "重复记录" msgid "Duplicate Filter Name" msgstr "过滤条件名称重复" -#: frappe/model/base_document.py:766 frappe/model/rename_doc.py:111 +#: frappe/model/base_document.py:779 frappe/model/rename_doc.py:111 msgid "Duplicate Name" msgstr "名称重复" @@ -8491,7 +8499,7 @@ msgstr "复制当前行" msgid "Duplicate field" msgstr "复制字段" -#: frappe/public/js/frappe/form/grid.js:238 +#: frappe/public/js/frappe/form/grid.js:243 msgid "Duplicate row" msgstr "" @@ -8499,7 +8507,7 @@ msgstr "" msgid "Duplicate rows" msgstr "" -#: frappe/public/js/frappe/form/grid.js:241 +#: frappe/public/js/frappe/form/grid.js:246 msgid "Duplicate {0} rows" msgstr "" @@ -8591,7 +8599,7 @@ msgstr "退出" #: frappe/public/js/frappe/form/templates/address_list.html:13 #: frappe/public/js/frappe/form/templates/contact_list.html:13 #: frappe/public/js/frappe/form/toolbar.js:214 -#: frappe/public/js/frappe/form/toolbar.js:784 +#: frappe/public/js/frappe/form/toolbar.js:785 #: frappe/public/js/frappe/views/reports/query_report.js:904 #: frappe/public/js/frappe/views/reports/query_report.js:1890 #: frappe/public/js/frappe/widgets/base_widget.js:64 @@ -8604,12 +8612,12 @@ msgstr "退出" msgid "Edit" msgstr "编辑" -#: frappe/public/js/frappe/list/list_view.js:2347 +#: frappe/public/js/frappe/list/list_view.js:2358 msgctxt "Button in list view actions menu" msgid "Edit" msgstr "编辑" -#: frappe/website/doctype/web_form/templates/web_form.html:23 +#: frappe/website/doctype/web_form/templates/web_form.html:32 msgctxt "Button in web form" msgid "Edit" msgstr "编辑" @@ -8643,7 +8651,7 @@ msgstr "编辑自定义HTML" msgid "Edit DocType" msgstr "修改单据类型" -#: frappe/public/js/frappe/list/list_view.js:1979 +#: frappe/public/js/frappe/list/list_view.js:1990 msgctxt "Button in list view menu" msgid "Edit DocType" msgstr "编辑文档类型" @@ -8657,11 +8665,6 @@ msgstr "编辑" msgid "Edit Filters" msgstr "编辑过滤条件" -#: frappe/public/js/frappe/list/list_view.js:1986 -msgctxt "Edit filters of List View" -msgid "Edit Filters" -msgstr "编辑过滤条件" - #: frappe/public/js/print_format_builder/PrintFormat.vue:29 msgid "Edit Footer" msgstr "编辑页脚" @@ -8764,7 +8767,7 @@ msgstr "编辑您的回复" msgid "Edit your workflow visually using the Workflow Builder." msgstr "使用工作流设计器可视化编辑工作流" -#: frappe/public/js/frappe/views/reports/report_view.js:677 +#: frappe/public/js/frappe/views/reports/report_view.js:679 #: frappe/public/js/frappe/widgets/widget_dialog.js:52 msgid "Edit {0}" msgstr "编辑{0}" @@ -8860,7 +8863,7 @@ msgstr "邮件" msgid "Email Account" msgstr "电子邮箱帐号" -#: frappe/email/doctype/email_account/email_account.py:343 +#: frappe/email/doctype/email_account/email_account.py:344 msgid "Email Account Disabled." msgstr "电子邮件账户已禁用" @@ -8877,7 +8880,7 @@ msgstr "电子邮箱帐号已被多次添加" msgid "Email Account not setup. Please create a new Email Account from Settings > Email Account" msgstr "未设置电子邮件账户。请通过 设置 > 电子邮件账户 创建新账户" -#: frappe/email/doctype/email_account/email_account.py:576 +#: frappe/email/doctype/email_account/email_account.py:577 msgid "Email Account {0} Disabled" msgstr "邮件账户{0}已禁用" @@ -8887,7 +8890,7 @@ msgstr "邮件账户{0}已禁用" #. Label of the email_id (Data) field in DocType 'Google Contacts' #: frappe/contacts/doctype/address/address.json #: frappe/contacts/doctype/contact/contact.json -#: frappe/desk/page/setup_wizard/setup_wizard.js:485 +#: frappe/desk/page/setup_wizard/setup_wizard.js:479 #: frappe/email/doctype/email_account/email_account.json #: frappe/integrations/doctype/google_contacts/google_contacts.json #: frappe/www/complete_signup.html:11 frappe/www/login.html:184 @@ -9063,11 +9066,11 @@ msgstr "电子邮件已被标记为垃圾邮件" msgid "Email has been moved to trash" msgstr "电子邮件已被移至垃圾桶" -#: frappe/core/doctype/user/user.js:273 +#: frappe/core/doctype/user/user.js:276 msgid "Email is mandatory to create User Email" msgstr "创建用户电子邮件时必须填写邮箱地址" -#: frappe/public/js/frappe/views/communication.js:882 +#: frappe/public/js/frappe/views/communication.js:883 msgid "Email not sent to {0} (unsubscribed / disabled)" msgstr "电子邮件不会被发送到{0}(退订/禁用)" @@ -9089,7 +9092,7 @@ msgstr "电子邮件" msgid "Emails Pulled" msgstr "已拉取电子邮件" -#: frappe/email/doctype/email_account/email_account.py:934 +#: frappe/email/doctype/email_account/email_account.py:935 msgid "Emails are already being pulled from this account." msgstr "已从该账户持续拉取电子邮件。" @@ -9106,7 +9109,7 @@ msgstr "系统自动发送带审批操作按钮及单据pdf附件的电子邮件 msgid "Embed code copied" msgstr "嵌入代码已复制" -#: frappe/database/query.py:2248 +#: frappe/database/query.py:2327 msgid "Empty alias is not allowed" msgstr "不允许使用空别名" @@ -9114,7 +9117,7 @@ msgstr "不允许使用空别名" msgid "Empty column" msgstr "空栏" -#: frappe/database/query.py:2190 +#: frappe/database/query.py:2269 msgid "Empty string arguments are not allowed" msgstr "不允许使用空字符串参数" @@ -9184,7 +9187,7 @@ msgstr "启用谷歌索引" #. Label of the enable_incoming (Check) field in DocType 'Email Account' #: frappe/email/doctype/email_account/email_account.json -#: frappe/email/doctype/email_account/email_account.py:225 +#: frappe/email/doctype/email_account/email_account.py:226 msgid "Enable Incoming" msgstr "收邮件" @@ -9197,7 +9200,7 @@ msgstr "启用初始化向导" #. Label of the enable_outgoing (Check) field in DocType 'Email Account' #: frappe/core/doctype/user_email/user_email.json #: frappe/email/doctype/email_account/email_account.json -#: frappe/email/doctype/email_account/email_account.py:233 +#: frappe/email/doctype/email_account/email_account.py:234 msgid "Enable Outgoing" msgstr "启用该邮箱帐号发送邮件" @@ -9320,7 +9323,7 @@ msgstr "已启用" msgid "Enabled Scheduler" msgstr "已启动后台任务" -#: frappe/email/doctype/email_account/email_account.py:1010 +#: frappe/email/doctype/email_account/email_account.py:1011 msgid "Enabled email inbox for user {0}" msgstr "已为用户{0}启用电子邮件收件箱" @@ -9499,7 +9502,7 @@ msgstr "实体名称" msgid "Entity Type" msgstr "实体类型" -#: frappe/public/js/frappe/list/base_list.js:1272 +#: frappe/public/js/frappe/list/base_list.js:1284 #: frappe/public/js/frappe/ui/filters/filter.js:16 msgid "Equals" msgstr "等于" @@ -9595,7 +9598,7 @@ msgstr "打印格式第{0}行错误:{1}" msgid "Error in {0}.get_list: {1}" msgstr "{0}.get_list中发生错误:{1}" -#: frappe/database/query.py:440 +#: frappe/database/query.py:449 msgid "Error parsing nested filters: {0}. {1}" msgstr "" @@ -9603,7 +9606,7 @@ msgstr "" msgid "Error validating \"Ignore User Permissions\"" msgstr "" -#: frappe/email/doctype/email_account/email_account.py:670 +#: frappe/email/doctype/email_account/email_account.py:671 msgid "Error while connecting to email account {0}" msgstr "连接到电子邮箱帐号{0}时出错" @@ -9615,15 +9618,15 @@ msgstr "评估通知{0}时出错。请修复您的模板。" msgid "Error {0}: {1}" msgstr "" -#: frappe/model/base_document.py:920 +#: frappe/model/base_document.py:933 msgid "Error: Data missing in table {0}" msgstr "错误:表{0}中数据缺失" -#: frappe/model/base_document.py:930 +#: frappe/model/base_document.py:943 msgid "Error: Value missing for {0}: {1}" msgstr "错误:{0} 请填写必填字段:{1}" -#: frappe/model/base_document.py:924 +#: frappe/model/base_document.py:937 msgid "Error: {0} Row #{1}: Value missing for: {2}" msgstr "错误:{0} 行#{1}:缺少值:{2}" @@ -9815,7 +9818,7 @@ msgstr "展开" msgid "Expand All" msgstr "全部展开" -#: frappe/database/query.py:706 +#: frappe/database/query.py:729 msgid "Expected 'and' or 'or' operator, found: {0}" msgstr "期望“and”或“or”运算符,实际发现:{0}" @@ -9875,12 +9878,12 @@ msgstr "QR码图像页面的到期时间" #: frappe/public/js/frappe/data_import/data_exporter.js:92 #: frappe/public/js/frappe/data_import/data_exporter.js:244 #: frappe/public/js/frappe/views/reports/query_report.js:1927 -#: frappe/public/js/frappe/views/reports/report_view.js:1634 +#: frappe/public/js/frappe/views/reports/report_view.js:1640 #: frappe/public/js/frappe/widgets/chart_widget.js:315 msgid "Export" msgstr "导出" -#: frappe/public/js/frappe/list/list_view.js:2389 +#: frappe/public/js/frappe/list/list_view.js:2400 msgctxt "Button in list view actions menu" msgid "Export" msgstr "导出" @@ -9924,11 +9927,11 @@ msgstr "导出报告:{0}" msgid "Export Type" msgstr "导出类型" -#: frappe/public/js/frappe/views/reports/report_view.js:1645 +#: frappe/public/js/frappe/views/reports/report_view.js:1651 msgid "Export all matching rows?" msgstr "导入满足筛选条件的所有记录?" -#: frappe/public/js/frappe/views/reports/report_view.js:1655 +#: frappe/public/js/frappe/views/reports/report_view.js:1661 msgid "Export all {0} rows?" msgstr "导出全部{0}行?" @@ -10263,7 +10266,7 @@ msgstr "字段" msgid "Field \"route\" is mandatory for Web Views" msgstr "Web视图必须使用字段“路由”" -#: frappe/core/doctype/doctype/doctype.py:1555 +#: frappe/core/doctype/doctype/doctype.py:1558 msgid "Field \"title\" is mandatory if \"Website Search Field\" is set." msgstr "如果设置了“网站搜索字段”,则“标题”字段是必填的。" @@ -10280,7 +10283,7 @@ msgstr "" msgid "Field Description" msgstr "字段说明" -#: frappe/core/doctype/doctype/doctype.py:1095 +#: frappe/core/doctype/doctype/doctype.py:1098 msgid "Field Missing" msgstr "缺失字段" @@ -10336,7 +10339,7 @@ msgstr "字段{0}在{1}中不存在" msgid "Field {0} is referring to non-existing doctype {1}." msgstr "字段{0}引用了不存在的文档类型{1}。" -#: frappe/core/doctype/doctype/doctype.py:1683 +#: frappe/core/doctype/doctype/doctype.py:1686 msgid "Field {0} must be a virtual field to support virtual doctype." msgstr "字段{0}必须为虚拟字段以支持虚拟文档类型。" @@ -10371,7 +10374,7 @@ msgstr "字段名" msgid "Fieldname '{0}' conflicting with a {1} of the name {2} in {3}" msgstr "字段名'{0}'与{3}中的{1} {2}冲突" -#: frappe/core/doctype/doctype/doctype.py:1094 +#: frappe/core/doctype/doctype/doctype.py:1097 msgid "Fieldname called {0} must exist to enable autonaming" msgstr "必须存在名为{0}的字段才能启用自动命名" @@ -10395,7 +10398,7 @@ msgstr "字段名{0}重复出现" msgid "Fieldname {0} cannot have special characters like {1}" msgstr "字段名{0}不能有特殊字符,如{1}" -#: frappe/core/doctype/doctype/doctype.py:2006 +#: frappe/core/doctype/doctype/doctype.py:2009 msgid "Fieldname {0} conflicting with meta object" msgstr "字段名{0}与元对象冲突" @@ -10435,7 +10438,7 @@ msgstr "字段" msgid "Fields Multicheck" msgstr "字段Multicheck" -#: frappe/core/doctype/file/file.py:441 +#: frappe/core/doctype/file/file.py:442 msgid "Fields `file_name` or `file_url` must be set for File" msgstr "文件必须设置`file_name`或`file_url`字段" @@ -10443,7 +10446,7 @@ msgstr "文件必须设置`file_name`或`file_url`字段" msgid "Fields must be a list or tuple when as_list is enabled" msgstr "启用as_list时字段必须为列表或元组" -#: frappe/database/query.py:1054 +#: frappe/database/query.py:1069 msgid "Fields must be a string, list, tuple, pypika Field, or pypika Function" msgstr "字段必须为字符串、列表、元组、pypika字段或pypika函数" @@ -10535,7 +10538,7 @@ msgstr "文件的URL" msgid "File backup is ready" msgstr "文件备份就绪" -#: frappe/core/doctype/file/file.py:656 +#: frappe/core/doctype/file/file.py:660 msgid "File name cannot have {0}" msgstr "文件名不能包含{0}" @@ -10543,16 +10546,16 @@ msgstr "文件名不能包含{0}" msgid "File not attached" msgstr "文件未添加" -#: frappe/core/doctype/file/file.py:766 frappe/public/js/frappe/request.js:198 +#: frappe/core/doctype/file/file.py:771 frappe/public/js/frappe/request.js:199 #: frappe/utils/file_manager.py:221 msgid "File size exceeded the maximum allowed size of {0} MB" msgstr "文件大小超过允许的{0} MB" -#: frappe/public/js/frappe/request.js:196 +#: frappe/public/js/frappe/request.js:197 msgid "File too big" msgstr "文件太大" -#: frappe/core/doctype/file/file.py:400 +#: frappe/core/doctype/file/file.py:401 msgid "File type of {0} is not allowed" msgstr "不允许{0}文件类型" @@ -10560,7 +10563,7 @@ msgstr "不允许{0}文件类型" msgid "File upload failed." msgstr "" -#: frappe/core/doctype/file/file.py:387 frappe/core/doctype/file/file.py:458 +#: frappe/core/doctype/file/file.py:388 frappe/core/doctype/file/file.py:459 msgid "File {0} does not exist" msgstr "文件{0}不存在" @@ -10575,7 +10578,7 @@ msgstr "文件" #: frappe/desk/doctype/number_card/number_card.js:208 #: frappe/desk/doctype/number_card/number_card.js:347 #: frappe/email/doctype/auto_email_report/auto_email_report.js:93 -#: frappe/public/js/frappe/list/base_list.js:1352 +#: frappe/public/js/frappe/list/base_list.js:1364 #: frappe/public/js/frappe/ui/filters/filter_list.js:134 #: frappe/website/doctype/web_form/web_form.js:213 msgid "Filter" @@ -10613,11 +10616,11 @@ msgstr "过滤条件名称" msgid "Filter Values" msgstr "过滤值" -#: frappe/database/query.py:712 +#: frappe/database/query.py:735 msgid "Filter condition missing after operator: {0}" msgstr "运算符后缺少筛选条件:{0}" -#: frappe/database/query.py:800 +#: frappe/database/query.py:822 msgid "Filter fields have invalid backtick notation: {0}" msgstr "" @@ -10636,11 +10639,11 @@ msgid "Filtered Records" msgstr "满足过滤条件的记录" #: frappe/website/doctype/help_article/help_article.py:91 -#: frappe/www/portal.py:57 +#: frappe/www/portal.py:58 msgid "Filtered by \"{0}\"" msgstr "基于“{0}”过滤" -#: frappe/public/js/frappe/form/controls/link.js:723 +#: frappe/public/js/frappe/form/controls/link.js:734 msgid "Filtered by: {0}." msgstr "" @@ -10711,7 +10714,7 @@ msgstr "过滤器可通过filters访问。

发送输出为{{ doc.name }} Del msgstr "如需动态主题,请使用Jinja标签,例如:{{ doc.name }} 已交付" #: frappe/public/js/frappe/views/reports/query_report.js:2248 -#: frappe/public/js/frappe/views/reports/report_view.js:102 +#: frappe/public/js/frappe/views/reports/report_view.js:104 msgid "For comparison, use >5, <10 or =324. For ranges, use 5:10 (for values between 5 & 10)." msgstr "过滤条件可以用>,<,= 比较符,两个值之间用:表示范围, 如>5, <10, =20, 5:10" @@ -11071,7 +11074,7 @@ msgstr "多个地址请分行输入,例如:test@test.com ⏎ test1@test.com" msgid "For updating, you can update only selective columns." msgstr "您只能更新选择的列。" -#: frappe/core/doctype/doctype/doctype.py:1800 +#: frappe/core/doctype/doctype/doctype.py:1803 msgid "For {0} at level {1} in {2} in row {3}" msgstr "对行{3},{2}中级别{1}的{0}" @@ -11241,7 +11244,7 @@ msgstr "Frappe Light主题" msgid "Frappe Mail" msgstr "Frappe邮件" -#: frappe/email/doctype/email_account/email_account.py:547 +#: frappe/email/doctype/email_account/email_account.py:548 msgid "Frappe Mail OAuth Error" msgstr "Frappe邮件OAuth错误" @@ -11357,7 +11360,7 @@ msgstr "全" #: frappe/contacts/doctype/contact/contact.json #: frappe/core/doctype/activity_log/activity_log.json #: frappe/core/doctype/user/user.json -#: frappe/desk/page/setup_wizard/setup_wizard.js:479 +#: frappe/desk/page/setup_wizard/setup_wizard.js:473 #: frappe/templates/signup.html:4 #: frappe/website/doctype/about_us_team_member/about_us_team_member.json msgid "Full Name" @@ -11385,11 +11388,11 @@ msgstr "函数" msgid "Function Based On" msgstr "函数基准字段" -#: frappe/__init__.py:463 +#: frappe/__init__.py:465 msgid "Function {0} is not whitelisted." msgstr "方法 {0} 申明前未添加@frappe.whitelist()装饰器" -#: frappe/database/query.py:2094 +#: frappe/database/query.py:2173 msgid "Function {0} requires arguments but none were provided" msgstr "函数{0}需要参数但未提供任何参数" @@ -11458,7 +11461,7 @@ msgstr "生成密钥" msgid "Generate New Report" msgstr "生成新报表" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:469 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:460 msgid "Generate Random Password" msgstr "生成随机密码" @@ -11468,8 +11471,8 @@ msgstr "生成随机密码" msgid "Generate Separate Documents For Each Assignee" msgstr "为每位负责人生成独立文档" -#: frappe/public/js/frappe/ui/sidebar/sidebar.js:328 -#: frappe/public/js/frappe/utils/utils.js:2069 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:348 +#: frappe/public/js/frappe/utils/utils.js:2079 msgid "Generate Tracking URL" msgstr "生成跟踪URL" @@ -11580,7 +11583,7 @@ msgstr "全局访问" msgid "Global Unsubscribe" msgstr "全部退订" -#: frappe/public/js/frappe/form/toolbar.js:879 +#: frappe/public/js/frappe/form/toolbar.js:880 msgid "Go" msgstr "确定" @@ -11866,7 +11869,7 @@ msgstr "分组统计类型" msgid "Group By field is required to create a dashboard chart" msgstr "创建仪表板图表需要分组依据字段" -#: frappe/database/query.py:1242 +#: frappe/database/query.py:1257 msgid "Group By must be a string" msgstr "分组依据必须为字符串" @@ -12074,7 +12077,7 @@ msgstr "页眉/页脚脚本可用于添加动态行为" msgid "Headers" msgstr "头" -#: frappe/email/email_body.py:323 +#: frappe/email/email_body.py:325 msgid "Headers must be a dictionary" msgstr "请求头必须为字典类型" @@ -12166,7 +12169,7 @@ msgstr "黑体" msgid "Helvetica Neue" msgstr "Helvetica Neue字体" -#: frappe/public/js/frappe/utils/utils.js:2066 +#: frappe/public/js/frappe/utils/utils.js:2076 msgid "Here's your tracking URL" msgstr "这是您的跟踪URL" @@ -12310,7 +12313,7 @@ msgstr "隐藏左边栏,菜单及评论" msgid "Hide Standard Menu" msgstr "隐藏标准菜单" -#: frappe/public/js/frappe/views/calendar/calendar.js:179 +#: frappe/public/js/frappe/views/calendar/calendar.js:180 msgid "Hide Weekends" msgstr "隐藏周末" @@ -12347,7 +12350,7 @@ msgstr "隐藏导航栏" #. Option for the 'Priority' (Select) field in DocType 'ToDo' #: frappe/desk/doctype/todo/todo.json -#: frappe/public/js/frappe/form/sidebar/assign_to.js:228 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:236 msgid "High" msgstr "高" @@ -12458,19 +12461,19 @@ msgstr "您当前无工作区访问权限,可创建专属工作区。点击 #: frappe/core/doctype/data_import/importer.py:1248 #: frappe/core/doctype/user_session_display/user_session_display.json #: frappe/desk/report/todo/todo.py:36 frappe/model/meta.py:52 -#: frappe/public/js/frappe/data_import/data_exporter.js:354 -#: frappe/public/js/frappe/data_import/data_exporter.js:369 +#: frappe/public/js/frappe/data_import/data_exporter.js:368 +#: frappe/public/js/frappe/data_import/data_exporter.js:383 #: frappe/public/js/frappe/list/list_settings.js:335 -#: frappe/public/js/frappe/list/list_view.js:390 -#: frappe/public/js/frappe/list/list_view.js:454 -#: frappe/public/js/frappe/list/list_view.js:2439 +#: frappe/public/js/frappe/list/list_view.js:399 +#: frappe/public/js/frappe/list/list_view.js:463 +#: frappe/public/js/frappe/list/list_view.js:2450 #: frappe/public/js/frappe/model/meta.js:208 #: frappe/public/js/frappe/model/model.js:122 msgid "ID" msgstr "编号" #: frappe/desk/reportview.py:529 -#: frappe/public/js/frappe/views/reports/report_view.js:983 +#: frappe/public/js/frappe/views/reports/report_view.js:985 msgctxt "Label of name column in report" msgid "ID" msgstr "标识符" @@ -12554,7 +12557,7 @@ msgstr "" msgid "Icon Type" msgstr "" -#: frappe/desk/page/desktop/desktop.js:1011 +#: frappe/desk/page/desktop/desktop.js:1023 msgid "Icon is not correctly configured please check the workspace sidebar to it" msgstr "" @@ -12589,7 +12592,7 @@ msgstr "如果勾选了“加严用户权限限制”,并为用户定义了“ msgid "If Checked workflow status will not override status in list view" msgstr "如勾选,工作流状态不会覆盖列表视图中的状态字段" -#: frappe/core/doctype/doctype/doctype.py:1812 +#: frappe/core/doctype/doctype/doctype.py:1815 #: frappe/core/report/user_doctype_permissions/user_doctype_permissions.py:45 #: frappe/public/js/frappe/roles_editor.js:68 msgid "If Owner" @@ -12839,8 +12842,8 @@ msgstr "忽略的应用" msgid "Illegal Document Status for {0}" msgstr "{0}非法单据状态" -#: frappe/model/db_query.py:539 frappe/model/db_query.py:542 -#: frappe/model/db_query.py:1208 +#: frappe/model/db_query.py:541 frappe/model/db_query.py:544 +#: frappe/model/db_query.py:1219 msgid "Illegal SQL Query" msgstr "非法SQL查询" @@ -12901,11 +12904,11 @@ msgstr "图像视图" msgid "Image Width" msgstr "图片宽度" -#: frappe/core/doctype/doctype/doctype.py:1535 +#: frappe/core/doctype/doctype/doctype.py:1538 msgid "Image field must be a valid fieldname" msgstr "图像字段必须是有效的字段名" -#: frappe/core/doctype/doctype/doctype.py:1537 +#: frappe/core/doctype/doctype/doctype.py:1540 msgid "Image field must be of type Attach Image" msgstr "图像字段的类型必须为附着图像" @@ -12917,7 +12920,7 @@ msgstr "图片链接'{0}'无效" msgid "Image optimized" msgstr "图片已优化" -#: frappe/core/doctype/file/utils.py:289 +#: frappe/core/doctype/file/utils.py:302 msgid "Image: Corrupted Data Stream" msgstr "图片:数据流损坏" @@ -12927,11 +12930,11 @@ msgstr "图片" #. Option for the 'Operation' (Select) field in DocType 'Activity Log' #: frappe/core/doctype/activity_log/activity_log.json -#: frappe/core/doctype/user/user.js:379 +#: frappe/core/doctype/user/user.js:382 msgid "Impersonate" msgstr "用其它用户身份登录" -#: frappe/core/doctype/user/user.js:406 +#: frappe/core/doctype/user/user.js:409 msgid "Impersonate as {0}" msgstr "被模拟的用户" @@ -12962,7 +12965,7 @@ msgstr "隐式" msgid "Import" msgstr "导入" -#: frappe/public/js/frappe/list/list_view.js:1924 +#: frappe/public/js/frappe/list/list_view.js:1935 msgctxt "Button in list view menu" msgid "Import" msgstr "导入" @@ -13281,7 +13284,7 @@ msgstr "上层需求" #: frappe/custom/doctype/custom_field/custom_field.json frappe/model/meta.py:55 #: frappe/public/js/frappe/model/meta.js:211 #: frappe/public/js/frappe/model/model.js:124 -#: frappe/public/js/frappe/views/reports/report_view.js:1004 +#: frappe/public/js/frappe/views/reports/report_view.js:1006 msgid "Index" msgstr "索引" @@ -13379,7 +13382,7 @@ msgstr "在自定义字段“{1}”中参照的标题为“{2}”字段“{0}” msgid "Insert Below" msgstr "下面插入" -#: frappe/public/js/frappe/views/reports/report_view.js:389 +#: frappe/public/js/frappe/views/reports/report_view.js:391 msgid "Insert Column Before {0}" msgstr "在{0}之前插入列" @@ -13436,7 +13439,7 @@ msgstr "电子邮件说明" msgid "Insufficient Permission Level for {0}" msgstr "{0}权限级别不足" -#: frappe/database/query.py:1308 +#: frappe/database/query.py:1323 msgid "Insufficient Permission for {0}" msgstr "{0} 权限不足" @@ -13504,7 +13507,7 @@ msgstr "兴趣爱好" msgid "Intermediate" msgstr "中级" -#: frappe/public/js/frappe/request.js:233 +#: frappe/public/js/frappe/request.js:234 msgid "Internal Server Error" msgstr "内部服务器错误" @@ -13559,7 +13562,7 @@ msgstr "无效" #: frappe/public/js/form_builder/utils.js:221 #: frappe/public/js/frappe/form/grid_row.js:848 #: frappe/public/js/frappe/form/layout.js:809 -#: frappe/public/js/frappe/views/reports/report_view.js:715 +#: frappe/public/js/frappe/views/reports/report_view.js:717 msgid "Invalid \"depends_on\" expression" msgstr "“depends_on”表达式无效" @@ -13603,7 +13606,7 @@ msgstr "日期无效" msgid "Invalid DocType" msgstr "文档类型无效" -#: frappe/database/query.py:345 +#: frappe/query_builder/builder.py:59 msgid "Invalid DocType: {0}" msgstr "无效文档类型:{0}" @@ -13611,17 +13614,17 @@ msgstr "无效文档类型:{0}" msgid "Invalid Doctype" msgstr "无效文档类型" -#: frappe/core/doctype/doctype/doctype.py:1292 -#: frappe/core/doctype/doctype/doctype.py:1301 +#: frappe/core/doctype/doctype/doctype.py:1295 +#: frappe/core/doctype/doctype/doctype.py:1304 msgid "Invalid Fieldname" msgstr "字段名无效" -#: frappe/core/doctype/file/file.py:231 +#: frappe/core/doctype/file/file.py:232 msgid "Invalid File URL" msgstr "文件URL无效" -#: frappe/database/query.py:802 frappe/database/query.py:829 -#: frappe/database/query.py:839 frappe/database/query.py:862 +#: frappe/database/query.py:824 frappe/database/query.py:851 +#: frappe/database/query.py:861 msgid "Invalid Filter" msgstr "无效筛选器" @@ -13664,8 +13667,8 @@ msgstr "无效命名规则:{}" msgid "Invalid Operation" msgstr "无效操作" -#: frappe/core/doctype/doctype/doctype.py:1670 -#: frappe/core/doctype/doctype/doctype.py:1678 +#: frappe/core/doctype/doctype/doctype.py:1673 +#: frappe/core/doctype/doctype/doctype.py:1681 msgid "Invalid Option" msgstr "错误选项" @@ -13677,7 +13680,7 @@ msgstr "出站邮件服务器或端口无效:{0}" msgid "Invalid Output Format" msgstr "无效的输出格式" -#: frappe/model/base_document.py:128 +#: frappe/model/base_document.py:125 msgid "Invalid Override" msgstr "无效覆盖" @@ -13703,7 +13706,7 @@ msgstr "无效请求" msgid "Invalid Search Field {0}" msgstr "无效的搜索字段{0}" -#: frappe/core/doctype/doctype/doctype.py:1232 +#: frappe/core/doctype/doctype/doctype.py:1235 msgid "Invalid Table Fieldname" msgstr "表字段名无效" @@ -13711,7 +13714,7 @@ msgstr "表字段名无效" msgid "Invalid Transition" msgstr "无效转换" -#: frappe/core/doctype/file/file.py:242 +#: frappe/core/doctype/file/file.py:243 #: frappe/public/js/frappe/file_uploader/FileUploader.vue:551 #: frappe/public/js/frappe/widgets/widget_dialog.js:602 #: frappe/utils/csvutils.py:226 frappe/utils/csvutils.py:247 @@ -13734,7 +13737,7 @@ msgstr "Webhook密钥无效" msgid "Invalid aggregate function" msgstr "无效聚合函数" -#: frappe/database/query.py:2254 +#: frappe/database/query.py:2333 msgid "Invalid alias format: {0}. Alias must be a simple identifier." msgstr "别名格式无效:{0}。别名必须为简单标识符。" @@ -13742,31 +13745,27 @@ msgstr "别名格式无效:{0}。别名必须为简单标识符。" msgid "Invalid app" msgstr "无效应用" -#: frappe/database/query.py:2215 frappe/database/query.py:2230 +#: frappe/database/query.py:2294 frappe/database/query.py:2309 msgid "Invalid argument format: {0}. Only quoted string literals or simple field names are allowed." msgstr "参数格式无效:{0}。仅允许带引号的字符串字面量或简单字段名。" -#: frappe/database/query.py:2179 +#: frappe/database/query.py:2258 msgid "Invalid argument type: {0}. Only strings, numbers, dicts, and None are allowed." msgstr "" -#: frappe/database/query.py:835 +#: frappe/database/query.py:857 msgid "Invalid characters in fieldname: {0}. Only letters, numbers, and underscores are allowed." msgstr "字段名包含无效字符:{0}。仅允许字母、数字和下划线。" -#: frappe/database/query.py:1014 -msgid "Invalid characters in table name: {0}" -msgstr "表名包含无效字符:{0}" - -#: frappe/public/js/frappe/views/reports/report_view.js:398 +#: frappe/public/js/frappe/views/reports/report_view.js:400 msgid "Invalid column" msgstr "无效列" -#: frappe/database/query.py:735 +#: frappe/database/query.py:758 msgid "Invalid condition type in nested filters: {0}" msgstr "嵌套筛选器中条件类型无效:{0}" -#: frappe/database/query.py:1286 +#: frappe/database/query.py:1301 msgid "Invalid direction in Order By: {0}. Must be 'ASC' or 'DESC'." msgstr "排序方向无效:{0}。必须为“ASC”或“DESC”。" @@ -13786,11 +13785,11 @@ msgstr "过滤器{0}中的表达式无效" msgid "Invalid expression set in filter {0} ({1})" msgstr "过滤器{0}({1})中的表达式无效" -#: frappe/database/query.py:1982 +#: frappe/database/query.py:2061 msgid "Invalid field format for SELECT: {0}. Field names must be simple, backticked, table-qualified, aliased, or '*'." msgstr "SELECT字段格式无效:{0}。字段名必须为简单名称、反引号包裹、表限定、别名或“*”。" -#: frappe/database/query.py:1227 +#: frappe/database/query.py:1242 msgid "Invalid field format in {0}: {1}. Use 'field', 'link_field.field', or 'child_table.field'." msgstr "{0}中字段格式无效:{1}。请使用“字段”、“链接字段.字段”或“子表.字段”。" @@ -13798,11 +13797,11 @@ msgstr "{0}中字段格式无效:{1}。请使用“字段”、“链接字段 msgid "Invalid field name {0}" msgstr "字段名称{0}无效" -#: frappe/database/query.py:1113 +#: frappe/database/query.py:1128 msgid "Invalid field type: {0}" msgstr "字段类型无效:{0}" -#: frappe/core/doctype/doctype/doctype.py:1103 +#: frappe/core/doctype/doctype/doctype.py:1106 msgid "Invalid fieldname '{0}' in autoname" msgstr "编号规则中字段名“{0}”无效" @@ -13810,11 +13809,11 @@ msgstr "编号规则中字段名“{0}”无效" msgid "Invalid file path: {0}" msgstr "无效的文件路径:{0}" -#: frappe/database/query.py:718 +#: frappe/database/query.py:741 msgid "Invalid filter condition: {0}. Expected a list or tuple." msgstr "筛选条件无效:{0}。期望为列表或元组。" -#: frappe/database/query.py:825 +#: frappe/database/query.py:847 msgid "Invalid filter field format: {0}. Use 'fieldname' or 'link_fieldname.target_fieldname'." msgstr "筛选字段格式无效:{0}。请使用“字段名”或“链接字段名.目标字段名”。" @@ -13822,7 +13821,7 @@ msgstr "筛选字段格式无效:{0}。请使用“字段名”或“链接字 msgid "Invalid filter: {0}" msgstr "无效过滤器:{0}" -#: frappe/database/query.py:2099 +#: frappe/database/query.py:2178 msgid "Invalid function argument type: {0}. Only strings, numbers, lists, and None are allowed." msgstr "函数参数类型无效:{0}。仅允许字符串、数字、列表和None。" @@ -13839,7 +13838,7 @@ msgstr "自定义选项中包含无效JSON:{0}" msgid "Invalid key" msgstr "密钥无效" -#: frappe/model/naming.py:496 +#: frappe/model/naming.py:511 msgid "Invalid name type (integer) for varchar name column" msgstr "varchar名称列使用了整型名称类型" @@ -13851,7 +13850,7 @@ msgstr "命名规则{}错误:缺少点号(.)" msgid "Invalid naming series {}: dot (.) missing before the numeric placeholders. Kindly use a format like ABCD.#####." msgstr "命名序列{}无效:数字占位符前缺少点号(.)。请使用类似ABCD.#####的格式。" -#: frappe/database/query.py:2171 +#: frappe/database/query.py:2250 msgid "Invalid nested expression: dictionary must represent a function or operator" msgstr "" @@ -13875,11 +13874,11 @@ msgstr "请求正文无效" msgid "Invalid role" msgstr "角色无效" -#: frappe/database/query.py:776 +#: frappe/database/query.py:798 msgid "Invalid simple filter format: {0}" msgstr "简单筛选器格式无效:{0}" -#: frappe/database/query.py:695 +#: frappe/database/query.py:718 msgid "Invalid start for filter condition: {0}. Expected a list or tuple." msgstr "筛选条件起始格式无效:{0}。期望为列表或元组。" @@ -13909,11 +13908,11 @@ msgstr "字段包含无效值:" msgid "Invalid wkhtmltopdf version" msgstr "wkhtmltopdf版本无效" -#: frappe/core/doctype/doctype/doctype.py:1593 +#: frappe/core/doctype/doctype/doctype.py:1596 msgid "Invalid {0} condition" msgstr "{0}条件无效" -#: frappe/database/query.py:2060 +#: frappe/database/query.py:2139 msgid "Invalid {0} dictionary format" msgstr "" @@ -14112,7 +14111,7 @@ msgstr "公开" msgid "Is Published Field" msgstr "是否发布字段" -#: frappe/core/doctype/doctype/doctype.py:1544 +#: frappe/core/doctype/doctype/doctype.py:1547 msgid "Is Published Field must be a valid fieldname" msgstr "已发布字段必须是有效字段" @@ -14358,7 +14357,7 @@ msgid "Join video conference with {0}" msgstr "加入与{0}的视频会议" #: frappe/public/js/frappe/form/toolbar.js:421 -#: frappe/public/js/frappe/form/toolbar.js:869 +#: frappe/public/js/frappe/form/toolbar.js:870 msgid "Jump to field" msgstr "定位到字段" @@ -14905,7 +14904,7 @@ msgid "Leave blank to repeat always" msgstr "留空将一直重复" #: frappe/core/doctype/communication/mixins.py:207 -#: frappe/email/doctype/email_account/email_account.py:720 +#: frappe/email/doctype/email_account/email_account.py:721 msgid "Leave this conversation" msgstr "离开这个谈话" @@ -14996,7 +14995,7 @@ msgstr "开始吧" msgid "Let's avoid repeated words and characters" msgstr "让我们避免重复的字、词" -#: frappe/desk/page/setup_wizard/setup_wizard.js:474 +#: frappe/desk/page/setup_wizard/setup_wizard.js:468 msgid "Let's set up your account" msgstr "设置账号" @@ -15108,7 +15107,7 @@ msgstr "浅色主题" #. Option for the 'Comment Type' (Select) field in DocType 'Comment' #: frappe/core/doctype/comment/comment.json -#: frappe/public/js/frappe/list/base_list.js:1272 +#: frappe/public/js/frappe/list/base_list.js:1284 #: frappe/public/js/frappe/ui/filters/filter.js:18 msgid "Like" msgstr "含关键字" @@ -15132,7 +15131,7 @@ msgstr "喜欢" msgid "Limit" msgstr "最大数量" -#: frappe/database/query.py:302 +#: frappe/database/query.py:297 msgid "Limit must be a non-negative integer" msgstr "限制必须为非负整数" @@ -15342,7 +15341,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:86 -#: frappe/public/js/frappe/utils/utils.js:950 +#: frappe/public/js/frappe/utils/utils.js:961 msgid "List" msgstr "列表" @@ -15372,7 +15371,7 @@ msgstr "列表过滤条件" msgid "List Settings" msgstr "列表设置" -#: frappe/public/js/frappe/list/list_view.js:2077 +#: frappe/public/js/frappe/list/list_view.js:2088 msgctxt "Button in list view menu" msgid "List Settings" msgstr "列表设置" @@ -15441,7 +15440,7 @@ msgstr "加载更多" #: frappe/public/js/frappe/form/controls/multicheck.js:13 #: frappe/public/js/frappe/form/linked_with.js:13 #: frappe/public/js/frappe/list/base_list.js:509 -#: frappe/public/js/frappe/list/list_view.js:367 +#: frappe/public/js/frappe/list/list_view.js:376 #: frappe/public/js/frappe/ui/listing.html:16 #: frappe/public/js/frappe/views/reports/query_report.js:1132 msgid "Loading" @@ -15460,8 +15459,8 @@ msgid "Loading versions..." msgstr "正在加载版本..." #: frappe/public/js/frappe/file_uploader/TreeNode.vue:45 -#: frappe/public/js/frappe/form/sidebar/share.js:57 -#: frappe/public/js/frappe/list/base_list.js:1062 +#: frappe/public/js/frappe/form/sidebar/share.js:62 +#: frappe/public/js/frappe/list/base_list.js:1064 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:91 #: frappe/public/js/frappe/views/kanban/kanban_board.html:11 #: frappe/public/js/frappe/widgets/chart_widget.js:50 @@ -15564,7 +15563,7 @@ msgstr "登录前" msgid "Login Failed please try again" msgstr "登录失败,请重试" -#: frappe/email/doctype/email_account/email_account.py:144 +#: frappe/email/doctype/email_account/email_account.py:145 msgid "Login Id is required" msgstr "登录ID是必需的" @@ -15621,6 +15620,10 @@ msgstr "登录发表评论" msgid "Login to start a new discussion" msgstr "登录以发起新讨论" +#: frappe/www/portal.py:17 +msgid "Login to view" +msgstr "" + #: frappe/www/login.html:64 msgid "Login to {0}" msgstr "登录到{0}" @@ -15676,7 +15679,7 @@ msgstr "" msgid "Logout" msgstr "注销" -#: frappe/core/doctype/user/user.js:195 +#: frappe/core/doctype/user/user.js:198 msgid "Logout All Sessions" msgstr "退出所有会话" @@ -15729,7 +15732,7 @@ msgstr "还没有收到任何通知哦~" #. Option for the 'Priority' (Select) field in DocType 'ToDo' #: frappe/desk/doctype/todo/todo.json -#: frappe/public/js/frappe/form/sidebar/assign_to.js:220 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:228 msgid "Low" msgstr "低" @@ -16058,7 +16061,7 @@ msgstr "每用户最自动邮件发送报表数" msgid "Max signups allowed per hour" msgstr "每小时允许的最大注册数" -#: frappe/core/doctype/doctype/doctype.py:1371 +#: frappe/core/doctype/doctype/doctype.py:1374 msgid "Max width for type Currency is 100px in row {0}" msgstr "行{0}中,货币类型的最大宽度是100像素" @@ -16067,7 +16070,7 @@ msgstr "行{0}中,货币类型的最大宽度是100像素" msgid "Maximum" msgstr "最大值" -#: frappe/core/doctype/file/file.py:342 +#: frappe/core/doctype/file/file.py:343 msgid "Maximum Attachment Limit of {0} has been reached for {1} {2}." msgstr "{1} {2} 已达到{0}的最大附件限制" @@ -16075,7 +16078,7 @@ msgstr "{1} {2} 已达到{0}的最大附件限制" msgid "Maximum attachment limit of {0} has been reached." msgstr "已达到{0}的最大附件限制" -#: frappe/model/rename_doc.py:689 +#: frappe/model/rename_doc.py:692 msgid "Maximum {0} rows allowed" msgstr "仅允许最多{0}行" @@ -16086,7 +16089,7 @@ msgstr "仅允许最多{0}行" msgid "Maybe" msgstr "" -#: frappe/public/js/frappe/list/base_list.js:946 +#: frappe/public/js/frappe/list/base_list.js:948 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:168 msgid "Me" msgstr "我" @@ -16098,8 +16101,8 @@ msgstr "" #. Option for the 'Priority' (Select) field in DocType 'ToDo' #. Label of the medium (Data) field in DocType 'Web Page View' #: frappe/desk/doctype/todo/todo.json -#: frappe/public/js/frappe/form/sidebar/assign_to.js:224 -#: frappe/public/js/frappe/utils/utils.js:2016 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:232 +#: frappe/public/js/frappe/utils/utils.js:2026 #: frappe/website/doctype/web_page_view/web_page_view.json #: frappe/website/report/website_analytics/website_analytics.js:40 msgid "Medium" @@ -16143,13 +16146,13 @@ msgstr "@提及" msgid "Mentions" msgstr "提及" -#: frappe/public/js/frappe/ui/page.html:58 -#: frappe/public/js/frappe/ui/page.js:173 +#: frappe/public/js/frappe/ui/page.html:59 +#: frappe/public/js/frappe/ui/page.js:174 msgid "Menu" msgstr "菜单" #: frappe/public/js/frappe/form/toolbar.js:270 -#: frappe/public/js/frappe/model/model.js:705 +#: frappe/public/js/frappe/model/model.js:717 msgid "Merge with existing" msgstr "与现有合并" @@ -16219,11 +16222,11 @@ msgstr "消息已发送" msgid "Message Type" msgstr "消息类型" -#: frappe/public/js/frappe/views/communication.js:1018 +#: frappe/public/js/frappe/views/communication.js:1019 msgid "Message clipped" msgstr "邮件被剪辑" -#: frappe/email/doctype/email_account/email_account.py:344 +#: frappe/email/doctype/email_account/email_account.py:345 msgid "Message from server: {0}" msgstr "服务器消息:{0}" @@ -16316,7 +16319,7 @@ msgstr "元数据" msgid "Method" msgstr "方法" -#: frappe/__init__.py:465 +#: frappe/__init__.py:467 msgid "Method Not Allowed" msgstr "方法不可调用" @@ -16405,7 +16408,7 @@ msgstr "小姐" msgid "Missing DocType" msgstr "缺失文档类型" -#: frappe/core/doctype/doctype/doctype.py:1555 +#: frappe/core/doctype/doctype/doctype.py:1558 msgid "Missing Field" msgstr "缺失字段" @@ -16490,7 +16493,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:953 +#: frappe/public/js/frappe/utils/utils.js:964 #: frappe/website/doctype/web_form/web_form.json #: frappe/website/doctype/web_template/web_template.json #: frappe/website/doctype/website_theme/website_theme.json @@ -16597,7 +16600,7 @@ msgstr "监控出错日志,后台任务,通讯与用户操作日志" msgid "Monospace" msgstr "等宽" -#: frappe/public/js/frappe/views/calendar/calendar.js:280 +#: frappe/public/js/frappe/views/calendar/calendar.js:282 msgid "Month" msgstr "月" @@ -16634,7 +16637,7 @@ msgstr "完整月份" #: frappe/public/js/frappe/ui/toolbar/search.js:285 #: frappe/public/js/frappe/ui/toolbar/search.js:300 #: frappe/public/js/frappe/widgets/chart_widget.js:729 -#: frappe/templates/includes/list/list.html:25 +#: frappe/templates/includes/list/list.html:27 #: frappe/templates/includes/search_template.html:13 msgid "More" msgstr "更多" @@ -16839,7 +16842,7 @@ msgstr "名称(文档名)" msgid "Name already taken, please set a new name" msgstr "名称已被占用,请设置新名称" -#: frappe/model/naming.py:510 +#: frappe/model/naming.py:525 msgid "Name cannot contain special characters like {0}" msgstr "名称不能包含特殊字符,如{0}" @@ -16851,7 +16854,7 @@ msgstr "此字段链接到的单据类型,例如客户" msgid "Name of the new Print Format" msgstr "新打印格式的名称" -#: frappe/model/naming.py:505 +#: frappe/model/naming.py:520 msgid "Name of {0} cannot be {1}" msgstr "{0}的名称不能为{1}" @@ -16892,7 +16895,7 @@ msgstr "编号规则" msgid "Naming Series" msgstr "单据编号模板" -#: frappe/model/naming.py:266 +#: frappe/model/naming.py:281 msgid "Naming Series mandatory" msgstr "单据编号模板是必填字段" @@ -16929,17 +16932,17 @@ msgstr "导航栏模板" msgid "Navbar Template Values" msgstr "导航栏模板值" -#: frappe/public/js/frappe/list/list_view.js:1398 +#: frappe/public/js/frappe/list/list_view.js:1409 msgctxt "Description of a list view shortcut" msgid "Navigate list down" msgstr "向下导航列表" -#: frappe/public/js/frappe/list/list_view.js:1405 +#: frappe/public/js/frappe/list/list_view.js:1416 msgctxt "Description of a list view shortcut" msgid "Navigate list up" msgstr "向上导航列表" -#: frappe/public/js/frappe/ui/page.js:186 +#: frappe/public/js/frappe/ui/page.js:187 msgid "Navigate to main content" msgstr "跳转到主要内容" @@ -16954,11 +16957,11 @@ msgstr "" msgid "Navigation Settings" msgstr "导航设置" -#: frappe/public/js/frappe/list/list_view.js:489 +#: frappe/public/js/frappe/list/list_view.js:498 msgid "Need Help?" msgstr "需要帮助?" -#: frappe/desk/doctype/workspace/workspace.py:336 +#: frappe/desk/doctype/workspace/workspace.py:343 msgid "Need Workspace Manager role to edit private workspace of other users" msgstr "需具备工作区管理员角色才能编辑其他用户的私有工作区" @@ -16966,7 +16969,7 @@ msgstr "需具备工作区管理员角色才能编辑其他用户的私有工作 msgid "Negative Value" msgstr "负值" -#: frappe/database/query.py:687 +#: frappe/database/query.py:710 msgid "Nested filters must be provided as a list or tuple." msgstr "嵌套筛选器必须作为列表或元组提供。" @@ -17072,7 +17075,7 @@ msgstr "从网站的联系页面新消息" #. Label of the new_name (Read Only) field in DocType 'Deleted Document' #: frappe/core/doctype/deleted_document/deleted_document.json #: frappe/public/js/frappe/form/toolbar.js:246 -#: frappe/public/js/frappe/model/model.js:713 +#: frappe/public/js/frappe/model/model.js:725 msgid "New Name" msgstr "新名称" @@ -17088,7 +17091,7 @@ msgstr "数字卡" msgid "New Onboarding" msgstr "新建入门指引" -#: frappe/core/doctype/user/user.js:183 frappe/www/update-password.html:43 +#: frappe/core/doctype/user/user.js:186 frappe/www/update-password.html:43 msgid "New Password" msgstr "新密码" @@ -17102,7 +17105,7 @@ msgstr "新的打印格式名称" msgid "New Quick List" msgstr "新建快速列表" -#: frappe/public/js/frappe/views/reports/report_view.js:1380 +#: frappe/public/js/frappe/views/reports/report_view.js:1386 msgid "New Report name" msgstr "新的报表名称" @@ -17179,7 +17182,7 @@ msgstr "要设置的新值" #: frappe/public/js/frappe/form/toolbar.js:234 #: frappe/public/js/frappe/form/toolbar.js:249 #: frappe/public/js/frappe/form/toolbar.js:597 -#: frappe/public/js/frappe/model/model.js:612 +#: frappe/public/js/frappe/model/model.js:624 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:178 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:179 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:228 @@ -17349,8 +17352,8 @@ 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:568 -#: frappe/public/js/frappe/list/base_list.js:948 +#: frappe/public/js/frappe/form/controls/link.js:579 +#: frappe/public/js/frappe/list/base_list.js:950 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:170 #: frappe/public/js/frappe/views/reports/query_report.js:47 #: frappe/website/doctype/help_article/templates/help_article.html:26 @@ -17449,7 +17452,7 @@ msgstr "无标签" msgid "No Letterhead" msgstr "无信头" -#: frappe/model/naming.py:487 +#: frappe/model/naming.py:502 msgid "No Name Specified for {0}" msgstr "{0}未指定名称" @@ -17457,7 +17460,7 @@ msgstr "{0}未指定名称" msgid "No New notifications" msgstr "暂无新通知" -#: frappe/core/doctype/doctype/doctype.py:1792 +#: frappe/core/doctype/doctype/doctype.py:1795 msgid "No Permissions Specified" msgstr "未指定权限" @@ -17509,7 +17512,7 @@ msgstr "无生成看板列所需的单选字段" msgid "No Suggestions" msgstr "无建议" -#: frappe/desk/reportview.py:710 +#: frappe/desk/reportview.py:711 msgid "No Tags" msgstr "无标签" @@ -17597,7 +17600,7 @@ msgstr "找不到可用作看板列的字段。使用“定制表单”添加“ msgid "No file attached" msgstr "文件未添加" -#: frappe/public/js/frappe/list/base_list.js:1075 +#: frappe/public/js/frappe/list/base_list.js:1077 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:100 msgid "No filters found" msgstr "无过滤条件" @@ -17645,7 +17648,7 @@ msgstr "记录数(最大500行)" msgid "No of Sent SMS" msgstr "发送短信数量" -#: frappe/__init__.py:620 frappe/client.py:119 frappe/client.py:161 +#: frappe/__init__.py:622 frappe/client.py:119 frappe/client.py:161 msgid "No permission for {0}" msgstr "无权限操作{0}" @@ -17654,7 +17657,7 @@ msgctxt "{0} = verb, {1} = object" msgid "No permission to '{0}' {1}" msgstr "无权限'{0}' {1}" -#: frappe/model/db_query.py:1035 +#: frappe/model/db_query.py:1046 msgid "No permission to read {0}" msgstr "没有读取{0}的权限" @@ -17682,7 +17685,7 @@ msgstr "没有满足条件的记录" msgid "No rows" msgstr "无行数据" -#: frappe/public/js/frappe/list/list_view.js:2406 +#: frappe/public/js/frappe/list/list_view.js:2417 msgid "No rows selected" msgstr "" @@ -17699,7 +17702,7 @@ msgid "No user has the role {0}" msgstr "" #: frappe/public/js/frappe/form/controls/multiselect_list.js:276 -#: frappe/public/js/frappe/utils/utils.js:988 +#: frappe/public/js/frappe/utils/utils.js:999 msgid "No values to show" msgstr "没有要显示的值" @@ -17711,7 +17714,7 @@ msgstr "无{0}" msgid "No {0} found" msgstr "没有找到{0}" -#: frappe/public/js/frappe/list/list_view.js:503 +#: frappe/public/js/frappe/list/list_view.js:512 msgid "No {0} found with matching filters. Clear filters to see all {0}." msgstr "未找到匹配当前筛选条件的{0},请清除筛选条件后查看全部{0}" @@ -17810,7 +17813,7 @@ msgstr "未链接到任何记录" msgid "Not Nullable" msgstr "不可为空" -#: frappe/__init__.py:547 frappe/app.py:383 frappe/desk/calendar.py:28 +#: frappe/__init__.py:549 frappe/app.py:383 frappe/desk/calendar.py:28 #: frappe/public/js/frappe/web_form/webform_script.js:15 #: frappe/website/doctype/web_form/web_form.py:779 #: frappe/website/page_renderers/not_permitted_page.py:22 @@ -17829,12 +17832,12 @@ msgid "Not Published" msgstr "未发布" #: frappe/public/js/frappe/form/toolbar.js:316 -#: frappe/public/js/frappe/form/toolbar.js:852 +#: frappe/public/js/frappe/form/toolbar.js:853 #: frappe/public/js/frappe/model/indicator.js:28 #: frappe/public/js/frappe/views/kanban/kanban_view.js:183 -#: frappe/public/js/frappe/views/reports/report_view.js:203 +#: frappe/public/js/frappe/views/reports/report_view.js:205 #: frappe/public/js/print_format_builder/print_format_builder.bundle.js:39 -#: frappe/website/doctype/web_form/templates/web_form.html:85 +#: frappe/website/doctype/web_form/templates/web_form.html:94 msgid "Not Saved" msgstr "尚未保存" @@ -17849,7 +17852,7 @@ msgstr "未阅" msgid "Not Sent" msgstr "未发送" -#: frappe/public/js/frappe/list/base_list.js:944 +#: frappe/public/js/frappe/list/base_list.js:946 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:166 msgid "Not Set" msgstr "空值" @@ -17916,9 +17919,9 @@ msgid "Not in Developer Mode! Set in site_config.json or make 'Custom' DocType." msgstr "未开启开发模式!请在site_config.json中设置或创建一个自定义单据类型" #: frappe/core/doctype/system_settings/system_settings.py:234 -#: frappe/public/js/frappe/request.js:157 -#: frappe/public/js/frappe/request.js:168 -#: frappe/public/js/frappe/request.js:173 +#: frappe/public/js/frappe/request.js:158 +#: frappe/public/js/frappe/request.js:169 +#: frappe/public/js/frappe/request.js:174 #: frappe/public/js/frappe/views/kanban/kanban_board.bundle.js:67 #: frappe/utils/messages.py:161 frappe/website/doctype/web_form/web_form.py:792 #: frappe/website/js/website.js:97 @@ -17948,7 +17951,7 @@ msgstr "看过笔记的人" msgid "Note:" msgstr "备注:" -#: frappe/public/js/frappe/utils/utils.js:776 +#: frappe/public/js/frappe/utils/utils.js:787 msgid "Note: Changing the Page Name will break previous URL to this page." msgstr "注意:更改页面名称将会破坏此页面的上一个URL。" @@ -17968,7 +17971,7 @@ msgstr "注意:为获得最佳效果,图像必须大小相同,宽度必须 msgid "Note: Multiple sessions will be allowed in case of mobile device" msgstr "注:在使用移动设备时允许多个会话" -#: frappe/core/doctype/user/user.js:394 +#: frappe/core/doctype/user/user.js:397 msgid "Note: This will be shared with user." msgstr "此登录行为将通知对应用户" @@ -17994,7 +17997,7 @@ msgstr "无内容可撤销" #: frappe/public/js/frappe/list/base_list.js:364 #: frappe/public/js/frappe/views/reports/query_report.js:106 -#: frappe/templates/includes/list/list.html:9 +#: frappe/templates/includes/list/list.html:14 #: frappe/website/doctype/help_article/templates/help_article_list.html:21 msgid "Nothing to show" msgstr "无数据" @@ -18010,7 +18013,7 @@ msgstr "无需更新" #: frappe/core/doctype/communication/mixins.py:142 #: frappe/desk/doctype/event_notifications/event_notifications.json #: frappe/email/doctype/notification/notification.json -#: frappe/public/js/frappe/ui/sidebar/sidebar.js:294 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:314 msgid "Notification" msgstr "通知" @@ -18336,7 +18339,7 @@ msgstr "X轴偏移" msgid "Offset Y" msgstr "Y轴偏移" -#: frappe/database/query.py:307 +#: frappe/database/query.py:302 msgid "Offset must be a non-negative integer" msgstr "偏移量必须为非负整数" @@ -18411,7 +18414,7 @@ msgstr "在或之后" msgid "On or Before" msgstr "在或之前" -#: frappe/public/js/frappe/views/communication.js:1028 +#: frappe/public/js/frappe/views/communication.js:1029 msgid "On {0}, {1} wrote:" msgstr "{0},{1}写道:" @@ -18496,7 +18499,7 @@ msgstr "只允许管理员使用记录器" msgid "Only Allow Edit For" msgstr "角色(允许编辑)" -#: frappe/core/doctype/doctype/doctype.py:1649 +#: frappe/core/doctype/doctype/doctype.py:1652 msgid "Only Options allowed for Data field are:" msgstr "数据字段仅允许以下选项:" @@ -18505,7 +18508,7 @@ msgstr "数据字段仅允许以下选项:" msgid "Only Send Records Updated in Last X Hours" msgstr "只发送最后X小时更新的记录" -#: frappe/core/doctype/file/file.py:167 +#: frappe/core/doctype/file/file.py:168 msgid "Only System Managers can make this file public." msgstr "" @@ -18589,8 +18592,8 @@ msgctxt "Access" msgid "Open" msgstr "打开" -#: frappe/desk/page/desktop/desktop.js:478 -#: frappe/desk/page/desktop/desktop.js:487 +#: frappe/desk/page/desktop/desktop.js:489 +#: frappe/desk/page/desktop/desktop.js:498 #: frappe/public/js/frappe/ui/keyboard.js:207 #: frappe/public/js/frappe/ui/keyboard.js:217 msgid "Open Awesomebar" @@ -18656,7 +18659,7 @@ msgstr "在新标签页打开" msgid "Open in new tab" msgstr "" -#: frappe/public/js/frappe/list/list_view.js:1451 +#: frappe/public/js/frappe/list/list_view.js:1462 msgctxt "Description of a list view shortcut" msgid "Open list item" msgstr "打开列表项" @@ -18712,7 +18715,7 @@ msgstr "工序" msgid "Operator must be one of {0}" msgstr "运算符必须是{0}" -#: frappe/database/query.py:2127 +#: frappe/database/query.py:2206 msgid "Operator {0} requires exactly 2 arguments (left and right operands)" msgstr "" @@ -18738,7 +18741,7 @@ msgstr "选项2" msgid "Option 3" msgstr "选项3" -#: frappe/core/doctype/doctype/doctype.py:1667 +#: frappe/core/doctype/doctype/doctype.py:1670 msgid "Option {0} for field {1} is not a child table" msgstr "为字段{1}设置的选项{0}未被定义为是子表" @@ -18772,7 +18775,7 @@ msgstr "可选:在这个表达式为真时发送通知" msgid "Options" msgstr "选项" -#: frappe/core/doctype/doctype/doctype.py:1395 +#: frappe/core/doctype/doctype/doctype.py:1398 msgid "Options 'Dynamic Link' type of field must point to another Link Field with options as 'DocType'" msgstr "选择“动态链接”类型的字段都必须指向另一个选项为'DocType“的链接字段" @@ -18781,7 +18784,7 @@ msgstr "选择“动态链接”类型的字段都必须指向另一个选项为 msgid "Options Help" msgstr "选项帮助" -#: frappe/core/doctype/doctype/doctype.py:1696 +#: frappe/core/doctype/doctype/doctype.py:1699 msgid "Options for Rating field can range from 3 to 10" msgstr "评分字段选项范围3至10" @@ -18789,7 +18792,7 @@ msgstr "评分字段选项范围3至10" msgid "Options for select. Each option on a new line." msgstr "选择项。每行一个选项。" -#: frappe/core/doctype/doctype/doctype.py:1412 +#: frappe/core/doctype/doctype/doctype.py:1415 msgid "Options for {0} must be set before setting the default value." msgstr "设置默认值前必须先设置{0}的选项。" @@ -18797,7 +18800,7 @@ msgstr "设置默认值前必须先设置{0}的选项。" msgid "Options is required for field {0} of type {1}" msgstr "{1}类型字段{0}必须设置选项" -#: frappe/model/base_document.py:986 +#: frappe/model/base_document.py:999 msgid "Options not set for link field {0}" msgstr "链接字段未设置选项{0}" @@ -18813,7 +18816,7 @@ msgstr "橙色" msgid "Order" msgstr "订购" -#: frappe/database/query.py:1258 +#: frappe/database/query.py:1273 msgid "Order By must be a string" msgstr "排序依据必须为字符串" @@ -18919,7 +18922,7 @@ msgstr "PATCH方法" msgid "PDF" msgstr "PDF" -#: frappe/utils/print_format.py:148 frappe/utils/print_format.py:192 +#: frappe/utils/print_format.py:149 frappe/utils/print_format.py:193 msgid "PDF Generation in Progress" msgstr "PDF文件生成中" @@ -18950,7 +18953,7 @@ msgstr "PDF页宽(毫米)" msgid "PDF Settings" msgstr "PDF设置" -#: frappe/utils/print_format.py:334 +#: frappe/utils/print_format.py:343 msgid "PDF generation failed" msgstr "PDF生成失败" @@ -18971,6 +18974,10 @@ msgstr "不支持通过 \"原始打印 \"进行 PDF 打印。" msgid "PID" msgstr "进程ID" +#: frappe/email/oauth.py:75 +msgid "POP3 OAuth authentication failed for Email Account {0}" +msgstr "" + #. Option for the 'Method' (Select) field in DocType 'Recorder' #. Option for the 'Request Method' (Select) field in DocType 'Webhook' #: frappe/core/doctype/recorder/recorder.json @@ -19181,11 +19188,11 @@ msgstr "父字段" #. Label of the nsm_parent_field (Data) field in DocType 'DocType' #: frappe/core/doctype/doctype/doctype.json -#: frappe/core/doctype/doctype/doctype.py:951 +#: frappe/core/doctype/doctype/doctype.py:954 msgid "Parent Field (Tree)" msgstr "父字段(树)" -#: frappe/core/doctype/doctype/doctype.py:957 +#: frappe/core/doctype/doctype/doctype.py:960 msgid "Parent Field must be a valid fieldname" msgstr "父字段必须是有效字段名" @@ -19199,7 +19206,7 @@ msgstr "" msgid "Parent Label" msgstr "父标签" -#: frappe/core/doctype/doctype/doctype.py:1215 +#: frappe/core/doctype/doctype/doctype.py:1218 msgid "Parent Missing" msgstr "父项缺失" @@ -19273,11 +19280,11 @@ msgstr "已创建" #. Option for the 'Fieldtype' (Select) field in DocType 'Web Form Field' #: frappe/core/doctype/docfield/docfield.json #: frappe/core/doctype/system_settings/system_settings.json -#: frappe/core/doctype/user/user.js:170 frappe/core/doctype/user/user.js:217 -#: frappe/core/doctype/user/user.js:237 +#: frappe/core/doctype/user/user.js:173 frappe/core/doctype/user/user.js:220 +#: frappe/core/doctype/user/user.js:240 #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json -#: frappe/desk/page/setup_wizard/setup_wizard.js:493 +#: frappe/desk/page/setup_wizard/setup_wizard.js:487 #: frappe/email/doctype/email_account/email_account.json #: frappe/website/doctype/web_form_field/web_form_field.json #: frappe/www/login.html:22 @@ -19310,7 +19317,7 @@ msgstr "密码修改成功" msgid "Password for Base DN" msgstr "密码基础DN" -#: frappe/email/doctype/email_account/email_account.py:189 +#: frappe/email/doctype/email_account/email_account.py:190 msgid "Password is required or select Awaiting Password" msgstr "需要密码,或者选择等待密码" @@ -19350,7 +19357,7 @@ msgstr "密码长度超过允许最大值" msgid "Passwords do not match" msgstr "密码不匹配" -#: frappe/core/doctype/user/user.js:203 +#: frappe/core/doctype/user/user.js:206 msgid "Passwords do not match!" msgstr "密码不匹配!" @@ -19501,7 +19508,7 @@ msgstr "永久丢弃{0}?" msgid "Permanently Submit {0}?" msgstr "正式提交{0}?" -#: frappe/public/js/frappe/model/model.js:684 +#: frappe/public/js/frappe/model/model.js:696 msgid "Permanently delete {0}?" msgstr "永久删除{0} ?" @@ -19509,7 +19516,7 @@ msgstr "永久删除{0} ?" msgid "Permission" msgstr "" -#: frappe/core/doctype/user_type/user_type.py:84 frappe/database/query.py:957 +#: frappe/core/doctype/user_type/user_type.py:84 frappe/database/query.py:977 msgid "Permission Error" msgstr "权限错误" @@ -19570,15 +19577,15 @@ msgstr "" #: frappe/core/doctype/docperm/docperm.json #: frappe/core/doctype/doctype/doctype.json #: frappe/core/doctype/system_settings/system_settings.json -#: frappe/core/doctype/user/user.js:136 frappe/core/doctype/user/user.js:145 -#: frappe/core/doctype/user/user.js:154 +#: frappe/core/doctype/user/user.js:139 frappe/core/doctype/user/user.js:148 +#: frappe/core/doctype/user/user.js:157 #: frappe/core/page/permission_manager/permission_manager.js:222 #: frappe/custom/doctype/customize_form_field/customize_form_field.json msgid "Permissions" msgstr "权限" -#: frappe/core/doctype/doctype/doctype.py:1933 -#: frappe/core/doctype/doctype/doctype.py:1943 +#: frappe/core/doctype/doctype/doctype.py:1936 +#: frappe/core/doctype/doctype/doctype.py:1946 msgid "Permissions Error" msgstr "权限错误" @@ -19669,8 +19676,8 @@ msgid "Phone Number {0} set in field {1} is not valid." msgstr "字段{1}中设置的电话号码{0}无效" #: frappe/public/js/frappe/form/print_utils.js:69 -#: frappe/public/js/frappe/views/reports/report_view.js:1571 -#: frappe/public/js/frappe/views/reports/report_view.js:1574 +#: frappe/public/js/frappe/views/reports/report_view.js:1577 +#: frappe/public/js/frappe/views/reports/report_view.js:1580 msgid "Pick Columns" msgstr "选择报表输出字段" @@ -19712,7 +19719,7 @@ msgstr "纯文本" msgid "Plant" msgstr "工厂" -#: frappe/email/doctype/email_account/email_account.py:544 +#: frappe/email/doctype/email_account/email_account.py:545 msgid "Please Authorize OAuth for Email Account {0}" msgstr "请为邮箱账户{0}授权OAuth" @@ -19768,7 +19775,7 @@ msgstr "请附加安装包" msgid "Please check the filter values set for Dashboard Chart: {}" msgstr "请检查仪表板图表设置的过滤值:{}" -#: frappe/model/base_document.py:1066 +#: frappe/model/base_document.py:1079 msgid "Please check the value of \"Fetch From\" set for field {0}" msgstr "请检查为字段{0}设置的“提取自”的值" @@ -19837,7 +19844,7 @@ msgstr "禁用用户名/密码登录前,请至少启用一个社交登录密 #: frappe/printing/page/print/print.js:705 #: frappe/printing/page/print/print.js:747 #: frappe/public/js/frappe/list/bulk_operations.js:161 -#: frappe/public/js/frappe/utils/utils.js:1696 +#: frappe/public/js/frappe/utils/utils.js:1706 msgid "Please enable pop-ups" msgstr "请启用弹出窗口" @@ -19936,11 +19943,11 @@ msgstr "请在打印机设置中移除打印机映射后重试" msgid "Please save before attaching." msgstr "请安装前保存。" -#: frappe/public/js/frappe/form/sidebar/assign_to.js:55 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:63 msgid "Please save the document before assignment" msgstr "分派待办前请先保存单据" -#: frappe/public/js/frappe/form/sidebar/assign_to.js:75 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:83 msgid "Please save the document before removing assignment" msgstr "请删除分派之前保存的单据" @@ -19948,7 +19955,7 @@ msgstr "请删除分派之前保存的单据" msgid "Please save the form before previewing the message" msgstr "" -#: frappe/public/js/frappe/views/reports/report_view.js:1723 +#: frappe/public/js/frappe/views/reports/report_view.js:1729 msgid "Please save the report first" msgstr "请先保存报表" @@ -19988,7 +19995,7 @@ msgstr "请先选择文件" msgid "Please select a file or url" msgstr "请选择一个文件或URL" -#: frappe/model/rename_doc.py:684 +#: frappe/model/rename_doc.py:687 msgid "Please select a valid csv file with data" msgstr "请选择与数据的有效csv文件" @@ -20000,7 +20007,7 @@ msgstr "请选择有效日期过滤器" msgid "Please select applicable Doctypes" msgstr "请选择单据类型" -#: frappe/model/db_query.py:1249 +#: frappe/model/db_query.py:1260 msgid "Please select atleast 1 column from {0} to sort/group" msgstr "请选择从{0}进行排序/组ATLEAST 1柱" @@ -20038,7 +20045,7 @@ msgstr "请设置过滤条件" msgid "Please set filters value in Report Filter table." msgstr "请设置在报表过滤表过滤条件值。" -#: frappe/model/naming.py:578 +#: frappe/model/naming.py:593 msgid "Please set the document name" msgstr "请设置文档名称" @@ -20062,11 +20069,11 @@ msgstr "请先设置一条消息" msgid "Please setup default outgoing Email Account from Settings > Email Account" msgstr "请通过设置 > 邮箱账户配置默认发件账户" -#: frappe/email/doctype/email_account/email_account.py:432 +#: frappe/email/doctype/email_account/email_account.py:433 msgid "Please setup default outgoing Email Account from Tools > Email Account" msgstr "请通过工具 > 邮箱账户配置默认发件账户" -#: frappe/public/js/frappe/model/model.js:774 +#: frappe/public/js/frappe/model/model.js:786 msgid "Please specify" msgstr "请先输入" @@ -20098,7 +20105,7 @@ msgstr "请指定需要检查的日期时间字段" msgid "Please specify which value field must be checked" msgstr "请指定必须检查的值字段" -#: frappe/public/js/frappe/request.js:185 +#: frappe/public/js/frappe/request.js:186 #: frappe/public/js/frappe/views/translation_manager.js:102 msgid "Please try again" msgstr "请再试一次" @@ -20219,11 +20226,11 @@ msgstr "过账时间戳" msgid "Precision" msgstr "精度" -#: frappe/core/doctype/doctype/doctype.py:1705 +#: frappe/core/doctype/doctype/doctype.py:1708 msgid "Precision ({0}) for {1} cannot be greater than its length ({2})." msgstr "{1}的精度({0})不能大于其长度({2})。" -#: frappe/core/doctype/doctype/doctype.py:1429 +#: frappe/core/doctype/doctype/doctype.py:1432 msgid "Precision should be between 1 and 6" msgstr "精度应为1和6之间" @@ -20418,12 +20425,12 @@ msgstr "文档类型{0}的主键存在值,不可修改" #: frappe/public/js/frappe/form/templates/print_layout.html:46 #: frappe/public/js/frappe/list/bulk_operations.js:95 #: frappe/public/js/frappe/views/reports/query_report.js:1896 -#: frappe/public/js/frappe/views/reports/report_view.js:1533 +#: frappe/public/js/frappe/views/reports/report_view.js:1539 #: frappe/public/js/frappe/views/treeview.js:500 frappe/www/printview.html:18 msgid "Print" msgstr "打印" -#: frappe/public/js/frappe/list/list_view.js:2253 +#: frappe/public/js/frappe/list/list_view.js:2264 msgctxt "Button in list view actions menu" msgid "Print" msgstr "打印" @@ -20608,7 +20615,7 @@ msgstr "打印机设置" msgid "Printer mapping not set." msgstr "未设置打印机映射" -#: frappe/utils/print_format.py:336 +#: frappe/utils/print_format.py:345 msgid "Printing failed" msgstr "打印失败" @@ -20621,7 +20628,7 @@ msgstr "打印失败" #: frappe/core/doctype/document_naming_rule/document_naming_rule.json #: frappe/desk/doctype/todo/todo.json frappe/desk/report/todo/todo.py:37 #: frappe/email/doctype/email_queue/email_queue.json -#: frappe/public/js/frappe/form/sidebar/assign_to.js:214 +#: frappe/public/js/frappe/form/sidebar/assign_to.js:222 #: frappe/website/doctype/web_page/web_page.json msgid "Priority" msgstr "优先级" @@ -20688,7 +20695,7 @@ msgstr "个人资料图片" msgid "Profile updated successfully." msgstr "个人资料更新成功." -#: frappe/public/js/frappe/socketio_client.js:82 +#: frappe/public/js/frappe/socketio_client.js:86 msgid "Progress" msgstr "进展" @@ -20736,7 +20743,7 @@ msgstr "属性类型" msgid "Protect Attached Files" msgstr "保护上传的附件(文件)" -#: frappe/core/doctype/file/file.py:533 +#: frappe/core/doctype/file/file.py:534 msgid "Protected File" msgstr "受保护文件" @@ -20970,10 +20977,6 @@ msgstr "查询报表" msgid "Query analysis complete. Check suggested indexes." msgstr "查询分析完成,请检查建议索引" -#: frappe/utils/safe_exec.py:497 -msgid "Query must be of SELECT or read-only WITH type." -msgstr "查询必须为SELECT或只读WITH类型" - #. Label of the queue (Select) field in DocType 'RQ Job' #. Label of the queue (Data) field in DocType 'System Health Report Queue' #: frappe/core/doctype/rq_job/rq_job.json @@ -21135,7 +21138,7 @@ msgstr "原生命令" msgid "Raw Email" msgstr "原始电子邮件" -#: frappe/core/doctype/communication/email.py:95 +#: frappe/core/doctype/communication/email.py:97 msgid "Raw HTML can be used only with Email Templates having 'Use HTML' checked. Proceeding with plain text email." msgstr "" @@ -21164,7 +21167,7 @@ msgstr "原始打印设置" msgid "Re-Run in Console" msgstr "在控制台重新运行" -#: frappe/email/doctype/email_account/email_account.py:726 +#: frappe/email/doctype/email_account/email_account.py:727 msgid "Re:" msgstr "回覆:" @@ -21247,6 +21250,10 @@ msgstr "阅读模式" msgid "Read the documentation to know more" msgstr "查阅文档以了解更多" +#: frappe/utils/safe_exec.py:494 +msgid "Read-Only queries are allowed" +msgstr "" + #. Label of the readme (Markdown Editor) field in DocType 'Package' #: frappe/core/doctype/package/package.json msgid "Readme" @@ -21356,7 +21363,7 @@ msgstr "记录器建议索引" msgid "Records for following doctypes will be filtered" msgstr "以下单据类型的记录将被过滤" -#: frappe/core/doctype/doctype/doctype.py:1637 +#: frappe/core/doctype/doctype/doctype.py:1640 msgid "Recursive Fetch From" msgstr "递归获取自" @@ -21680,13 +21687,13 @@ msgstr "刷新打印预览" msgid "Refresh Token" msgstr "刷新令牌" -#: frappe/public/js/frappe/list/list_view.js:540 +#: frappe/public/js/frappe/list/list_view.js:549 msgctxt "Document count in list view" msgid "Refreshing" msgstr "正在刷新" #: frappe/core/doctype/system_settings/system_settings.js:57 -#: frappe/core/doctype/user/user.js:369 +#: frappe/core/doctype/user/user.js:372 #: frappe/desk/page/setup_wizard/setup_wizard.js:211 msgid "Refreshing..." msgstr "正在刷新..." @@ -21852,7 +21859,7 @@ msgstr "已移除" #: frappe/public/js/frappe/form/toolbar.js:282 #: frappe/public/js/frappe/form/toolbar.js:286 #: frappe/public/js/frappe/form/toolbar.js:458 -#: frappe/public/js/frappe/model/model.js:723 +#: frappe/public/js/frappe/model/model.js:735 #: frappe/public/js/frappe/views/treeview.js:319 msgid "Rename" msgstr "修改单据编号(名称)" @@ -21862,7 +21869,7 @@ msgstr "修改单据编号(名称)" msgid "Rename Fieldname" msgstr "修改字段名" -#: frappe/public/js/frappe/model/model.js:710 +#: frappe/public/js/frappe/model/model.js:722 msgid "Rename {0}" msgstr "修改{0}的单据编号" @@ -22004,9 +22011,9 @@ msgstr "全部回复" #: frappe/email/doctype/auto_email_report/auto_email_report.json #: frappe/printing/doctype/print_format/print_format.json #: frappe/printing/doctype/print_format/print_format.py:104 -#: frappe/public/js/frappe/request.js:614 +#: frappe/public/js/frappe/request.js:615 #: frappe/public/js/frappe/ui/toolbar/search_utils.js:95 -#: frappe/public/js/frappe/utils/utils.js:947 +#: frappe/public/js/frappe/utils/utils.js:958 msgid "Report" msgstr "报表" @@ -22139,7 +22146,7 @@ msgstr "报表超时" msgid "Report updated successfully" msgstr "报表已成功更新" -#: frappe/public/js/frappe/views/reports/report_view.js:1353 +#: frappe/public/js/frappe/views/reports/report_view.js:1359 msgid "Report was not saved (there were errors)" msgstr "报表尚未保存(有错误)" @@ -22164,7 +22171,7 @@ msgstr "报表{0}无效" msgid "Report {0} saved" msgstr "报表{0}已保存" -#: frappe/public/js/frappe/views/reports/report_view.js:20 +#: frappe/public/js/frappe/views/reports/report_view.js:21 msgid "Report:" msgstr "报表:" @@ -22238,13 +22245,13 @@ msgstr "请求方法" msgid "Request Structure" msgstr "请求数据格式" -#: frappe/public/js/frappe/request.js:229 +#: frappe/public/js/frappe/request.js:230 msgid "Request Timed Out" msgstr "请求超时" #. Label of the timeout (Int) field in DocType 'Webhook' #: frappe/integrations/doctype/webhook/webhook.json -#: frappe/public/js/frappe/request.js:242 +#: frappe/public/js/frappe/request.js:243 msgid "Request Timeout" msgstr "请求超时" @@ -22313,7 +22320,7 @@ msgstr "重置仪表板自定义" msgid "Reset Fields" msgstr "重置字段" -#: frappe/core/doctype/user/user.js:177 frappe/core/doctype/user/user.js:180 +#: frappe/core/doctype/user/user.js:180 frappe/core/doctype/user/user.js:183 msgid "Reset LDAP Password" msgstr "重置LDAP密码" @@ -22321,11 +22328,11 @@ msgstr "重置LDAP密码" msgid "Reset Layout" msgstr "重置" -#: frappe/core/doctype/user/user.js:228 +#: frappe/core/doctype/user/user.js:231 msgid "Reset OTP Secret" msgstr "重置一次性密码" -#: frappe/core/doctype/user/user.js:161 frappe/www/login.html:194 +#: frappe/core/doctype/user/user.js:164 frappe/www/login.html:194 #: frappe/www/me.html:48 frappe/www/update-password.html:3 #: frappe/www/update-password.html:32 msgid "Reset Password" @@ -22476,13 +22483,13 @@ msgstr "限制行业" msgid "Restrict user from this IP address only. Multiple IP addresses can be added by separating with commas. Also accepts partial IP addresses like (111.111.111)" msgstr "仅此IP地址限制用户。多个IP地址,可以通过用逗号分隔的补充。也接受像(111.111.111)部分的IP地址" -#: frappe/public/js/frappe/list/list_view.js:199 +#: frappe/public/js/frappe/list/list_view.js:205 msgctxt "Title of message showing restrictions in list view" msgid "Restrictions" msgstr "限制条件" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:457 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:472 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:448 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:463 msgid "Result" msgstr "结果" @@ -22630,7 +22637,7 @@ msgstr "角色权限" msgid "Role Permissions Manager" msgstr "角色权限管理" -#: frappe/public/js/frappe/list/list_view.js:1946 +#: frappe/public/js/frappe/list/list_view.js:1957 msgctxt "Button in list view menu" msgid "Role Permissions Manager" msgstr "角色权限管理器" @@ -22781,7 +22788,7 @@ msgstr "网址重定向" msgid "Route: Example \"/desk\"" msgstr "" -#: frappe/model/base_document.py:969 frappe/model/document.py:821 +#: frappe/model/base_document.py:982 frappe/model/document.py:821 msgid "Row" msgstr "行" @@ -22789,12 +22796,12 @@ msgstr "行" msgid "Row #" msgstr "行#" -#: frappe/core/doctype/doctype/doctype.py:1930 -#: frappe/core/doctype/doctype/doctype.py:1940 +#: frappe/core/doctype/doctype/doctype.py:1933 +#: frappe/core/doctype/doctype/doctype.py:1943 msgid "Row # {0}: Non-administrator users cannot add the role {1} to a custom DocType." msgstr "" -#: frappe/model/base_document.py:1097 +#: frappe/model/base_document.py:1110 msgid "Row #{0}:" msgstr "行#{0}:" @@ -22954,7 +22961,7 @@ msgstr "短信发送成功" msgid "SMS was not sent. Please contact Administrator." msgstr "短信未发送,请联系管理员。" -#: frappe/email/doctype/email_account/email_account.py:212 +#: frappe/email/doctype/email_account/email_account.py:213 msgid "SMTP Server is required" msgstr "需要SMTP服务器" @@ -22984,7 +22991,7 @@ msgstr "SQL输出" msgid "SQL Queries" msgstr "SQL查询" -#: frappe/database/query.py:1972 +#: frappe/database/query.py:2051 msgid "SQL functions are not allowed as strings in SELECT: {0}. Use dict syntax like {{'COUNT': '*'}} instead." msgstr "" @@ -23064,14 +23071,14 @@ msgstr "星期六" #: frappe/public/js/frappe/form/quick_entry.js:186 #: frappe/public/js/frappe/list/list_settings.js:37 #: frappe/public/js/frappe/list/list_settings.js:245 -#: frappe/public/js/frappe/list/list_view.js:2008 +#: frappe/public/js/frappe/list/list_view.js:2019 #: frappe/public/js/frappe/ui/toolbar/toolbar.js:336 #: frappe/public/js/frappe/utils/common.js:452 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:45 #: frappe/public/js/frappe/views/kanban/kanban_settings.js:189 #: frappe/public/js/frappe/views/kanban/kanban_view.js:357 #: frappe/public/js/frappe/views/reports/query_report.js:2068 -#: frappe/public/js/frappe/views/reports/report_view.js:1740 +#: frappe/public/js/frappe/views/reports/report_view.js:1746 #: frappe/public/js/frappe/views/workspace/workspace.js:398 #: frappe/public/js/frappe/widgets/base_widget.js:142 #: frappe/public/js/frappe/widgets/quick_list_widget.js:120 @@ -23084,8 +23091,8 @@ msgstr "保存" msgid "Save Anyway" msgstr "仍然保存" -#: frappe/public/js/frappe/views/reports/report_view.js:1384 -#: frappe/public/js/frappe/views/reports/report_view.js:1747 +#: frappe/public/js/frappe/views/reports/report_view.js:1390 +#: frappe/public/js/frappe/views/reports/report_view.js:1753 msgid "Save As" msgstr "另存为" @@ -23113,7 +23120,7 @@ msgstr "保存文档。" #: frappe/model/rename_doc.py:106 #: frappe/printing/page/print_format_builder/print_format_builder.js:892 #: frappe/public/js/frappe/form/toolbar.js:315 -#: frappe/public/js/frappe/views/kanban/kanban_board.bundle.js:917 +#: frappe/public/js/frappe/views/kanban/kanban_board.bundle.js:921 #: frappe/public/js/frappe/views/workspace/workspace.js:778 msgid "Saved" msgstr "已保存" @@ -23133,7 +23140,7 @@ msgctxt "Freeze message while saving a document" msgid "Saving" msgstr "正在保存" -#: frappe/public/js/frappe/list/list_view.js:2019 +#: frappe/public/js/frappe/list/list_view.js:2030 msgid "Saving Changes..." msgstr "" @@ -23341,7 +23348,7 @@ msgstr "脚本" #: frappe/public/js/frappe/form/link_selector.js:46 #: frappe/public/js/frappe/list/list_sidebar_stat.html:4 #: frappe/public/js/frappe/ui/address_autocomplete/autocomplete_dialog.js:20 -#: frappe/public/js/frappe/ui/sidebar/sidebar.js:282 +#: frappe/public/js/frappe/ui/sidebar/sidebar.js:302 #: frappe/public/js/frappe/ui/toolbar/search.js:49 #: frappe/public/js/frappe/ui/toolbar/search.js:68 #: frappe/templates/discussions/search.html:2 @@ -23379,7 +23386,7 @@ msgstr "搜索结果" msgid "Search by filename or extension" msgstr "按文件名或后缀搜索" -#: frappe/core/doctype/doctype/doctype.py:1496 +#: frappe/core/doctype/doctype/doctype.py:1499 msgid "Search field {0} is not valid" msgstr "搜索字段{0}无效" @@ -23468,6 +23475,10 @@ msgstr "节标题" msgid "Section must have at least one column" msgstr "段至少须包括一栏" +#: frappe/core/doctype/user/user.py:1474 +msgid "Security Alert: Your account is being impersonated" +msgstr "" + #. Label of the sb3 (Section Break) field in DocType 'User' #: frappe/core/doctype/user/user.json msgid "Security Settings" @@ -23486,7 +23497,7 @@ msgstr "点这儿可以查看之前的历史报表。" msgid "See on Website" msgstr "在门户网站查看" -#: frappe/website/doctype/web_form/templates/web_form.html:160 +#: frappe/website/doctype/web_form/templates/web_form.html:169 msgctxt "Button in web form" msgid "See previous responses" msgstr "查看之前的响应" @@ -23542,10 +23553,10 @@ msgstr "单选" #: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:8 #: frappe/public/js/frappe/data_import/data_exporter.js:150 -#: frappe/public/js/frappe/form/controls/multicheck.js:167 +#: frappe/public/js/frappe/form/controls/multicheck.js:171 #: frappe/public/js/frappe/form/controls/multiselect_list.js:6 #: frappe/public/js/frappe/form/grid_row.js:499 -#: frappe/public/js/frappe/views/reports/report_view.js:1606 +#: frappe/public/js/frappe/views/reports/report_view.js:1612 msgid "Select All" msgstr "全选" @@ -23556,12 +23567,12 @@ msgstr "全选" msgid "Select Attachments" msgstr "选择附件" -#: frappe/custom/doctype/client_script/client_script.js:27 -#: frappe/custom/doctype/client_script/client_script.js:30 +#: frappe/custom/doctype/client_script/client_script.js:31 +#: frappe/custom/doctype/client_script/client_script.js:34 msgid "Select Child Table" msgstr "选择子表" -#: frappe/public/js/frappe/views/reports/report_view.js:382 +#: frappe/public/js/frappe/views/reports/report_view.js:384 msgid "Select Column" msgstr "选择列" @@ -23574,7 +23585,7 @@ msgstr "选择列" msgid "Select Country" msgstr "选择国家" -#: frappe/desk/page/setup_wizard/setup_wizard.js:415 +#: frappe/desk/page/setup_wizard/setup_wizard.js:412 msgid "Select Currency" msgstr "选择货币" @@ -23616,7 +23627,7 @@ msgstr "选择用户权限限制单据类型。" #: frappe/public/js/form_builder/components/controls/FetchFromControl.vue:33 #: frappe/public/js/frappe/doctype/index.js:207 -#: frappe/public/js/frappe/form/toolbar.js:874 +#: frappe/public/js/frappe/form/toolbar.js:875 msgid "Select Field" msgstr "选择字段" @@ -23642,7 +23653,7 @@ msgstr "选择字段" msgid "Select Fields To Update" msgstr "选择要更新的字段" -#: frappe/public/js/frappe/list/list_view.js:2004 +#: frappe/public/js/frappe/list/list_view.js:2015 msgid "Select Filters" msgstr "选择过滤条件" @@ -23707,7 +23718,7 @@ msgstr "选择报告" msgid "Select Table Columns for {0}" msgstr "选择{0}的列" -#: frappe/desk/page/setup_wizard/setup_wizard.js:408 +#: frappe/desk/page/setup_wizard/setup_wizard.js:405 msgid "Select Time Zone" msgstr "选择时区" @@ -23742,11 +23753,11 @@ msgstr "选择字段在此编辑属性" msgid "Select a group {0} first." msgstr "请先选择{0}组。" -#: frappe/core/doctype/doctype/doctype.py:2041 +#: frappe/core/doctype/doctype/doctype.py:2044 msgid "Select a valid Sender Field for creating documents from Email" msgstr "选择有效的发件人字段以从邮件创建文档" -#: frappe/core/doctype/doctype/doctype.py:2025 +#: frappe/core/doctype/doctype/doctype.py:2028 msgid "Select a valid Subject field for creating documents from Email" msgstr "选择有效的主旨字段以从邮件创建文档" @@ -23772,13 +23783,13 @@ msgstr "选择打印ATLEAST 1项纪录" msgid "Select atleast 2 actions" msgstr "选择至少2个操作" -#: frappe/public/js/frappe/list/list_view.js:1465 +#: frappe/public/js/frappe/list/list_view.js:1476 msgctxt "Description of a list view shortcut" msgid "Select list item" msgstr "选择列表项" -#: frappe/public/js/frappe/list/list_view.js:1417 -#: frappe/public/js/frappe/list/list_view.js:1433 +#: frappe/public/js/frappe/list/list_view.js:1428 +#: frappe/public/js/frappe/list/list_view.js:1444 msgctxt "Description of a list view shortcut" msgid "Select multiple list items" msgstr "选择多个列表项" @@ -24001,7 +24012,7 @@ msgstr "发件人电子邮箱" msgid "Sender Email Field" msgstr "发件人邮箱字段" -#: frappe/core/doctype/doctype/doctype.py:2044 +#: frappe/core/doctype/doctype/doctype.py:2047 msgid "Sender Field should have Email in options" msgstr "发件人字段选项中应包含邮箱" @@ -24095,7 +24106,7 @@ msgstr "单据类型 {} 的编号模板已更新" msgid "Series counter for {} updated to {} successfully" msgstr "{}的序列计数器成功更新至{}" -#: frappe/core/doctype/doctype/doctype.py:1127 +#: frappe/core/doctype/doctype/doctype.py:1130 #: frappe/core/doctype/document_naming_settings/document_naming_settings.py:170 msgid "Series {0} already used in {1}" msgstr "单据编号模板{0}已经被{1}使用" @@ -24105,7 +24116,7 @@ msgstr "单据编号模板{0}已经被{1}使用" msgid "Server Action" msgstr "服务器操作" -#: frappe/app.py:399 frappe/public/js/frappe/request.js:609 +#: frappe/app.py:399 frappe/public/js/frappe/request.js:610 #: frappe/www/error.html:36 frappe/www/error.py:15 msgid "Server Error" msgstr "服务器错误" @@ -24136,11 +24147,11 @@ msgstr "此站点未启用服务器脚本功能" msgid "Server error during upload. The file might be corrupted." msgstr "" -#: frappe/public/js/frappe/request.js:252 +#: frappe/public/js/frappe/request.js:253 msgid "Server failed to process this request because of a concurrent conflicting request. Please try again." msgstr "因并发请求冲突,服务器未能处理本请求。请稍后重试。" -#: frappe/public/js/frappe/request.js:244 +#: frappe/public/js/frappe/request.js:245 msgid "Server was too busy to process this request. Please try again." msgstr "服务器繁忙,请稍后重试" @@ -24296,7 +24307,7 @@ msgstr "设置数量" msgid "Set Role For" msgstr "权限对象" -#: frappe/core/doctype/user/user.js:129 +#: frappe/core/doctype/user/user.js:132 #: frappe/core/page/permission_manager/permission_manager.js:72 msgid "Set User Permissions" msgstr "设置用户权限限制" @@ -24480,7 +24491,7 @@ msgid "Setup > User Permissions" msgstr "设置 > 用户权限" #: frappe/public/js/frappe/views/reports/query_report.js:1933 -#: frappe/public/js/frappe/views/reports/report_view.js:1718 +#: frappe/public/js/frappe/views/reports/report_view.js:1724 msgid "Setup Auto Email" msgstr "设置电子邮件自动发送" @@ -24516,7 +24527,7 @@ msgstr "始始化失败" msgid "Share" msgstr "分享" -#: frappe/public/js/frappe/form/sidebar/share.js:114 +#: frappe/public/js/frappe/form/sidebar/share.js:119 msgid "Share With" msgstr "分享" @@ -24524,7 +24535,7 @@ msgstr "分享" msgid "Share this document with" msgstr "分享给" -#: frappe/public/js/frappe/form/sidebar/share.js:51 +#: frappe/public/js/frappe/form/sidebar/share.js:56 msgid "Share {0} with" msgstr "分享给{0}" @@ -24618,6 +24629,11 @@ msgstr "在金额右边显示货币符号" msgid "Show Dashboard" msgstr "显示数据面板" +#. Label of the show_description_on_click (Check) field in DocType 'DocField' +#: frappe/core/doctype/docfield/docfield.json +msgid "Show Description on Click" +msgstr "" + #. Label of the show_document (Button) field in DocType 'Access Log' #: frappe/core/doctype/access_log/access_log.json msgid "Show Document" @@ -24773,7 +24789,7 @@ msgstr "显示标题" msgid "Show Title in Link Fields" msgstr "在链接字段中以标题字段值显示" -#: frappe/public/js/frappe/views/reports/report_view.js:1523 +#: frappe/public/js/frappe/views/reports/report_view.js:1529 msgid "Show Totals" msgstr "显示总计" @@ -24795,7 +24811,7 @@ msgstr "在图表上显示数值" msgid "Show Warnings" msgstr "显示警告信息" -#: frappe/public/js/frappe/views/calendar/calendar.js:179 +#: frappe/public/js/frappe/views/calendar/calendar.js:180 msgid "Show Weekends" msgstr "显示周末" @@ -24891,7 +24907,7 @@ msgstr "标题显示在浏览器窗口中的“前缀 - 标题”" msgid "Show {0} List" msgstr "查看 {0} 清单" -#: frappe/public/js/frappe/views/reports/report_view.js:500 +#: frappe/public/js/frappe/views/reports/report_view.js:502 msgid "Showing only Numeric fields from Report" msgstr "仅显示来自报表的数字字段" @@ -25284,13 +25300,13 @@ msgstr "按选项值排序" msgid "Sort Order" msgstr "排序" -#: frappe/core/doctype/doctype/doctype.py:1579 +#: frappe/core/doctype/doctype/doctype.py:1582 msgid "Sort field {0} must be a valid fieldname" msgstr "排序字段{0}必须是有效的字段名" #. Label of the source (Data) field in DocType 'Web Page View' #. Label of the source (Small Text) field in DocType 'Website Route Redirect' -#: frappe/public/js/frappe/utils/utils.js:1999 +#: frappe/public/js/frappe/utils/utils.js:2009 #: 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 @@ -25627,8 +25643,8 @@ msgstr "频率" #: frappe/integrations/doctype/integration_request/integration_request.json #: frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json #: frappe/public/js/frappe/list/list_settings.js:357 -#: frappe/public/js/frappe/list/list_view.js:2445 -#: frappe/public/js/frappe/views/reports/report_view.js:974 +#: frappe/public/js/frappe/list/list_view.js:2456 +#: frappe/public/js/frappe/views/reports/report_view.js:976 #: frappe/website/doctype/personal_data_deletion_request/personal_data_deletion_request.json #: frappe/website/doctype/personal_data_deletion_step/personal_data_deletion_step.json #: frappe/workflow/doctype/workflow_action/workflow_action.json @@ -25695,7 +25711,7 @@ msgstr "按表的存储使用量" msgid "Store Attached PDF Document" msgstr "存储PDF附件" -#: frappe/core/doctype/user/user.js:504 +#: frappe/core/doctype/user/user.js:515 msgid "Store the API secret securely. It won't be displayed again." msgstr "请安全存储API密钥。该密钥将不再显示。" @@ -25793,7 +25809,7 @@ msgstr "主题" msgid "Subject Field" msgstr "主题字段" -#: frappe/core/doctype/doctype/doctype.py:2034 +#: frappe/core/doctype/doctype/doctype.py:2037 msgid "Subject Field type should be Data, Text, Long Text, Small Text, Text Editor" msgstr "主题字段类型应为数据、文本、长文本、短文本或文本编辑器" @@ -25821,12 +25837,12 @@ msgstr "提交队列" msgid "Submit" msgstr "提交" -#: frappe/public/js/frappe/list/list_view.js:2320 +#: frappe/public/js/frappe/list/list_view.js:2331 msgctxt "Button in list view actions menu" msgid "Submit" msgstr "提交" -#: frappe/website/doctype/web_form/templates/web_form.html:47 +#: frappe/website/doctype/web_form/templates/web_form.html:56 msgctxt "Button in web form" msgid "Submit" msgstr "提交" @@ -25855,7 +25871,7 @@ msgstr "将上传单据状态设为已提交" msgid "Submit an Issue" msgstr "提交问题" -#: frappe/website/doctype/web_form/templates/web_form.html:163 +#: frappe/website/doctype/web_form/templates/web_form.html:172 msgctxt "Button in web form" msgid "Submit another response" msgstr "提交其他响应" @@ -25879,7 +25895,7 @@ msgstr "提交此文档以完成此步骤" msgid "Submit this document to confirm" msgstr "点提交按钮进行确认" -#: frappe/public/js/frappe/list/list_view.js:2325 +#: frappe/public/js/frappe/list/list_view.js:2336 msgctxt "Title of confirmation dialog" msgid "Submit {0} documents?" msgstr "是否提交{0}个文档?" @@ -25888,7 +25904,7 @@ msgstr "是否提交{0}个文档?" #: frappe/core/doctype/comment/comment.json #: frappe/public/js/frappe/model/indicator.js:95 #: frappe/public/js/frappe/ui/filters/filter.js:538 -#: frappe/website/doctype/web_form/templates/web_form.html:143 +#: frappe/website/doctype/web_form/templates/web_form.html:152 msgid "Submitted" msgstr "已提交" @@ -25940,7 +25956,7 @@ msgstr "" #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json #: frappe/desk/doctype/bulk_update/bulk_update.js:31 -#: frappe/public/js/frappe/form/grid.js:1230 +#: frappe/public/js/frappe/form/grid.js:1235 #: frappe/public/js/frappe/views/translation_manager.js:21 #: frappe/templates/includes/login/login.js:228 #: frappe/templates/includes/login/login.js:234 @@ -25991,7 +26007,7 @@ msgstr "成功任务数量" msgid "Successful Transactions" msgstr "成功事务" -#: frappe/model/rename_doc.py:698 +#: frappe/model/rename_doc.py:701 msgid "Successful: {0} to {1}" msgstr "成功:{0} {1}" @@ -26012,7 +26028,7 @@ msgstr "成功导入{1}条记录中的{0}条。" msgid "Successfully reset onboarding status for all users." msgstr "已成功重置所有用户的入职状态。" -#: frappe/core/doctype/user/user.py:1481 +#: frappe/core/doctype/user/user.py:1493 msgid "Successfully signed out" msgstr "已成功退出登录" @@ -26458,7 +26474,7 @@ msgstr "表字段" msgid "Table Fieldname" msgstr "表字段名" -#: frappe/core/doctype/doctype/doctype.py:1221 +#: frappe/core/doctype/doctype/doctype.py:1224 msgid "Table Fieldname Missing" msgstr "缺失表格字段名" @@ -26484,7 +26500,7 @@ msgstr "" msgid "Table Trimmed" msgstr "表格已截断" -#: frappe/public/js/frappe/form/grid.js:1229 +#: frappe/public/js/frappe/form/grid.js:1234 msgid "Table updated" msgstr "表更新" @@ -26509,8 +26525,8 @@ msgstr "标签链接" #: frappe/model/meta.py:59 #: frappe/public/js/frappe/form/templates/form_sidebar.html:124 -#: frappe/public/js/frappe/list/base_list.js:812 -#: frappe/public/js/frappe/list/base_list.js:995 +#: frappe/public/js/frappe/list/base_list.js:814 +#: frappe/public/js/frappe/list/base_list.js:997 #: frappe/public/js/frappe/list/bulk_operations.js:444 #: frappe/public/js/frappe/model/meta.js:215 #: frappe/public/js/frappe/model/model.js:133 @@ -26676,7 +26692,7 @@ msgstr "感谢您联系我们。我们将尽快给您回复。\n\n\n" "您的问题\n\n" "{0}" -#: frappe/website/doctype/web_form/templates/web_form.html:147 +#: frappe/website/doctype/web_form/templates/web_form.html:156 msgid "Thank you for spending your valuable time to fill this form" msgstr "感谢您花时间填写此表单" @@ -26700,7 +26716,7 @@ msgstr "谢谢" msgid "The Auto Repeat for this document has been disabled." msgstr "此文档的自动重复功能已禁用。" -#: frappe/public/js/frappe/form/grid.js:1252 +#: frappe/public/js/frappe/form/grid.js:1257 msgid "The CSV format is case sensitive" msgstr "CSV格式区分大小写" @@ -26717,7 +26733,7 @@ msgstr "从 Google Cloud Console 下的 \n" "eval:doc.age>18" -#: frappe/core/doctype/file/file.py:532 +#: frappe/core/doctype/file/file.py:533 msgid "This file is attached to a protected document and cannot be deleted." msgstr "该文件已关联至受保护文档,不可删除。" @@ -27467,7 +27483,7 @@ msgstr "时间(秒)" #: frappe/core/doctype/system_settings/system_settings.json #: frappe/core/doctype/user/user.json #: frappe/core/web_form/edit_profile/edit_profile.json -#: frappe/desk/page/setup_wizard/setup_wizard.js:407 +#: frappe/desk/page/setup_wizard/setup_wizard.js:404 #: frappe/website/doctype/web_page_view/web_page_view.json msgid "Time Zone" msgstr "时区" @@ -27537,11 +27553,11 @@ msgstr "时间线链接" msgid "Timeline Name" msgstr "时间线名称" -#: frappe/core/doctype/doctype/doctype.py:1567 +#: frappe/core/doctype/doctype/doctype.py:1570 msgid "Timeline field must be a Link or Dynamic Link" msgstr "时间线字段必须是一个链接或动态链接" -#: frappe/core/doctype/doctype/doctype.py:1563 +#: frappe/core/doctype/doctype/doctype.py:1566 msgid "Timeline field must be a valid fieldname" msgstr "时间线字段必须是有效的字段名" @@ -27635,7 +27651,7 @@ msgstr "标题字段" msgid "Title Prefix" msgstr "标题前缀" -#: frappe/core/doctype/doctype/doctype.py:1504 +#: frappe/core/doctype/doctype/doctype.py:1507 msgid "Title field must be a valid fieldname" msgstr "标题字段必须是有效的字段名" @@ -27775,11 +27791,11 @@ msgstr "待办" #: frappe/public/js/frappe/form/controls/date.js:58 #: frappe/public/js/frappe/ui/filters/filter.js:732 -#: frappe/public/js/frappe/views/calendar/calendar.js:279 +#: frappe/public/js/frappe/views/calendar/calendar.js:281 msgid "Today" msgstr "今天" -#: frappe/public/js/frappe/views/reports/report_view.js:1567 +#: frappe/public/js/frappe/views/reports/report_view.js:1573 msgid "Toggle Chart" msgstr "切换图表" @@ -27905,7 +27921,7 @@ msgstr "主题" #: frappe/desk/query_report.py:621 #: frappe/public/js/frappe/views/reports/print_grid.html:50 #: frappe/public/js/frappe/views/reports/query_report.js:1367 -#: frappe/public/js/frappe/views/reports/report_view.js:1548 +#: frappe/public/js/frappe/views/reports/report_view.js:1554 msgid "Total" msgstr "总计" @@ -27955,11 +27971,11 @@ msgstr "初始同步过程中要同步的邮件总数" msgid "Total:" msgstr "总计:" -#: frappe/public/js/frappe/views/reports/report_view.js:1252 +#: frappe/public/js/frappe/views/reports/report_view.js:1254 msgid "Totals" msgstr "总计" -#: frappe/public/js/frappe/views/reports/report_view.js:1227 +#: frappe/public/js/frappe/views/reports/report_view.js:1229 msgid "Totals Row" msgstr "总计行" @@ -28022,7 +28038,7 @@ msgstr "追踪收件人是否打开邮件.\n" msgid "Track milestones for any document" msgstr "跟踪任何单据的里程碑" -#: frappe/public/js/frappe/utils/utils.js:2063 +#: frappe/public/js/frappe/utils/utils.js:2073 msgid "Tracking URL generated and copied to clipboard" msgstr "跟踪URL已生成并复制到剪贴板" @@ -28069,7 +28085,7 @@ msgstr "翻译数据" msgid "Translate Link Fields" msgstr "翻译链接字段" -#: frappe/public/js/frappe/views/reports/report_view.js:1663 +#: frappe/public/js/frappe/views/reports/report_view.js:1669 msgid "Translate values" msgstr "翻译值" @@ -28321,7 +28337,7 @@ msgstr "网址" msgid "URL for documentation or help" msgstr "在线帮助网址" -#: frappe/core/doctype/file/file.py:241 +#: frappe/core/doctype/file/file.py:242 msgid "URL must start with http:// or https://" msgstr "URL必须以http://或https://开头" @@ -28416,15 +28432,15 @@ msgstr "无法打开附件单据,您确认导出文件并存为了CSV格式? msgid "Unable to read file format for {0}" msgstr "无法读取{0}的文件格式" -#: frappe/core/doctype/communication/email.py:204 +#: frappe/core/doctype/communication/email.py:209 msgid "Unable to send mail because of a missing email account. Please setup default Email Account from Settings > Email Account" msgstr "缺少邮箱账户无法发送邮件,请通过设置>邮箱账户配置默认账户" -#: frappe/public/js/frappe/views/calendar/calendar.js:455 +#: frappe/public/js/frappe/views/calendar/calendar.js:457 msgid "Unable to update event" msgstr "无法更新事件" -#: frappe/core/doctype/file/file.py:496 +#: frappe/core/doctype/file/file.py:497 msgid "Unable to write file format for {0}" msgstr "无法写入{0}的文件格式" @@ -28450,7 +28466,7 @@ msgid "Undo last action" msgstr "撤销上一步操作" #: frappe/public/js/frappe/form/templates/form_sidebar.html:153 -#: frappe/public/js/frappe/form/toolbar.js:944 +#: frappe/public/js/frappe/form/toolbar.js:945 msgid "Unfollow" msgstr "取消关注" @@ -28520,14 +28536,14 @@ msgstr "未读" msgid "Unread Notification Sent" msgstr "未读发送通知" -#: frappe/utils/safe_exec.py:498 +#: frappe/utils/safe_exec.py:495 msgid "Unsafe SQL query" msgstr "不安全的SQL查询" #: frappe/printing/page/print_format_builder/print_format_builder_column_selector.html:9 #: frappe/public/js/frappe/data_import/data_exporter.js:160 -#: frappe/public/js/frappe/form/controls/multicheck.js:167 -#: frappe/public/js/frappe/views/reports/report_view.js:1606 +#: frappe/public/js/frappe/form/controls/multicheck.js:171 +#: frappe/public/js/frappe/views/reports/report_view.js:1612 msgid "Unselect All" msgstr "全部不选" @@ -28560,11 +28576,11 @@ msgstr "退订参数" msgid "Unsubscribed" msgstr "已退订" -#: frappe/database/query.py:1098 +#: frappe/database/query.py:1113 msgid "Unsupported function or operator: {0}" msgstr "" -#: frappe/database/query.py:2063 +#: frappe/database/query.py:2142 msgid "Unsupported {0}: {1}" msgstr "" @@ -28628,7 +28644,7 @@ msgstr "更新应用钩子解析顺序" msgid "Update Order" msgstr "更新顺序" -#: frappe/desk/page/setup_wizard/setup_wizard.js:494 +#: frappe/desk/page/setup_wizard/setup_wizard.js:488 msgid "Update Password" msgstr "更新密码" @@ -28851,7 +28867,7 @@ msgstr "使用别的邮箱账号" msgid "Use if the default settings don't seem to detect your data correctly" msgstr "当默认设置无法正确识别数据时使用" -#: frappe/model/db_query.py:509 +#: frappe/model/db_query.py:511 msgid "Use of sub-query or function is restricted" msgstr "子查询或函数的使用受到限制" @@ -29057,7 +29073,7 @@ msgstr "用户图片" msgid "User Invitation" msgstr "用户邀请" -#: frappe/public/js/frappe/ui/sidebar/sidebar.html:51 +#: frappe/public/js/frappe/ui/sidebar/sidebar.html:52 msgid "User Menu" msgstr "用户菜单" @@ -29076,11 +29092,11 @@ msgstr "用户权限限制" #: frappe/core/page/permission_manager/permission_manager_help.html:97 #: frappe/core/workspace/users/users.json #: frappe/public/js/frappe/views/reports/query_report.js:2055 -#: frappe/public/js/frappe/views/reports/report_view.js:1766 +#: frappe/public/js/frappe/views/reports/report_view.js:1772 msgid "User Permissions" msgstr "用户权限限制" -#: frappe/public/js/frappe/list/list_view.js:1935 +#: frappe/public/js/frappe/list/list_view.js:1946 msgctxt "Button in list view menu" msgid "User Permissions" msgstr "用户权限" @@ -29212,7 +29228,7 @@ msgstr "用户{0}无权访问此单据" msgid "User {0} does not have doctype access via role permission for document {1}" msgstr "角色权限管理中未授权用户 {0} 访问 {1}" -#: frappe/desk/doctype/workspace/workspace.py:285 +#: frappe/desk/doctype/workspace/workspace.py:292 msgid "User {0} does not have the permission to create a Workspace." msgstr "用户{0}无权创建工作区" @@ -29221,6 +29237,10 @@ msgstr "用户{0}无权创建工作区" msgid "User {0} has requested for data deletion" msgstr "用户{0}已请求数据删除" +#: frappe/core/doctype/user/user.py:1468 +msgid "User {0} has started an impersonation session as you.

Reason provided: {1}" +msgstr "" + #: frappe/core/doctype/user/user.py:1452 msgid "User {0} impersonated as {1}" msgstr "用户 {0} 以 {1} 身份登录" @@ -29387,11 +29407,11 @@ msgstr "值变更的字段" msgid "Value To Be Set" msgstr "字段值" -#: frappe/model/base_document.py:817 +#: frappe/model/base_document.py:830 msgid "Value Too Long" msgstr "" -#: frappe/model/base_document.py:1173 frappe/model/document.py:877 +#: frappe/model/base_document.py:1186 frappe/model/document.py:877 msgid "Value cannot be changed for {0}" msgstr "值不能被改变为{0}" @@ -29411,7 +29431,7 @@ msgstr "勾选字段值可以为0或1" msgid "Value for field {0} is too long in {1}. Length should be lesser than {2} characters" msgstr "{1} 中的字段 {0} 值太长,长度应该小于 {2}" -#: frappe/model/base_document.py:528 +#: frappe/model/base_document.py:541 msgid "Value for {0} cannot be a list" msgstr "{0}不能是列表值" @@ -29442,7 +29462,7 @@ msgstr "待验证的值" msgid "Value to set when this workflow state is applied. Use plain text (e.g. Approved) or an expression if “Evaluate as Expression” is enabled." msgstr "" -#: frappe/model/base_document.py:1243 +#: frappe/model/base_document.py:1256 msgid "Value too big" msgstr "值过大" @@ -29534,7 +29554,7 @@ msgstr "查看全部" msgid "View Audit Trail" msgstr "查看审计跟踪" -#: frappe/core/doctype/user/user.js:149 +#: frappe/core/doctype/user/user.js:152 msgid "View Doctype Permissions" msgstr "查看文档类型权限" @@ -29556,7 +29576,7 @@ msgstr "查看列表" msgid "View Log" msgstr "查看日志" -#: frappe/core/doctype/user/user.js:140 +#: frappe/core/doctype/user/user.js:143 #: frappe/core/doctype/user_permission/user_permission.js:26 msgid "View Permitted Documents" msgstr "查看被授权单据" @@ -29644,7 +29664,7 @@ msgstr "虚拟文档类型{}需要名为{}的静态方法,找到{}" msgid "Virtual DocType {} requires overriding an instance method called {} found {}" msgstr "虚拟文档类型{}需要重写名为{}的实例方法,找到{}" -#: frappe/core/doctype/doctype/doctype.py:1686 +#: frappe/core/doctype/doctype/doctype.py:1689 msgid "Virtual tables must be virtual fields" msgstr "虚拟表必须为虚拟字段" @@ -29692,7 +29712,7 @@ msgstr "仓库" #: frappe/core/doctype/docfield/docfield.json #: frappe/custom/doctype/custom_field/custom_field.json #: frappe/custom/doctype/customize_form_field/customize_form_field.json -#: frappe/public/js/frappe/router.js:618 +#: frappe/public/js/frappe/router.js:619 #: frappe/workflow/doctype/workflow_state/workflow_state.json msgid "Warning" msgstr "警告" @@ -29701,7 +29721,7 @@ msgstr "警告" msgid "Warning: DATA LOSS IMMINENT! Proceeding will permanently delete following database columns from doctype {0}:" msgstr "警告:即将数据丢失!继续操作将永久删除{0}的数据库列:" -#: frappe/core/doctype/doctype/doctype.py:1143 +#: frappe/core/doctype/doctype/doctype.py:1146 msgid "Warning: Naming is not set" msgstr "警告:未设置命名规则" @@ -29785,7 +29805,7 @@ msgstr "网站网页" msgid "Web Page Block" msgstr "网页区块" -#: frappe/public/js/frappe/utils/utils.js:1991 +#: frappe/public/js/frappe/utils/utils.js:2001 msgid "Web Page URL" msgstr "网页URL" @@ -29937,7 +29957,7 @@ msgstr "网站脚本" msgid "Website Search Field" msgstr "网站搜索字段" -#: frappe/core/doctype/doctype/doctype.py:1551 +#: frappe/core/doctype/doctype/doctype.py:1554 msgid "Website Search Field must be a valid fieldname" msgstr "网站搜索字段必须是有效字段名" @@ -30034,7 +30054,7 @@ msgstr "Websocket" msgid "Wednesday" msgstr "星期三" -#: frappe/public/js/frappe/views/calendar/calendar.js:281 +#: frappe/public/js/frappe/views/calendar/calendar.js:283 msgid "Week" msgstr "周" @@ -30161,7 +30181,7 @@ msgstr "通配符过滤" msgid "Will add \"%\" before and after the query" msgstr "将在查询前后添加“%”" -#: frappe/desk/page/setup_wizard/setup_wizard.js:485 +#: frappe/desk/page/setup_wizard/setup_wizard.js:479 msgid "Will be your login ID" msgstr "将是您的登录ID" @@ -30338,12 +30358,12 @@ 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:92 -#: frappe/public/js/frappe/utils/utils.js:956 +#: frappe/public/js/frappe/utils/utils.js:967 #: frappe/public/js/frappe/views/workspace/workspace.js:10 msgid "Workspace" msgstr "工作区" -#: frappe/public/js/frappe/router.js:180 +#: frappe/public/js/frappe/router.js:181 msgid "Workspace {0} does not exist" msgstr "工作区{0}不存在" @@ -30430,11 +30450,11 @@ msgstr "已圆满完成" msgid "Write" msgstr "写" -#: frappe/model/base_document.py:1069 +#: frappe/model/base_document.py:1082 msgid "Wrong Fetch From value" msgstr "错误的获取来源值" -#: frappe/public/js/frappe/views/reports/report_view.js:489 +#: frappe/public/js/frappe/views/reports/report_view.js:491 msgid "X Axis Field" msgstr "X轴字段" @@ -30457,7 +30477,7 @@ msgstr "" msgid "Y Axis" msgstr "Y轴字段" -#: frappe/public/js/frappe/views/reports/report_view.js:496 +#: frappe/public/js/frappe/views/reports/report_view.js:498 msgid "Y Axis Fields" msgstr "Y轴字段" @@ -30527,8 +30547,8 @@ 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:568 -#: frappe/public/js/frappe/list/base_list.js:948 +#: frappe/public/js/frappe/form/controls/link.js:579 +#: frappe/public/js/frappe/list/base_list.js:950 #: frappe/public/js/frappe/list/list_sidebar_group_by.js:170 #: frappe/public/js/frappe/views/reports/query_report.js:47 #: frappe/website/doctype/help_article/templates/help_article.html:25 @@ -30566,7 +30586,7 @@ msgstr "您向{0}添加了1行" msgid "You added {0} rows to {1}" msgstr "您向{1}添加了{0}行" -#: frappe/public/js/frappe/router.js:647 +#: frappe/public/js/frappe/router.js:648 msgid "You are about to open an external link. To confirm, click the link again." msgstr "您即将打开外部链接。请再次点击链接以确认。" @@ -30598,7 +30618,7 @@ msgstr "您无权删除标准报表" msgid "You are not allowed to delete a standard Website Theme" msgstr "不允许删除标准网站主题" -#: frappe/core/doctype/report/report.py:396 +#: frappe/core/doctype/report/report.py:398 msgid "You are not allowed to edit the report." msgstr "您无权编辑此报表" @@ -30637,7 +30657,7 @@ msgstr "未登录状态下无权访问此页面" msgid "You are not permitted to access this page." msgstr "你没有权限访问此页面。" -#: frappe/__init__.py:462 +#: frappe/__init__.py:464 msgid "You are not permitted to access this resource. Login to access" msgstr "您无权访问此资源。请登录后访问" @@ -30694,7 +30714,7 @@ msgstr "浏览本页后可继续完成新手引导" msgid "You can disable this {0} instead of deleting it." msgstr "你可以禁用而不是删除物料 {0}" -#: frappe/core/doctype/file/file.py:768 +#: frappe/core/doctype/file/file.py:773 msgid "You can increase the limit from System Settings." msgstr "可从系统设置中提高限制" @@ -30766,7 +30786,7 @@ msgstr "您已取消此文档{1}" msgid "You cannot create a dashboard chart from single DocTypes" msgstr "不能为单记录单据类型创建统计图表" -#: frappe/share.py:246 +#: frappe/share.py:241 msgid "You cannot share `{0}` on {1} `{2}` as you do not have `{0}` permission on `{1}`" msgstr "" @@ -30804,7 +30824,7 @@ msgctxt "Form timeline" msgid "You created this document {0}" msgstr "您于{0}创建本文档" -#: frappe/public/js/frappe/request.js:175 +#: frappe/public/js/frappe/request.js:176 msgid "You do not have enough permissions to access this resource. Please contact your manager to get access." msgstr "您没有足够的权限来访问该资源。请联系您的经理,以获得访问权。" @@ -30816,11 +30836,11 @@ msgstr "您未被授权完成此操作" msgid "You do not have import permission for {0}" msgstr "" -#: frappe/database/query.py:943 +#: frappe/database/query.py:963 msgid "You do not have permission to access child table field: {0}" msgstr "" -#: frappe/database/query.py:953 +#: frappe/database/query.py:973 msgid "You do not have permission to access field: {0}" msgstr "您无权访问字段:{0}" @@ -30884,7 +30904,7 @@ msgstr "待查看{0}" msgid "You haven't added any Dashboard Charts or Number Cards yet." msgstr "尚未创建统计图表或数字卡" -#: frappe/public/js/frappe/list/list_view.js:507 +#: frappe/public/js/frappe/list/list_view.js:516 msgid "You haven't created a {0} yet" msgstr "暂无数据 {0}" @@ -30913,7 +30933,7 @@ msgid "You need the '{0}' permission on {1} {2} to perform this action." msgstr "执行此操作需要{1} {2}的'{0}'权限" #: frappe/desk/doctype/workspace/workspace.py:129 -#: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py:71 +#: frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py:74 msgid "You need to be Workspace Manager to delete a public workspace." msgstr "需为工作区管理员才能删除公共工作区" @@ -30953,7 +30973,7 @@ msgstr "您需要启用JavaScript才能使应用正常工作" msgid "You need to have \"Share\" permission" msgstr "你需要有“分享”权限" -#: frappe/utils/print_format.py:313 +#: frappe/utils/print_format.py:322 msgid "You need to install pycups to use this feature!" msgstr "您需要安装pycups才能使用此功能!" @@ -30961,7 +30981,7 @@ msgstr "您需要安装pycups才能使用此功能!" msgid "You need to select indexes you want to add first." msgstr "您需要先选择要添加的索引" -#: frappe/email/doctype/email_account/email_account.py:160 +#: frappe/email/doctype/email_account/email_account.py:161 msgid "You need to set one IMAP folder for {0}" msgstr "您需要为{0}设置一个IMAP文件夹" @@ -31020,7 +31040,7 @@ msgstr "您取消了对该单据的关注" msgid "You viewed this" msgstr "您查看了此内容" -#: frappe/public/js/frappe/router.js:658 +#: frappe/public/js/frappe/router.js:659 msgid "You will be redirected to:" msgstr "您将被重定向至:" @@ -31176,7 +31196,7 @@ msgstr "新增" msgid "amend" msgstr "修订" -#: frappe/public/js/frappe/utils/utils.js:396 frappe/utils/data.py:1567 +#: frappe/public/js/frappe/utils/utils.js:407 frappe/utils/data.py:1567 msgid "and" msgstr "和" @@ -31223,10 +31243,6 @@ msgstr "取消" msgid "chrome" msgstr "Chrome浏览器" -#: frappe/templates/includes/list/filters.html:19 -msgid "clear" -msgstr "清除" - #: frappe/public/js/frappe/form/templates/timeline_message_box.html:34 msgid "commented" msgstr "已评论" @@ -31243,7 +31259,7 @@ msgid "cyan" msgstr "青色" #: frappe/public/js/frappe/form/controls/duration.js:219 -#: frappe/public/js/frappe/utils/utils.js:1192 +#: frappe/public/js/frappe/utils/utils.js:1203 msgctxt "Days (Field: Duration)" msgid "d" msgstr "天" @@ -31361,7 +31377,7 @@ msgstr "电子邮件收件箱" msgid "empty" msgstr "空" -#: frappe/public/js/frappe/form/controls/link.js:588 +#: frappe/public/js/frappe/form/controls/link.js:599 msgctxt "Comparison value is empty" msgid "empty" msgstr "空" @@ -31420,7 +31436,7 @@ msgid "gzip not found in PATH! This is required to take a backup." msgstr "在PATH中找不到gzip!这是进行备份的必要条件" #: frappe/public/js/frappe/form/controls/duration.js:220 -#: frappe/public/js/frappe/utils/utils.js:1196 +#: frappe/public/js/frappe/utils/utils.js:1207 msgctxt "Hours (Field: Duration)" msgid "h" msgstr "小时" @@ -31440,17 +31456,17 @@ msgstr "图标" msgid "import" msgstr "导入" -#: frappe/public/js/frappe/form/controls/link.js:625 -#: frappe/public/js/frappe/form/controls/link.js:630 -#: frappe/public/js/frappe/form/controls/link.js:643 -#: frappe/public/js/frappe/form/controls/link.js:650 +#: frappe/public/js/frappe/form/controls/link.js:636 +#: frappe/public/js/frappe/form/controls/link.js:641 +#: frappe/public/js/frappe/form/controls/link.js:654 +#: frappe/public/js/frappe/form/controls/link.js:661 msgid "is disabled" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:624 -#: frappe/public/js/frappe/form/controls/link.js:631 -#: frappe/public/js/frappe/form/controls/link.js:644 -#: frappe/public/js/frappe/form/controls/link.js:649 +#: frappe/public/js/frappe/form/controls/link.js:635 +#: frappe/public/js/frappe/form/controls/link.js:642 +#: frappe/public/js/frappe/form/controls/link.js:655 +#: frappe/public/js/frappe/form/controls/link.js:660 msgid "is enabled" msgstr "" @@ -31493,7 +31509,7 @@ msgid "long" msgstr "长整型" #: frappe/public/js/frappe/form/controls/duration.js:221 -#: frappe/public/js/frappe/utils/utils.js:1200 +#: frappe/public/js/frappe/utils/utils.js:1211 msgctxt "Minutes (Field: Duration)" msgid "m" msgstr "月" @@ -31586,7 +31602,7 @@ msgstr "变更" msgid "on_update_after_submit" msgstr "提交后变更" -#: frappe/public/js/frappe/utils/utils.js:393 frappe/www/login.html:90 +#: frappe/public/js/frappe/utils/utils.js:404 frappe/www/login.html:90 #: frappe/www/login.py:112 msgid "or" msgstr "或" @@ -31659,7 +31675,7 @@ msgid "restored {0} as {1}" msgstr "恢复{0}为{1}" #: frappe/public/js/frappe/form/controls/duration.js:222 -#: frappe/public/js/frappe/utils/utils.js:1204 +#: frappe/public/js/frappe/utils/utils.js:1215 msgctxt "Seconds (Field: Duration)" msgid "s" msgstr "秒" @@ -31908,8 +31924,8 @@ msgstr "{0}({1})(至少1行)" msgid "{0} ({1}) - {2}%" msgstr "{0}({1})- {2}%" -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:448 -#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:452 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:439 +#: frappe/public/js/frappe/ui/toolbar/awesome_bar.js:443 msgid "{0} = {1}" msgstr "{0} = {1}" @@ -31917,7 +31933,7 @@ msgstr "{0} = {1}" msgid "{0} Calendar" msgstr "{0}日历" -#: frappe/public/js/frappe/views/reports/report_view.js:569 +#: frappe/public/js/frappe/views/reports/report_view.js:571 msgid "{0} Chart" msgstr "{0}图表" @@ -31966,7 +31982,7 @@ msgstr "{0}地图" msgid "{0} Name" msgstr "{0}单据编号(名称)" -#: frappe/model/base_document.py:1273 +#: frappe/model/base_document.py:1286 msgid "{0} Not allowed to change {1} after submission from {2} to {3}" msgstr "{0} 提交后不允许将 {1} 从 {2} 修改为 {3}" @@ -32082,11 +32098,11 @@ msgctxt "Form timeline" msgid "{0} changed {1} to {2}" msgstr "{0}将{1}更改为{2}" -#: frappe/core/doctype/doctype/doctype.py:1634 +#: frappe/core/doctype/doctype/doctype.py:1637 msgid "{0} contains an invalid Fetch From expression, Fetch From can't be self-referential." msgstr "{0}包含无效的Fetch From表达式,不能自我引用" -#: frappe/public/js/frappe/form/controls/link.js:663 +#: frappe/public/js/frappe/form/controls/link.js:674 msgid "{0} contains {1}" msgstr "" @@ -32111,7 +32127,7 @@ msgstr "{0} 天" msgid "{0} days ago" msgstr "{0}天前" -#: frappe/public/js/frappe/form/controls/link.js:665 +#: frappe/public/js/frappe/form/controls/link.js:676 msgid "{0} does not contain {1}" msgstr "" @@ -32120,7 +32136,7 @@ msgstr "" msgid "{0} does not exist in row {1}" msgstr "{0}不存在于第{1}行中" -#: frappe/public/js/frappe/form/controls/link.js:638 +#: frappe/public/js/frappe/form/controls/link.js:649 msgid "{0} equals {1}" msgstr "" @@ -32148,7 +32164,7 @@ msgstr "{0}小时" msgid "{0} has already assigned default value for {1}." msgstr "{0}已为{1}分派了默认值。" -#: frappe/database/query.py:1202 +#: frappe/database/query.py:1217 msgid "{0} has invalid backtick notation: {1}" msgstr "" @@ -32160,7 +32176,7 @@ msgstr "{0}已经离开对话{1} {2}" msgid "{0} hours ago" msgstr "{0}小时前" -#: frappe/website/doctype/web_form/templates/web_form.html:155 +#: frappe/website/doctype/web_form/templates/web_form.html:164 msgid "{0} if you are not redirected within {1} seconds" msgstr "如果{1}秒内未自动跳转,请点击{0}" @@ -32169,27 +32185,27 @@ msgstr "如果{1}秒内未自动跳转,请点击{0}" msgid "{0} in row {1} cannot have both URL and child items" msgstr "行{1}中的{0}不能同时有URL和子项" -#: frappe/public/js/frappe/form/controls/link.js:704 +#: frappe/public/js/frappe/form/controls/link.js:715 msgid "{0} is a descendant of {1}" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:952 +#: frappe/core/doctype/doctype/doctype.py:955 msgid "{0} is a mandatory field" msgstr "{0}是必填字段" -#: frappe/core/doctype/file/file.py:576 +#: frappe/core/doctype/file/file.py:577 msgid "{0} is a not a valid zip file" msgstr "{0}不是有效的zip文件" -#: frappe/public/js/frappe/form/controls/link.js:668 +#: frappe/public/js/frappe/form/controls/link.js:679 msgid "{0} is after {1}" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:706 +#: frappe/public/js/frappe/form/controls/link.js:717 msgid "{0} is an ancestor of {1}" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1647 +#: frappe/core/doctype/doctype/doctype.py:1650 msgid "{0} is an invalid Data field." msgstr "{0}是无效的数据字段" @@ -32197,16 +32213,16 @@ msgstr "{0}是无效的数据字段" msgid "{0} is an invalid email address in 'Recipients'" msgstr "{0}是“收件人”中的无效电子邮件地址" -#: frappe/public/js/frappe/form/controls/link.js:673 +#: frappe/public/js/frappe/form/controls/link.js:684 msgid "{0} is before {1}" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:702 +#: frappe/public/js/frappe/form/controls/link.js:713 msgid "{0} is between {1}" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:699 -#: frappe/public/js/frappe/views/reports/report_view.js:1464 +#: frappe/public/js/frappe/form/controls/link.js:710 +#: frappe/public/js/frappe/views/reports/report_view.js:1470 msgid "{0} is between {1} and {2}" msgstr "{0}介于{1}和{2}之间" @@ -32215,53 +32231,49 @@ msgstr "{0}介于{1}和{2}之间" msgid "{0} is currently {1}" msgstr "{0}当前状态为{1}" -#: frappe/public/js/frappe/form/controls/link.js:636 -#: frappe/public/js/frappe/form/controls/link.js:654 +#: frappe/public/js/frappe/form/controls/link.js:647 +#: frappe/public/js/frappe/form/controls/link.js:665 msgid "{0} is disabled" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:635 -#: frappe/public/js/frappe/form/controls/link.js:655 +#: frappe/public/js/frappe/form/controls/link.js:646 +#: frappe/public/js/frappe/form/controls/link.js:666 msgid "{0} is enabled" msgstr "" -#: frappe/public/js/frappe/views/reports/report_view.js:1433 +#: frappe/public/js/frappe/views/reports/report_view.js:1439 msgid "{0} is equal to {1}" msgstr "{0}等于{1}" -#: frappe/public/js/frappe/form/controls/link.js:680 -#: frappe/public/js/frappe/views/reports/report_view.js:1453 +#: frappe/public/js/frappe/form/controls/link.js:691 +#: frappe/public/js/frappe/views/reports/report_view.js:1459 msgid "{0} is greater than or equal to {1}" msgstr "{0}大于或等于{1}" -#: frappe/public/js/frappe/form/controls/link.js:670 -#: frappe/public/js/frappe/views/reports/report_view.js:1443 +#: frappe/public/js/frappe/form/controls/link.js:681 +#: frappe/public/js/frappe/views/reports/report_view.js:1449 msgid "{0} is greater than {1}" msgstr "{0}大于{1}" -#: frappe/public/js/frappe/form/controls/link.js:685 -#: frappe/public/js/frappe/views/reports/report_view.js:1458 +#: frappe/public/js/frappe/form/controls/link.js:696 +#: frappe/public/js/frappe/views/reports/report_view.js:1464 msgid "{0} is less than or equal to {1}" msgstr "{0}小于或等于{1}" -#: frappe/public/js/frappe/form/controls/link.js:675 -#: frappe/public/js/frappe/views/reports/report_view.js:1448 +#: frappe/public/js/frappe/form/controls/link.js:686 +#: frappe/public/js/frappe/views/reports/report_view.js:1454 msgid "{0} is less than {1}" msgstr "{0}小于{1}" -#: frappe/public/js/frappe/views/reports/report_view.js:1483 +#: frappe/public/js/frappe/views/reports/report_view.js:1489 msgid "{0} is like {1}" msgstr "{0}类似于{1}" -#: frappe/email/doctype/email_account/email_account.py:193 +#: frappe/email/doctype/email_account/email_account.py:194 msgid "{0} is mandatory" msgstr "{0}是必填项" -#: frappe/database/query.py:860 -msgid "{0} is not a child table of {1}" -msgstr "{0}不是{1}的子表" - -#: frappe/public/js/frappe/form/controls/link.js:708 +#: frappe/public/js/frappe/form/controls/link.js:719 msgid "{0} is not a descendant of {1}" msgstr "" @@ -32318,7 +32330,7 @@ msgstr "{0}不是{1}的有效父字段" msgid "{0} is not a valid report format. Report format should one of the following {1}" msgstr "{0}不是有效的报告格式。报告格式应为以下之一:{1}" -#: frappe/core/doctype/file/file.py:556 +#: frappe/core/doctype/file/file.py:557 msgid "{0} is not a zip file" msgstr "{0}不是zip文件" @@ -32326,26 +32338,26 @@ msgstr "{0}不是zip文件" msgid "{0} is not an allowed role for {1}" msgstr "{0}不是{1}的允许角色" -#: frappe/public/js/frappe/form/controls/link.js:710 +#: frappe/public/js/frappe/form/controls/link.js:721 msgid "{0} is not an ancestor of {1}" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:657 -#: frappe/public/js/frappe/views/reports/report_view.js:1438 +#: frappe/public/js/frappe/form/controls/link.js:668 +#: frappe/public/js/frappe/views/reports/report_view.js:1444 msgid "{0} is not equal to {1}" msgstr "{0}不等于{1}" -#: frappe/public/js/frappe/views/reports/report_view.js:1485 +#: frappe/public/js/frappe/views/reports/report_view.js:1491 msgid "{0} is not like {1}" msgstr "{0}与{1}不相似" -#: frappe/public/js/frappe/form/controls/link.js:661 -#: frappe/public/js/frappe/views/reports/report_view.js:1479 +#: frappe/public/js/frappe/form/controls/link.js:672 +#: frappe/public/js/frappe/views/reports/report_view.js:1485 msgid "{0} is not one of {1}" msgstr "{0}不属于{1}" -#: frappe/public/js/frappe/form/controls/link.js:691 -#: frappe/public/js/frappe/views/reports/report_view.js:1489 +#: frappe/public/js/frappe/form/controls/link.js:702 +#: frappe/public/js/frappe/views/reports/report_view.js:1495 msgid "{0} is not set" msgstr "{0}未设置" @@ -32353,20 +32365,20 @@ msgstr "{0}未设置" msgid "{0} is now default print format for {1} doctype" msgstr "{0}现在是{1}类型的默认打印格式" -#: frappe/public/js/frappe/form/controls/link.js:678 +#: frappe/public/js/frappe/form/controls/link.js:689 msgid "{0} is on or after {1}" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:683 +#: frappe/public/js/frappe/form/controls/link.js:694 msgid "{0} is on or before {1}" msgstr "" -#: frappe/public/js/frappe/form/controls/link.js:659 -#: frappe/public/js/frappe/views/reports/report_view.js:1472 +#: frappe/public/js/frappe/form/controls/link.js:670 +#: frappe/public/js/frappe/views/reports/report_view.js:1478 msgid "{0} is one of {1}" msgstr "{0}属于{1}" -#: frappe/email/doctype/email_account/email_account.py:304 +#: frappe/email/doctype/email_account/email_account.py:305 #: frappe/model/naming.py:224 #: frappe/printing/doctype/print_format/print_format.py:101 #: frappe/printing/doctype/print_format/print_format.py:104 @@ -32374,21 +32386,21 @@ msgstr "{0}属于{1}" msgid "{0} is required" msgstr "{0}是必填项" -#: frappe/public/js/frappe/form/controls/link.js:688 -#: frappe/public/js/frappe/views/reports/report_view.js:1488 +#: frappe/public/js/frappe/form/controls/link.js:699 +#: frappe/public/js/frappe/views/reports/report_view.js:1494 msgid "{0} is set" msgstr "{0}已设置" -#: frappe/public/js/frappe/form/controls/link.js:712 -#: frappe/public/js/frappe/views/reports/report_view.js:1467 +#: frappe/public/js/frappe/form/controls/link.js:723 +#: frappe/public/js/frappe/views/reports/report_view.js:1473 msgid "{0} is within {1}" msgstr "{0}在{1}范围内" -#: frappe/public/js/frappe/form/controls/link.js:693 +#: frappe/public/js/frappe/form/controls/link.js:704 msgid "{0} is {1}" msgstr "" -#: frappe/public/js/frappe/list/list_view.js:1854 +#: frappe/public/js/frappe/list/list_view.js:1865 msgid "{0} items selected" msgstr "已选{0}条记录" @@ -32444,11 +32456,11 @@ msgstr "{0}不能是{1}中的任何一项" msgid "{0} must be one of {1}" msgstr "{0}必须属于{1}" -#: frappe/model/base_document.py:991 +#: frappe/model/base_document.py:1004 msgid "{0} must be set first" msgstr "{0}必须首先设置" -#: frappe/model/base_document.py:846 +#: frappe/model/base_document.py:859 msgid "{0} must be unique" msgstr "{0}必须是唯一的" @@ -32468,12 +32480,12 @@ msgstr "{0}不是有效状态" msgid "{0} not allowed to be renamed" msgstr "{0}不允许改名" -#: frappe/core/doctype/report/report.py:433 -#: frappe/public/js/frappe/list/list_view.js:1231 +#: frappe/core/doctype/report/report.py:435 +#: frappe/public/js/frappe/list/list_view.js:1242 msgid "{0} of {1}" msgstr "第{0}项 / 共{1}项" -#: frappe/public/js/frappe/list/list_view.js:1233 +#: frappe/public/js/frappe/list/list_view.js:1244 msgid "{0} of {1} ({2} rows with children)" msgstr "{0} / {1} ({2} 行有子记录)" @@ -32549,7 +32561,7 @@ msgstr "{0}已成功保存" msgid "{0} self assigned this task: {1}" msgstr "{0}分派了待办给自己:{1}" -#: frappe/share.py:262 +#: frappe/share.py:257 msgid "{0} shared a document {1} {2} with you" msgstr "{0}分享了单据{1} {2}给你" @@ -32637,11 +32649,11 @@ msgstr "已添加{0} {1}" msgid "{0} {1} added to Dashboard {2}" msgstr "{0}{1}已添加到仪表盘{2}" -#: frappe/model/base_document.py:765 frappe/model/rename_doc.py:110 +#: frappe/model/base_document.py:778 frappe/model/rename_doc.py:110 msgid "{0} {1} already exists" msgstr "{0} {1}已经存在" -#: frappe/model/base_document.py:1102 +#: frappe/model/base_document.py:1115 msgid "{0} {1} cannot be \"{2}\". It should be one of \"{3}\"" msgstr "{0} {1}不能为“{2}”。只能是“{3}”其中一个" @@ -32665,7 +32677,7 @@ msgstr "{0} {1}未找到" msgid "{0} {1}: Submitted Record cannot be deleted. You must {2} Cancel {3} it first." msgstr "{0} {1}: 已提交单据不可被删除. 应 {2} 先取消 {3}." -#: frappe/model/base_document.py:1234 +#: frappe/model/base_document.py:1247 msgid "{0}, Row {1}" msgstr "{0},第{1}行" @@ -32674,11 +32686,11 @@ msgctxt "Money in words" msgid "{0}." msgstr "{0}." -#: frappe/utils/print_format.py:149 frappe/utils/print_format.py:193 +#: frappe/utils/print_format.py:150 frappe/utils/print_format.py:194 msgid "{0}/{1} complete | Please leave this tab open until completion." msgstr "已完成{0}/{1} | 请保持此标签页开启直至完成" -#: frappe/model/base_document.py:1239 +#: frappe/model/base_document.py:1252 msgid "{0}: '{1}' ({3}) will get truncated, as max characters allowed is {2}" msgstr "{0}:“{1}”({3})将被截断,因最大允许字符数为{2}" @@ -32686,43 +32698,43 @@ msgstr "{0}:“{1}”({3})将被截断,因最大允许字符数为{2}" msgid "{0}: Failed to attach new recurring document. To enable attaching document in the auto repeat notification email, enable {1} in Print Settings" msgstr "{0}:附加新周期性文档失败。需在打印设置中启用{1}以在自动重复通知邮件中附加文档" -#: frappe/core/doctype/doctype/doctype.py:1455 +#: frappe/core/doctype/doctype/doctype.py:1458 msgid "{0}: Field '{1}' cannot be set as Unique as it has non-unique values" msgstr "{0}:字段“{1}”无法设置为“唯一”,因为它具有非唯一值" -#: frappe/core/doctype/doctype/doctype.py:1363 +#: frappe/core/doctype/doctype/doctype.py:1366 msgid "{0}: Field {1} in row {2} cannot be hidden and mandatory without default" msgstr "{0}:行{2}中的字段{1}无法隐藏,并且在没有默认情况下是必需的" -#: frappe/core/doctype/doctype/doctype.py:1322 +#: frappe/core/doctype/doctype/doctype.py:1325 msgid "{0}: Field {1} of type {2} cannot be mandatory" msgstr "{0}:类型{2}的字段{1}不能是必需的" -#: frappe/core/doctype/doctype/doctype.py:1310 +#: frappe/core/doctype/doctype/doctype.py:1313 msgid "{0}: Fieldname {1} appears multiple times in rows {2}" msgstr "{0}:字段名{1}在行{2}中多次出现" -#: frappe/core/doctype/doctype/doctype.py:1442 +#: frappe/core/doctype/doctype/doctype.py:1445 msgid "{0}: Fieldtype {1} for {2} cannot be unique" msgstr "{0}:{2}的字段类型{1}不能是唯一的" -#: frappe/core/doctype/doctype/doctype.py:1804 +#: frappe/core/doctype/doctype/doctype.py:1807 msgid "{0}: No basic permissions set" msgstr "{0} :基本权限未设置" -#: frappe/core/doctype/doctype/doctype.py:1818 +#: frappe/core/doctype/doctype/doctype.py:1821 msgid "{0}: Only one rule allowed with the same Role, Level and {1}" msgstr "{0}:具有相同的角色,级别和允许只有一个规则{1}" -#: frappe/core/doctype/doctype/doctype.py:1344 +#: frappe/core/doctype/doctype/doctype.py:1347 msgid "{0}: Options must be a valid DocType for field {1} in row {2}" msgstr "{0}:选项必须是行{2}中字段{1}的有效DocType" -#: frappe/core/doctype/doctype/doctype.py:1333 +#: frappe/core/doctype/doctype/doctype.py:1336 msgid "{0}: Options required for Link or Table type field {1} in row {2}" msgstr "{0}:请为第{2}行中的链接或表类型字段{1}维护选项信息" -#: frappe/core/doctype/doctype/doctype.py:1351 +#: frappe/core/doctype/doctype/doctype.py:1354 msgid "{0}: Options {1} must be the same as doctype name {2} for the field {3}" msgstr "{0}:选项{1}必须与字段{3}的单据类型名称{2}相同" @@ -32730,47 +32742,47 @@ msgstr "{0}:选项{1}必须与字段{3}的单据类型名称{2}相同" msgid "{0}: Other permission rules may also apply" msgstr "{0}:其它权限也可能适用" -#: frappe/core/doctype/doctype/doctype.py:1833 +#: frappe/core/doctype/doctype/doctype.py:1836 msgid "{0}: Permission at level 0 must be set before higher levels are set" msgstr "{0} :更高级别的权限设置前请先设置0级权限" -#: frappe/core/doctype/doctype/doctype.py:1910 +#: frappe/core/doctype/doctype/doctype.py:1913 msgid "{0}: The 'Amend' permission cannot be granted for a non-submittable DocType." msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1858 +#: frappe/core/doctype/doctype/doctype.py:1861 msgid "{0}: The 'Amend' permission cannot be granted without the 'Create' permission." msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1845 +#: frappe/core/doctype/doctype/doctype.py:1848 msgid "{0}: The 'Cancel' permission cannot be granted without the 'Submit' permission." msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1892 +#: frappe/core/doctype/doctype/doctype.py:1895 msgid "{0}: The 'Export' permission was removed because it cannot be granted for a 'single' DocType." msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1918 +#: frappe/core/doctype/doctype/doctype.py:1921 msgid "{0}: The 'Import' permission cannot be granted for a non-importable DocType." msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1864 +#: frappe/core/doctype/doctype/doctype.py:1867 msgid "{0}: The 'Import' permission cannot be granted without the 'Create' permission." msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1884 +#: frappe/core/doctype/doctype/doctype.py:1887 msgid "{0}: The 'Import' permission was removed because it cannot be granted for a 'single' DocType." msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1876 +#: frappe/core/doctype/doctype/doctype.py:1879 msgid "{0}: The 'Report' permission was removed because it cannot be granted for a 'single' DocType." msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1903 +#: frappe/core/doctype/doctype/doctype.py:1906 msgid "{0}: The 'Submit' permission cannot be granted for a non-submittable DocType." msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1852 +#: frappe/core/doctype/doctype/doctype.py:1855 msgid "{0}: The 'Submit', 'Cancel', and 'Amend' permissions cannot be granted without the 'Write' permission." msgstr "" @@ -32778,11 +32790,11 @@ msgstr "" msgid "{0}: You can increase the limit for the field if required via {1}" msgstr "{0}:可通过{1}按需调整字段限制" -#: frappe/core/doctype/doctype/doctype.py:1297 +#: frappe/core/doctype/doctype/doctype.py:1300 msgid "{0}: fieldname cannot be set to reserved field {1} in DocType" msgstr "" -#: frappe/core/doctype/doctype/doctype.py:1288 +#: frappe/core/doctype/doctype/doctype.py:1291 msgid "{0}: fieldname cannot be set to reserved keyword {1}" msgstr "{0}:字段名不能设为保留关键字{1}" @@ -32799,7 +32811,7 @@ msgstr "{0}:{1} 状态已变更为 {2}" msgid "{0}: {1} vs {2}" msgstr "{0}:{1}与{2}" -#: frappe/core/doctype/doctype/doctype.py:1463 +#: frappe/core/doctype/doctype/doctype.py:1466 msgid "{0}:Fieldtype {1} for {2} cannot be indexed" msgstr "{0}:无法为{2}的字段类型{1}生成索引" @@ -32823,7 +32835,7 @@ msgstr "已选择{count}行" msgid "{count} rows selected" msgstr "已选择{count}行" -#: frappe/core/doctype/doctype/doctype.py:1517 +#: frappe/core/doctype/doctype/doctype.py:1520 msgid "{{{0}}} is not a valid fieldname pattern. It should be {{field_name}}." msgstr "{{{0}}}是不是一个有效的字段名模式。它应该是{{FIELD_NAME}}。" @@ -32847,8 +32859,8 @@ msgstr "{}不支持自动日志清理" msgid "{} field cannot be empty." msgstr "{}字段不能为空" -#: frappe/email/doctype/email_account/email_account.py:223 -#: frappe/email/doctype/email_account/email_account.py:231 +#: frappe/email/doctype/email_account/email_account.py:224 +#: frappe/email/doctype/email_account/email_account.py:232 msgid "{} has been disabled. It can only be enabled if {} is checked." msgstr "{}已被禁用,需勾选{}方可启用" @@ -32856,7 +32868,7 @@ msgstr "{}已被禁用,需勾选{}方可启用" msgid "{} is not a valid date string." msgstr "{}不是有效日期字符串" -#: frappe/commands/utils.py:564 +#: frappe/commands/utils.py:512 msgid "{} not found in PATH! This is required to access the console." msgstr "PATH中未找到{}!访问控制台需要此组件" diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index 6c88dfefd6..af11b43948 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -1,8 +1,8 @@ # Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors # License: MIT. See LICENSE import datetime +import functools import json -import keyword import re import weakref from types import MappingProxyType @@ -48,6 +48,40 @@ DatetimeTypes = datetime.date | datetime.datetime | datetime.time | datetime.tim max_positive_value = {"smallint": 2**15 - 1, "int": 2**31 - 1, "bigint": 2**63 - 1} +# Sentinel object for cache miss detection in bulk link validation +# Used to distinguish between "not in cache" and "cached as None (does not exist)" +_NOT_IN_CACHE = object() + + +def _fetch_link_values(doctype: str, docname: str, fields: tuple, meta) -> dict | None: + """Fetch link field values from database with fallback logic. + + This helper encapsulates the repeated DB query pattern: + 1. Try get_value with cache=True + 2. If not found, retry without cache (handles negative caching) + 3. For virtual doctypes, use frappe.get_doc instead + + Args: + doctype: Target DocType + docname: Document name to fetch + fields: Tuple of field names to fetch + meta: Meta object for the doctype + + Returns: + Dict of field values or None if document doesn't exist + """ + if not meta.get("is_virtual"): + values = frappe.db.get_value(doctype, docname, fields, as_dict=True, cache=True, order_by=None) + if not values: + values = frappe.db.get_value(doctype, docname, fields, as_dict=True, order_by=None) + else: + try: + values = frappe.get_doc(doctype, docname).as_dict() + except frappe.DoesNotExistError: + values = None + return values + + DOCTYPE_TABLE_FIELDS = [ _dict(fieldname="fields", options="DocField"), _dict(fieldname="permissions", options="DocPerm"), @@ -67,18 +101,15 @@ DOCTYPES_FOR_DOCTYPE = {"DocType", *TABLE_DOCTYPES_FOR_DOCTYPE.values()} def _reduce_extended_instance(doc): """Make extended class instances pickle-able. - When unpickling, this will use get_controller() to recreate the extended class. + Stores __bases__ for reconstructing the extended class during unpickling. Respects the __getstate__ method for proper state handling. """ - return (_reconstruct_extended_instance, (doc.doctype,), doc.__getstate__()) + return (_reconstruct_extended_instance, (type(doc).__bases__,), doc.__getstate__()) -def _reconstruct_extended_instance(doctype): - """ - Helper function to reconstruct an extended class instance during unpickling. - """ - # Get the current extended class (uses caching from get_controller) - extended_class = get_controller(doctype) +def _reconstruct_extended_instance(bases): + """Reconstruct an extended class instance during unpickling.""" + extended_class = _create_extended_class(bases) return extended_class.__new__(extended_class) @@ -208,9 +239,25 @@ def _get_extended_class(base_class, doctype): # Create the extended class by combining extension classes with base class # Extension classes come first in MRO, then base class + return _create_extended_class((*extension_classes, base_class)) + + +# cached to avoid recreating the same class multiple times during unpickling +# safe to cache, classes on file don't change at runtime +@functools.cache +def _create_extended_class(bases): + """Create an extended class from base classes. + + Args: + bases: Tuple of base classes (extension classes first, then the controller class) + + Returns: + Extended class combining all bases with pickle support + """ + base_class = bases[-1] return type( f"Extended{base_class.__name__}", - (*extension_classes, base_class), + bases, { "__reduce__": _reduce_extended_instance, "__module__": base_class.__module__, @@ -958,9 +1005,13 @@ class BaseDocument: return missing - def get_invalid_links(self, is_submittable=False): - """Return list of invalid links and also update fetch values if not set.""" + def get_invalid_links(self, is_submittable=False, link_value_cache=None): + """Return list of invalid links and also update fetch values if not set. + Args: + is_submittable: Whether the parent document is submittable + link_value_cache: Cache of prefetched link values for bulk optimization + """ is_submittable = is_submittable or self.meta.is_submittable def get_msg(df, docname): @@ -1006,23 +1057,45 @@ class BaseDocument: if not _df.get("fetch_if_empty") or (_df.get("fetch_if_empty") and not self.get(_df.fieldname)) ] - values_to_fetch = ( - "name", - *(_df.fetch_from.split(".")[-1] for _df in fields_to_fetch), - ) - if check_docstatus: - values_to_fetch += ("docstatus",) - - if not meta.get("is_virtual"): - values = frappe.db.get_value( - doctype, docname, values_to_fetch, as_dict=True, cache=True, order_by=None + values_to_fetch = tuple( + sorted( + { + "name", + *(_df.fetch_from.split(".")[-1] for _df in fields_to_fetch), + *(("docstatus",) if check_docstatus else ()), + } ) - if not values: # NOTE: DB Value cache does negative caching, which is hard to remove now. - values = frappe.db.get_value( - doctype, docname, values_to_fetch, as_dict=True, order_by=None - ) + ) + + # Use cache if available (bulk optimization) + if link_value_cache is not None: + cache_for_dt = link_value_cache.get(doctype, {}) + + # Get cached value with sentinel for miss detection + if frappe.db.db_type == "mariadb" and isinstance(docname, str): + cached = cache_for_dt.get(docname, _NOT_IN_CACHE) + if cached is _NOT_IN_CACHE: + cached = cache_for_dt.get(docname.casefold(), _NOT_IN_CACHE) + else: + cached = cache_for_dt.get(docname, _NOT_IN_CACHE) + + if cached is _NOT_IN_CACHE: + # Not prefetched - fall back to original DB query path + values = _fetch_link_values(doctype, docname, values_to_fetch, meta) + elif cached is None: + # Prefetch confirmed document doesn't exist + values = _dict.fromkeys(values_to_fetch, None) + elif all(f in cached for f in values_to_fetch): + # Cache has all required fields + values = cached + else: + # Cache missing some fields - fall back to DB + values = _fetch_link_values(doctype, docname, values_to_fetch, meta) + if values is None and not meta.get("is_virtual"): + values = cached # Fall back to partial cache else: - values = frappe.get_doc(doctype, docname).as_dict() + # No cache - original behavior + values = _fetch_link_values(doctype, docname, values_to_fetch, meta) # fallback to dict with field_to_fetch=None if link field value is not found # (for compatibility, `values` must have same data type) diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index 683adb1fe6..dfb7681059 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -499,9 +499,11 @@ from {tables} if isinstance(token, Function): if (name := (token.get_name())) and name.lower() in blacklisted_functions: _raise_exception() - if token.ttype == tokens.Keyword: - if token.value.lower() in blacklisted_keywords: + + if token.ttype in (tokens.Keyword, tokens.Name): + if any(re.search(rf"\b{kw}\b", token.value.lower()) for kw in blacklisted_keywords): _raise_exception() + if token.is_group: _check_sql_token(token) @@ -605,6 +607,8 @@ from {tables} if self.flags.ignore_permissions: return + self.join = "left join" + if doctype not in self.permission_map: self._set_permission_map(doctype, parent_doctype) @@ -868,6 +872,15 @@ from {tables} if f.operator.lower() == "in": can_be_null &= not f.value or any(v is None or v == "" for v in f.value) + # Handle empty lists for IN/NOT IN operators before processing + # IN with empty list should return 0 results (always False: 1=0) + # NOT IN with empty list should return all results (always True: 1=1) + if isinstance(f.value, (list, tuple)) and len(f.value) == 0: + if f.operator.lower() == "in": + return "1=0" + else: # not in + return "1=1" + if value is None: values = f.value or "" if isinstance(values, str): @@ -1150,9 +1163,19 @@ from {tables} if c := frappe.call(frappe.get_attr(method), self.user, doctype=self.doctype): conditions.append(c) + active_child_tables = [] + if len(self.tables) > 1: # only if query has multiple tables involved + main_table_name = f"tab{self.doctype}" + for table_name in self.tables: + clean_name = table_name.replace("`", "").replace('"', "") + if clean_name != main_table_name: + active_child_tables.append(clean_name) + if permission_script_name := get_server_script_map().get("permission_query", {}).get(self.doctype): script = frappe.get_doc("Server Script", permission_script_name) - if condition := script.get_permission_query_conditions(self.user): + if condition := script.get_permission_query_conditions( + self.user, active_child_tables=active_child_tables + ): conditions.append(condition) return " and ".join(conditions) if conditions else "" diff --git a/frappe/model/document.py b/frappe/model/document.py index 94086ee411..822bbff2ff 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -1129,14 +1129,144 @@ class Document(BaseDocument): ) ) + def _prefetch_link_values(self): + """Pre-fetch all link values including fetch_from fields for bulk validation. + + This optimization collects all Link/Dynamic Link values from the doc tree, + then bulk-fetches them by doctype to eliminate N+1 queries. + """ + if self.flags.ignore_links or self._action == "cancel": + return + + from collections import defaultdict + + def _chunk(iterable, size): + """Split iterable into chunks of given size.""" + lst = list(iterable) + for i in range(0, len(lst), size): + yield lst[i : i + size] + + self._link_value_cache = {} + docs_to_validate = [self, *self.get_all_children()] + + # Collect: {doctype: {'names': set(), 'fields': set()}} + prefetch_map = defaultdict(lambda: {"names": set(), "fields": {"name"}}) + + for doc in docs_to_validate: + is_submittable = self.meta.is_submittable + link_fields = doc.meta.get_link_fields() + doc.meta.get( + "fields", {"fieldtype": ("=", "Dynamic Link")} + ) + + for df in link_fields: + docname = doc.get(df.fieldname) + if not docname: + continue + + # Skip invalid docname types - let get_invalid_links handle the assertion + if not isinstance(docname, str | int): + continue + + # Resolve target doctype + if df.fieldtype == "Link": + doctype = df.options + if not doctype: + continue + else: # Dynamic Link + doctype = doc.get(df.options) + if not doctype: + continue + + prefetch_map[doctype]["names"].add(docname) + + # Collect fetch_from fields - fetch ALL, let base_document handle fetch_if_empty + for fetch_df in doc.meta.get_fields_to_fetch(df.fieldname): + if fetch_df.get("fetch_from"): + source_field = fetch_df.fetch_from.split(".")[-1] + prefetch_map[doctype]["fields"].add(source_field) + + # Add docstatus if needed + target_meta = frappe.get_meta(doctype) + if is_submittable and target_meta.is_submittable: + prefetch_map[doctype]["fields"].add("docstatus") + + # Bulk fetch with chunking + for doctype, data in prefetch_map.items(): + meta = frappe.get_meta(doctype) + names = list(data["names"]) + fields = sorted(data["fields"]) # Sorted for deterministic cache key matching + + # Skip if no names to fetch for this doctype + if not names: + continue + + if meta.get("is_virtual"): + # Virtual doctypes: fetch individually + for name in names: + try: + values = frappe.get_doc(doctype, name).as_dict() + except frappe.DoesNotExistError: + values = None + self._link_value_cache.setdefault(doctype, {})[name] = values + + elif getattr(meta, "issingle", 0): + # Single doctypes + values = frappe.db.get_singles_dict(doctype) + values["name"] = doctype + for name in names: + self._link_value_cache.setdefault(doctype, {})[name] = frappe._dict(values) + + else: + # Regular doctypes: bulk fetch with chunking + result_dict = {} + field_tuple = tuple(fields) + + for name_chunk in _chunk(names, 1000): + results = frappe.db.get_all( + doctype, + filters={"name": ("in", name_chunk)}, + fields=fields, + ) + for row in results: + result_dict[row.name] = row + # Link fields may carry "123" (text) while autoincrement doctypes return 123 (int); + # adding str(name) avoids false cache misses that surface as invalid-link errors. + result_dict[str(row.name)] = row + # Case-insensitive key for MariaDB compatibility (strings only) + if frappe.db.db_type == "mariadb" and isinstance(row.name, str): + result_dict[row.name.casefold()] = row + + # Store results in both caches + for name in names: + if frappe.db.db_type == "mariadb" and isinstance(name, str): + cached_value = ( + result_dict.get(name) + or result_dict.get(str(name)) + or result_dict.get(name.casefold()) + ) + else: + cached_value = result_dict.get(name) or result_dict.get(str(name)) + + # Store in local document cache + self._link_value_cache.setdefault(doctype, {})[name] = cached_value + + # Also populate global db.value_cache for cross-document caching + # Only for string names (matching get_values behavior at line 632) + if cached_value is not None and isinstance(name, str): + frappe.db.value_cache[doctype][name][field_tuple] = [cached_value] + def _validate_links(self): if self.flags.ignore_links or self._action == "cancel": return - invalid_links, cancelled_links = self.get_invalid_links() + # Pre-fetch all link values in bulk + self._prefetch_link_values() + link_cache = getattr(self, "_link_value_cache", None) + + invalid_links, cancelled_links = self.get_invalid_links(link_value_cache=link_cache) for d in self.get_all_children(): - result = d.get_invalid_links(is_submittable=self.meta.is_submittable) + result = d.get_invalid_links(is_submittable=self.meta.is_submittable, link_value_cache=link_cache) invalid_links.extend(result[0]) cancelled_links.extend(result[1]) @@ -1294,7 +1424,7 @@ class Document(BaseDocument): self.run_method("on_discard") @frappe.whitelist() - def rename(self, name: str | int, merge=False, force=False, validate_rename=True): + def rename(self, name: str | int, merge: bool = False, force: bool = False, validate_rename: bool = True): """Rename the document to `name`. This transforms the current object.""" return self._rename(name=name, merge=merge, force=force, validate_rename=validate_rename) @@ -1656,10 +1786,10 @@ class Document(BaseDocument): @frappe.whitelist() def add_comment( self, - comment_type="Comment", - text=None, - comment_email=None, - comment_by=None, + comment_type: str = "Comment", + text: str | None = None, + comment_email: str | None = None, + comment_by: str | None = None, ): """Add a comment to this document. diff --git a/frappe/model/mapper.py b/frappe/model/mapper.py index 3e436cfb61..0dd0cf3b74 100644 --- a/frappe/model/mapper.py +++ b/frappe/model/mapper.py @@ -5,11 +5,14 @@ import json import frappe from frappe import _ from frappe.model import child_table_fields, default_fields, table_fields +from frappe.model.document import Document from frappe.utils import cstr @frappe.whitelist() -def make_mapped_doc(method, source_name, selected_children=None, args=None): +def make_mapped_doc( + method: str, source_name: str, selected_children: str | None = None, args: str | None = None +): """Return the mapped document calling the given mapper method. Set `selected_children` as flags for the `get_mapped_doc` method. @@ -30,7 +33,7 @@ def make_mapped_doc(method, source_name, selected_children=None, args=None): @frappe.whitelist() -def map_docs(method, source_names, target_doc, args=None): +def map_docs(method: str, source_names: str, target_doc: Document | dict | str, args: str | None = None): """Return the mapped document calling the given mapper method with each of the given source docs on the target doc. :param args: Args as string to pass to the mapper method diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index d80faa4216..5e1f6e4276 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -649,6 +649,9 @@ def update_parenttype_values(old: str, new: str): child_doctypes = set(list(d["options"] for d in child_doctypes) + property_setter_child_doctypes) for doctype in child_doctypes: + if frappe.get_meta(doctype).is_virtual: + continue + table = frappe.qb.DocType(doctype) frappe.qb.update(table).set(table.parenttype, new).where(table.parenttype == old).run() diff --git a/frappe/model/utils/user_settings.py b/frappe/model/utils/user_settings.py index 6a689b495e..d2ef6c3f7f 100644 --- a/frappe/model/utils/user_settings.py +++ b/frappe/model/utils/user_settings.py @@ -63,14 +63,14 @@ def sync_user_settings(): @frappe.whitelist() -def save(doctype, user_settings): +def save(doctype: str, user_settings: str): user_settings = json.loads(user_settings or "{}") update_user_settings(doctype, user_settings) return user_settings @frappe.whitelist() -def get(doctype): +def get(doctype: str): return get_user_settings(doctype) diff --git a/frappe/model/workflow.py b/frappe/model/workflow.py index 8913a5fc9e..f44ef487f8 100644 --- a/frappe/model/workflow.py +++ b/frappe/model/workflow.py @@ -5,7 +5,7 @@ from __future__ import annotations import json from collections import defaultdict -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Any import frappe from frappe import _ @@ -43,7 +43,7 @@ def get_workflow_name(doctype): @frappe.whitelist() def get_transitions( - doc: Document | str | dict, workflow: Workflow = None, raise_exception: bool = False + doc: Document | str | dict, workflow: Workflow | None = None, raise_exception: bool = False ) -> list[dict]: """Return list of possible transitions for the given doc""" from frappe.model.document import Document @@ -117,7 +117,7 @@ def evaluate_workflow_value(value, evaluate_as_expression, doc): @frappe.whitelist() -def apply_workflow(doc, action): +def apply_workflow(doc: Document | str | dict, action: str): """Allow workflow action on the current doc""" doc = frappe.get_doc(frappe.parse_json(doc)) doc.load_from_db() @@ -228,7 +228,7 @@ def apply_workflow(doc, action): @frappe.whitelist() -def can_cancel_document(doctype): +def can_cancel_document(doctype: str): workflow = get_workflow(doctype) cancelling_states = [s.state for s in workflow.states if s.doc_status == "2"] if not cancelling_states: @@ -312,7 +312,7 @@ def get_workflow_field_value(workflow_name, field): @frappe.whitelist() -def bulk_workflow_approval(docnames, doctype, action): +def bulk_workflow_approval(docnames: str, doctype: str, action: str): docnames = json.loads(docnames) if len(docnames) < 20: _bulk_workflow_action(docnames, doctype, action) @@ -407,7 +407,7 @@ def print_workflow_log(messages, title, doctype, indicator): @frappe.whitelist() -def get_common_transition_actions(docs, doctype): +def get_common_transition_actions(docs: str | list[dict[str, Any]], doctype: str): common_actions = [] if isinstance(docs, str): docs = json.loads(docs) diff --git a/frappe/patches.txt b/frappe/patches.txt index 16accc67c4..add082e78d 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -257,3 +257,7 @@ execute:frappe.db.set_single_value("Desktop Settings", "icon_style", "Solid") execute:frappe.delete_doc_if_exists("Workspace Sidebar", "Productivity") frappe.patches.v16_0.unset_standard_field_for_auto_generated_icons execute:from frappe.email.doctype.notification.notification import install_notification_templates; install_notification_templates() +execute:frappe.db.set_value("Email Account", {}, "add_x_original_from", 1) +frappe.patches.v16_0.fix_myanmar_language_name +execute:frappe.db.set_value("Email Account", {}, "add_reply_to_header", 1) +frappe.patches.v16_0.set_reply_to_header diff --git a/frappe/patches/v16_0/fix_myanmar_language_name.py b/frappe/patches/v16_0/fix_myanmar_language_name.py new file mode 100644 index 0000000000..df4b08f33a --- /dev/null +++ b/frappe/patches/v16_0/fix_myanmar_language_name.py @@ -0,0 +1,9 @@ +import frappe + + +def execute(): + Language = frappe.qb.DocType("Language") + + frappe.qb.update(Language).set(Language.language_name, "မြန်မာ").where( + Language.language_code == "my" + ).run() diff --git a/frappe/patches/v16_0/set_reply_to_header.py b/frappe/patches/v16_0/set_reply_to_header.py new file mode 100644 index 0000000000..510b8db56f --- /dev/null +++ b/frappe/patches/v16_0/set_reply_to_header.py @@ -0,0 +1,15 @@ +import frappe + + +def execute() -> None: + accounts = frappe.db.get_all("Email Account", {"enable_incoming": 1, "enable_outgoing": 1}, pluck="name") + for account in accounts: + doc = frappe.get_doc("Email Account", account) + + if doc.reply_to_addresses: + continue + + doc.append("reply_to_addresses", {"email": doc.email_id}) + doc.flags.ignore_mandatory = True + doc.flags.ignore_validate = True # Ignore SMTP/IMAP validation + doc.save() diff --git a/frappe/printing/doctype/network_printer_settings/network_printer_settings.py b/frappe/printing/doctype/network_printer_settings/network_printer_settings.py index d2163adafc..c2c1aa39fb 100644 --- a/frappe/printing/doctype/network_printer_settings/network_printer_settings.py +++ b/frappe/printing/doctype/network_printer_settings/network_printer_settings.py @@ -21,7 +21,7 @@ class NetworkPrinterSettings(Document): # end: auto-generated types @frappe.whitelist() - def get_printers_list(self, ip="127.0.0.1", port=631): + def get_printers_list(self): printer_list = [] try: import cups diff --git a/frappe/printing/doctype/print_format/print_format.js b/frappe/printing/doctype/print_format/print_format.js index 3d2397c111..1b15d44f15 100644 --- a/frappe/printing/doctype/print_format/print_format.js +++ b/frappe/printing/doctype/print_format/print_format.js @@ -37,8 +37,6 @@ frappe.ui.form.on("Print Format", { frappe.set_route("print-format-builder", frm.doc.name); } }); - } else if (frm.doc.custom_format && !frm.doc.raw_printing) { - frm.set_df_property("html", "reqd", 1); } if (frappe.model.can_write("Customize Form")) { frappe.model.with_doctype(frm.doc.doc_type, function () { diff --git a/frappe/printing/doctype/print_format/print_format.json b/frappe/printing/doctype/print_format/print_format.json index 2a7b3c0215..fa4b9313d3 100644 --- a/frappe/printing/doctype/print_format/print_format.json +++ b/frappe/printing/doctype/print_format/print_format.json @@ -117,6 +117,7 @@ "fieldname": "html", "fieldtype": "Code", "label": "HTML", + "mandatory_depends_on": "eval: doc.custom_format", "oldfieldname": "html", "oldfieldtype": "Text Editor", "options": "Jinja" @@ -127,6 +128,7 @@ "fieldname": "raw_commands", "fieldtype": "Code", "label": "Raw Commands", + "mandatory_depends_on": "raw_printing", "options": "Jinja" }, { @@ -292,7 +294,7 @@ "icon": "fa fa-print", "idx": 1, "links": [], - "modified": "2025-09-23 10:39:51.123539", + "modified": "2026-02-11 13:17:55.662780", "modified_by": "Administrator", "module": "Printing", "name": "Print Format", diff --git a/frappe/printing/page/print/print.py b/frappe/printing/page/print/print.py index baf98438cd..f70c5c226a 100644 --- a/frappe/printing/page/print/print.py +++ b/frappe/printing/page/print/print.py @@ -2,7 +2,7 @@ import frappe @frappe.whitelist() -def get_print_settings_to_show(doctype, docname): +def get_print_settings_to_show(doctype: str, docname: str): doc = frappe.get_doc(doctype, docname) print_settings = frappe.get_single("Print Settings") diff --git a/frappe/printing/page/print_format_builder/print_format_builder.py b/frappe/printing/page/print_format_builder/print_format_builder.py index 67273120c2..b766eb836f 100644 --- a/frappe/printing/page/print_format_builder/print_format_builder.py +++ b/frappe/printing/page/print_format_builder/print_format_builder.py @@ -2,7 +2,9 @@ import frappe @frappe.whitelist() -def create_custom_format(doctype, name, based_on="Standard", beta=False): +def create_custom_format( + doctype: str, name: str | int, based_on: str = "Standard", beta: str | int | bool = False +): doc = frappe.new_doc("Print Format") doc.doc_type = doctype doc.name = name diff --git a/frappe/public/css/bootstrap.css b/frappe/public/css/bootstrap.css index ab165529f8..e739a68ff7 100644 --- a/frappe/public/css/bootstrap.css +++ b/frappe/public/css/bootstrap.css @@ -5760,10 +5760,6 @@ body { .list-group-item { padding: 8px 15px; } -h3, -h4 { - font-weight: bold; -} ul.with-margin li, ol.with-margin li { margin: 7px auto; diff --git a/frappe/public/js/billing.bundle.js b/frappe/public/js/billing.bundle.js index 89c9a9d3a7..00fd226e1a 100644 --- a/frappe/public/js/billing.bundle.js +++ b/frappe/public/js/billing.bundle.js @@ -2,35 +2,62 @@ let frappeCloudBaseEndpoint = "https://frappecloud.com"; let isFCUser = false; $(document).ready(function () { - if ( - frappe.boot.is_fc_site && - !!frappe.boot.setup_complete && - !frappe.is_mobile() && - frappe.user.has_role("System Manager") - ) { - frappe.call({ - method: "frappe.integrations.frappe_providers.frappecloud_billing.current_site_info", - callback: (r) => { - if (!r?.message) return; + const site_info = frappe.boot.site_info; + if (site_info) { + const trial_end_date = new Date(site_info.trial_end_date); + frappeCloudBaseEndpoint = site_info.base_url; + isFCUser = site_info.is_fc_user; - const response = r.message; - const trial_end_date = new Date(response.trial_end_date); - frappeCloudBaseEndpoint = response.base_url; - isFCUser = response.is_fc_user; + const today = new Date(); + const diffTime = trial_end_date - today; + const trial_end_days = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); + const trial_end_string = + trial_end_days > 1 ? `${trial_end_days} days` : `${trial_end_days} day`; - if (response.trial_end_date && trial_end_date > new Date()) { - if ($(".layout-main-section").closest("#page-desktop").length === 0) { - $(".layout-main-section").before( - generateTrialSubscriptionBanner(response.trial_end_date) - ); - } + const banner_message = isFCUser + ? "Please upgrade for uninterrupted services" + : "Please contact your system administrator to upgrade your plan."; + let card_args = { + title: `Your trial ends in ${trial_end_string}`, + message: banner_message, + outline: true, + close_button: true, + popper: true, + primary_button_alignment: "right", + dismiss_key: `${frappe.boot.site_info.name}_trial_card_time`, + dismiss_it_for: "day", + }; + if (isFCUser) { + $.extend(card_args, { + primary_action_label: "Upgrade", + primary_action_suffix_icon: "square-arrow-out-up-right", + styles: { + "sidebar-card-button-bg-color": "var(--surface-gray-2)", + "sidebar-card-button-color": "var(--ink-gray-7)", + "sidebar-card-button-outline": "var(--ink-gray-7)", + }, + primary_action: () => { + openFrappeCloudDashboard(); + }, + }); + } + $(document).on("desktop_screen", function (event, data) { + if ( + frappe.boot.is_fc_site && + !!frappe.boot.setup_complete && + !frappe.is_mobile() && + frappe.user.has_role("System Manager") + ) { + if (site_info.trial_end_date && trial_end_date > new Date()) { + card_args.parent = $(".icons-container").first(); + let banner_card = new frappe.ui.SidebarCard(card_args); } - addManageBillingDropdown(); + addManageBillingDropdown(data.desktop); $(".login-to-fc, .upgrade-plan-button").on("click", function () { openFrappeCloudDashboard(); }); - }, + } }); } }); @@ -39,109 +66,21 @@ function setErrorMessage(message) { $("#fc-login-error").text(message); } -function addManageBillingDropdown() { - $(document).on("desktop_screen", function (event, data) { - data.desktop.add_menu_item({ - label: __("Manage Billing"), - icon: "receipt-text", - condition: function () { - return frappe.boot.sysdefaults.demo_company; - }, - onClick: function () { - return openFrappeCloudDashboard(); - }, - }); +function addManageBillingDropdown(desktop) { + desktop.add_menu_item({ + label: __("Manage Billing"), + icon: "receipt-text", + condition: function () { + return frappe.boot.is_fc_site; + }, + onClick: function () { + return openFrappeCloudDashboard(); + }, }); } function openFrappeCloudDashboard() { - window.open(`${frappeCloudBaseEndpoint}/dashboard/sites/${frappe.boot.sitename}`, "_blank"); -} - -function generateTrialSubscriptionBanner(trialEndDate) { - const trial_end_date = new Date(trialEndDate); - const today = new Date(); - const diffTime = trial_end_date - today; - const trial_end_days = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); - const trial_end_string = - trial_end_days > 1 ? `${trial_end_days} days` : `${trial_end_days} day`; - - return $(` - -
-
- - - - - - - - - - -
- - Your trial ends in ${trial_end_string}. - - - ${ - isFCUser - ? "Please upgrade for uninterrupted services" - : "Please contact your system administrator to upgrade your plan." - } - -
-
- ${ - isFCUser - ? `` - : "" - } -
-`); + window.open( + `${frappeCloudBaseEndpoint}/dashboard/sites/${frappe.boot.site_info.name}`, + "_blank" + ); } diff --git a/frappe/public/js/frappe/dom.js b/frappe/public/js/frappe/dom.js index 321c1f93f9..5d676259a6 100644 --- a/frappe/public/js/frappe/dom.js +++ b/frappe/public/js/frappe/dom.js @@ -347,12 +347,12 @@ frappe.get_modal = function (title, content) { - diff --git a/frappe/public/js/frappe/file_uploader/FileUploader.vue b/frappe/public/js/frappe/file_uploader/FileUploader.vue index 2420cc1bf5..10012c82ad 100644 --- a/frappe/public/js/frappe/file_uploader/FileUploader.vue +++ b/frappe/public/js/frappe/file_uploader/FileUploader.vue @@ -513,25 +513,36 @@ function check_restrictions(file) { return is_correct_type && valid_file_size; } + +function set_loading_state(dialog, loading) { + let $btn = dialog?.get_primary_btn(); + if (loading) { + $btn?.css("width", $btn.outerWidth()); + $btn?.html(``); + $btn?.prop("disabled", true); + dialog?.get_secondary_btn().prop("disabled", true); + } else { + $btn?.css("width", ""); + $btn?.html(__("Upload")); + $btn?.prop("disabled", false); + dialog?.get_secondary_btn().prop("disabled", false); + } +} function upload_files(dialog) { + set_loading_state(dialog, true); if (show_file_browser.value) { - return upload_via_file_browser(); - } - if (show_web_link.value) { - return upload_via_web_link(); - } - if (props.as_dataurl) { - return return_as_dataurl(); - } - if (!files.value.length) { + promise = upload_via_file_browser(); + } else if (show_web_link.value) { + promise = upload_via_web_link(); + } else if (props.as_dataurl) { + promise = return_as_dataurl(); + } else if (!files.value.length) { frappe.msgprint(__("Please select a file first.")); - return Promise.reject(); + promise = Promise.reject(); + } else { + promise = frappe.run_serially(files.value.map((file, i) => () => upload_file(file, i))); } - - dialog?.get_primary_btn().prop("disabled", true); - dialog?.get_secondary_btn().prop("disabled", true); - - return frappe.run_serially(files.value.map((file, i) => () => upload_file(file, i))); + return promise.finally(() => set_loading_state(dialog, false)); } function upload_via_file_browser() { let selected_file = file_browser.value.selected_node; @@ -548,12 +559,16 @@ function upload_via_file_browser() { function upload_via_web_link() { let file_url = web_link.value.url; if (!file_url) { - frappe.msgprint(__("Invalid URL")); - close_dialog.value = true; + web_link.value.invalid_input(__("Please enter a valid URL")); + return Promise.reject(); + } + try { + file_url = decodeURI(file_url); + } catch (error) { + var error_message = error.message; + web_link.value.invalid_input(__(error_message)); return Promise.reject(); } - file_url = decodeURI(file_url); - close_dialog.value = true; return upload_file({ file_url, }); @@ -584,7 +599,6 @@ function upload_file(file, i) { }); xhr.upload.addEventListener("load", (e) => { file.uploading = false; - resolve(); }); xhr.addEventListener("error", (e) => { file.failed = true; @@ -593,6 +607,7 @@ function upload_file(file, i) { xhr.onreadystatechange = () => { if (xhr.readyState == XMLHttpRequest.DONE) { if (xhr.status === 200) { + resolve(); file.request_succeeded = true; let r = null; let file_doc = null; @@ -617,7 +632,11 @@ function upload_file(file, i) { ) { close_dialog.value = true; } + if (show_web_link.value && file.file_url) { + close_dialog.value = true; + } } else if (xhr.status === 403) { + reject(); file.failed = true; let response = parse_error_response(xhr.responseText); file.error_message = __("Not permitted. {0}.", [response.error_message || ""]); @@ -625,16 +644,29 @@ function upload_file(file, i) { file.error_message += `\n${response.server_messages.join("\n")}`; } } else if (xhr.status === 413) { + reject(); file.failed = true; file.error_message = __("Size exceeds the maximum allowed file size."); } else if (xhr.status === 417) { + reject(); // regular frappe.throw() in backend file.failed = true; let response = parse_error_response(xhr.responseText); file.error_message = response.server_messages.length ? response.server_messages.join("\n") : __("File upload failed."); + + if (show_web_link.value && web_link.value && file.file_url) { + web_link.value.invalid_input(__(file.error_message)); + } else if (!files.value.includes(file)) { + frappe.msgprint({ + title: __("Upload Failed"), + message: __(file.error_message), + indicator: "red", + }); + } } else { + reject(); file.failed = true; let detail = xhr.statusText || diff --git a/frappe/public/js/frappe/file_uploader/WebLink.vue b/frappe/public/js/frappe/file_uploader/WebLink.vue index 7e731f0dc8..ef601a7796 100644 --- a/frappe/public/js/frappe/file_uploader/WebLink.vue +++ b/frappe/public/js/frappe/file_uploader/WebLink.vue @@ -1,28 +1,42 @@