diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index eb775e01cd..d050ecb6bc 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -96,4 +96,4 @@ jobs: pip install pip-audit cd ${GITHUB_WORKSPACE} sed -i '/dropbox/d' pyproject.toml # Remove dropbox temporarily https://github.com/dropbox/dropbox-sdk-python/pull/456 - pip-audit . + pip-audit --desc on . diff --git a/.mergify.yml b/.mergify.yml index b74648a8f5..0881dd591b 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -71,23 +71,3 @@ pull_request_rules: assignees: - "{{ author }}" - - - name: backport to version-13-pre-release - conditions: - - label="backport version-13-pre-release" - actions: - backport: - branches: - - version-13-pre-release - assignees: - - "{{ author }}" - - - name: backport to version-12-hotfix - conditions: - - label="backport version-12-hotfix" - actions: - backport: - branches: - - version-12-hotfix - assignees: - - "{{ author }}" diff --git a/frappe/app.py b/frappe/app.py index 2fe9991c4c..6b16464d2c 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -41,9 +41,6 @@ def application(request: Request): init_request(request) - frappe.recorder.record() - frappe.monitor.start() - frappe.rate_limiter.apply() frappe.api.validate_auth() if request.method == "OPTIONS": @@ -74,15 +71,14 @@ def application(request: Request): response = handle_exception(e) else: - rollback = after_request(rollback) + rollback = sync_database(rollback) finally: if request.method in UNSAFE_HTTP_METHODS and frappe.db and rollback: frappe.db.rollback() - frappe.rate_limiter.update() - frappe.monitor.stop(response) - frappe.recorder.dump() + for after_request_task in frappe.get_hooks("after_request"): + frappe.call(after_request_task, response=response, request=request) log_request(request, response) process_response(response) @@ -119,6 +115,9 @@ def init_request(request): if request.method != "OPTIONS": frappe.local.http_request = HTTPRequest() + for before_request_task in frappe.get_hooks("before_request"): + frappe.call(before_request_task) + def setup_read_only_mode(): """During maintenance_mode reads to DB can still be performed to reduce downtime. This @@ -318,7 +317,7 @@ def handle_exception(e): return response -def after_request(rollback): +def sync_database(rollback: bool) -> bool: # if HTTP method would change server state, commit if necessary if ( frappe.db @@ -332,9 +331,8 @@ def after_request(rollback): rollback = False # update session - if getattr(frappe.local, "session_obj", None): - updated_in_db = frappe.local.session_obj.update() - if updated_in_db: + if session := getattr(frappe.local, "session_obj", None): + if session.update(): frappe.db.commit() rollback = False @@ -376,6 +374,7 @@ def serve( "0.0.0.0", int(port), application, + exclude_patterns=["test_*"], use_reloader=False if in_test_env else not no_reload, use_debugger=not in_test_env, use_evalex=not in_test_env, diff --git a/frappe/auth.py b/frappe/auth.py index 3321784ce2..f1cdac52bd 100644 --- a/frappe/auth.py +++ b/frappe/auth.py @@ -307,7 +307,7 @@ class LoginManager: current_hour = int(now_datetime().strftime("%H")) - if login_before and current_hour > login_before: + if login_before and current_hour >= login_before: frappe.throw(_("Login not allowed at this time"), frappe.AuthenticationError) if login_after and current_hour < login_after: diff --git a/frappe/boot.py b/frappe/boot.py index 31e101aedc..7c43c68488 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -101,7 +101,7 @@ def get_bootinfo(): bootinfo.app_logo_url = get_app_logo() bootinfo.link_title_doctypes = get_link_title_doctypes() bootinfo.translated_doctypes = get_translated_doctypes() - bootinfo.subscription_expiry = add_subscription_expiry() + bootinfo.subscription_conf = add_subscription_conf() return bootinfo @@ -234,7 +234,7 @@ def get_user_pages_or_reports(parent, cache=False): has_role[p.name] = {"modified": p.modified, "title": p.title} elif parent == "Report": - reports = frappe.get_all( + reports = frappe.get_list( "Report", fields=["name", "report_type"], filters={"name": ("in", has_role.keys())}, @@ -243,6 +243,10 @@ def get_user_pages_or_reports(parent, cache=False): for report in reports: has_role[report.name]["report_type"] = report.report_type + non_permitted_reports = set(has_role.keys()) - {r.name for r in reports} + for r in non_permitted_reports: + has_role.pop(r, None) + # Expire every six hours _cache.set_value("has_role:" + parent, has_role, frappe.session.user, 21600) return has_role @@ -431,8 +435,8 @@ def load_currency_docs(bootinfo): bootinfo.docs += currency_docs -def add_subscription_expiry(): +def add_subscription_conf(): try: - return frappe.conf.subscription["expiry"] + return frappe.conf.subscription except Exception: return "" diff --git a/frappe/commands/scheduler.py b/frappe/commands/scheduler.py index a6610c9213..36fa81f8a5 100755 --- a/frappe/commands/scheduler.py +++ b/frappe/commands/scheduler.py @@ -5,7 +5,6 @@ import click import frappe from frappe.commands import get_site, pass_context from frappe.exceptions import SiteNotSpecifiedError -from frappe.utils import cint @click.command("trigger-scheduler-event", help="Trigger a scheduler event") @@ -74,36 +73,40 @@ def disable_scheduler(context): @click.command("scheduler") @click.option("--site", help="site name") -@click.argument("state", type=click.Choice(["pause", "resume", "disable", "enable"])) +@click.argument("state", type=click.Choice(["pause", "resume", "disable", "enable", "status"])) +@click.option( + "--format", "-f", default="text", type=click.Choice(["json", "text"]), help="Output format" +) +@click.option("--verbose", "-v", is_flag=True, help="Verbose output") @pass_context -def scheduler(context, state, site=None): +def scheduler(context, state: str, format: str, verbose: bool = False, site: str | None = None): """Control scheduler state.""" - import frappe.utils.scheduler - from frappe.installer import update_site_config + import frappe + from frappe.utils.scheduler import is_scheduler_inactive, toggle_scheduler - if not site: - site = get_site(context) + site = site or get_site(context) - try: - frappe.init(site=site) + output = { + "text": "Scheduler is {status} for site {site}", + "json": '{{"status": "{status}", "site": "{site}"}}', + } - if state == "pause": - update_site_config("pause_scheduler", 1) - elif state == "resume": - update_site_config("pause_scheduler", 0) - elif state == "disable": - frappe.connect() - frappe.utils.scheduler.disable_scheduler() - frappe.db.commit() - elif state == "enable": - frappe.connect() - frappe.utils.scheduler.enable_scheduler() - frappe.db.commit() + with frappe.init_site(site=site): + match state: + case "status": + frappe.connect() + status = "disabled" if is_scheduler_inactive(verbose=verbose) else "enabled" + return print(output[format].format(status=status, site=site)) + case "pause" | "resume": + from frappe.installer import update_site_config - print(f"Scheduler {state}d for site {site}") + update_site_config("pause_scheduler", state == "pause") + case "enable" | "disable": + frappe.connect() + toggle_scheduler(state == "enable") + frappe.db.commit() - finally: - frappe.destroy() + print(output[format].format(status=f"{state}d", site=site)) @click.command("set-maintenance-mode") diff --git a/frappe/commands/site.py b/frappe/commands/site.py index c78bd4a7c5..25c8c3159d 100644 --- a/frappe/commands/site.py +++ b/frappe/commands/site.py @@ -44,7 +44,7 @@ from frappe.exceptions import SiteNotSpecifiedError @click.option( "--force", help="Force restore if site/database already exists", is_flag=True, default=False ) -@click.option("--source_sql", help="Initiate database with a SQL file") +@click.option("--source-sql", "--source_sql", help="Initiate database with a SQL file") @click.option("--install-app", multiple=True, help="Install app after installation") @click.option( "--set-default", is_flag=True, default=False, help="Set the new site as default site" @@ -67,10 +67,13 @@ def new_site( set_default=False, ): "Create a new site" - from frappe.installer import _new_site + from frappe.installer import _new_site, extract_sql_from_archive frappe.init(site=site, new_site=True) + if source_sql: + source_sql = extract_sql_from_archive(source_sql) + _new_site( db_name, site, diff --git a/frappe/commands/utils.py b/frappe/commands/utils.py index 5ec0b54828..f41cca3c57 100644 --- a/frappe/commands/utils.py +++ b/frappe/commands/utils.py @@ -908,7 +908,7 @@ def run_ui_tests( os.chdir(app_base_path) - node_bin = subprocess.getoutput("npm bin") + node_bin = subprocess.getoutput("yarn bin") cypress_path = f"{node_bin}/cypress" drag_drop_plugin_path = f"{node_bin}/../@4tw/cypress-drag-drop" real_events_plugin_path = f"{node_bin}/../cypress-real-events" diff --git a/frappe/core/doctype/data_import/data_import.json b/frappe/core/doctype/data_import/data_import.json index 9e948dac8c..faa9a33bf1 100644 --- a/frappe/core/doctype/data_import/data_import.json +++ b/frappe/core/doctype/data_import/data_import.json @@ -94,6 +94,7 @@ "fieldtype": "Select", "hidden": 1, "label": "Status", + "no_copy": 1, "options": "Pending\nSuccess\nPartial Success\nError", "read_only": 1 }, @@ -170,7 +171,7 @@ ], "hide_toolbar": 1, "links": [], - "modified": "2022-02-01 20:08:37.624914", + "modified": "2022-02-14 10:08:37.624914", "modified_by": "Administrator", "module": "Core", "name": "Data Import", @@ -194,4 +195,4 @@ "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/frappe/core/doctype/doctype/doctype.js b/frappe/core/doctype/doctype/doctype.js index e851a50674..d9c31d312e 100644 --- a/frappe/core/doctype/doctype/doctype.js +++ b/frappe/core/doctype/doctype/doctype.js @@ -104,88 +104,7 @@ frappe.ui.form.on("DocType", { frappe.ui.form.on("DocField", { form_render(frm, doctype, docname) { - // Render two select fields for Fetch From instead of Small Text for better UX - let field = frm.cur_grid.grid_form.fields_dict.fetch_from; - $(field.input_area).hide(); - - let $doctype_select = $(``); - let $wrapper = $('
'); - $wrapper.append($doctype_select, $field_select); - field.$input_wrapper.append($wrapper); - $doctype_select.wrap('
'); - $field_select.wrap('
'); - - let row = frappe.get_doc(doctype, docname); - let curr_value = { doctype: null, fieldname: null }; - if (row.fetch_from) { - let [doctype, fieldname] = row.fetch_from.split("."); - curr_value.doctype = doctype; - curr_value.fieldname = fieldname; - } - - let doctypes = frm.doc.fields - .filter((df) => df.fieldtype == "Link") - .filter((df) => df.options && df.fieldname != row.fieldname) - .sort((a, b) => a.options.localeCompare(b.options)) - .map((df) => ({ - label: `${df.options} (${df.fieldname})`, - value: df.fieldname, - })); - $doctype_select.add_options([ - { label: __("Select DocType"), value: "", selected: true }, - ...doctypes, - ]); - - $doctype_select.on("change", () => { - row.fetch_from = ""; - frm.dirty(); - update_fieldname_options(); - }); - - function update_fieldname_options() { - $field_select.find("option").remove(); - - let link_fieldname = $doctype_select.val(); - if (!link_fieldname) return; - let link_field = frm.doc.fields.find((df) => df.fieldname === link_fieldname); - let link_doctype = link_field.options; - frappe.model.with_doctype(link_doctype, () => { - let fields = frappe.meta - .get_docfields(link_doctype, null, { - fieldtype: ["not in", frappe.model.no_value_type], - }) - .sort((a, b) => a.label.localeCompare(b.label)) - .map((df) => ({ - label: `${df.label} (${df.fieldtype})`, - value: df.fieldname, - })); - $field_select.add_options([ - { - label: __("Select Field"), - value: "", - selected: true, - disabled: true, - }, - ...fields, - ]); - - if (curr_value.fieldname) { - $field_select.val(curr_value.fieldname); - } - }); - } - - $field_select.on("change", () => { - let fetch_from = `${$doctype_select.val()}.${$field_select.val()}`; - row.fetch_from = fetch_from; - frm.dirty(); - }); - - if (curr_value.doctype) { - $doctype_select.val(curr_value.doctype); - update_fieldname_options(); - } + frm.trigger("setup_fetch_from_fields", doctype, docname); }, fieldtype: function (frm) { diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index a7e5cf7669..e04e43051f 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -122,11 +122,20 @@ class User(Document): now = frappe.flags.in_test or frappe.flags.in_install self.send_password_notification(self.__new_password) frappe.enqueue( - "frappe.core.doctype.user.user.create_contact", user=self, ignore_mandatory=True, now=now + "frappe.core.doctype.user.user.create_contact", + user=self, + ignore_mandatory=True, + now=now, + enqueue_after_commit=True, ) if self.name not in STANDARD_USERS and not self.user_image: - frappe.enqueue("frappe.core.doctype.user.user.update_gravatar", name=self.name, now=now) + frappe.enqueue( + "frappe.core.doctype.user.user.update_gravatar", + name=self.name, + now=now, + enqueue_after_commit=True, + ) # Set user selected timezone if self.time_zone: diff --git a/frappe/custom/doctype/customize_form/customize_form.js b/frappe/custom/doctype/customize_form/customize_form.js index fed8505147..618186c0de 100644 --- a/frappe/custom/doctype/customize_form/customize_form.js +++ b/frappe/custom/doctype/customize_form/customize_form.js @@ -263,6 +263,10 @@ frappe.ui.form.on("Customize Form Field", { f.is_custom_field = true; frm.trigger("setup_default_views"); }, + + form_render(frm, doctype, docname) { + frm.trigger("setup_fetch_from_fields", doctype, docname); + }, }); // can't delete standard links diff --git a/frappe/custom/doctype/doctype_layout/doctype_layout.json b/frappe/custom/doctype/doctype_layout/doctype_layout.json index 0b627f78ce..ffb5cdae31 100644 --- a/frappe/custom/doctype/doctype_layout/doctype_layout.json +++ b/frappe/custom/doctype/doctype_layout/doctype_layout.json @@ -43,7 +43,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2022-09-01 03:22:33.973058", + "modified": "2023-02-14 17:53:24.486171", "modified_by": "Administrator", "module": "Custom", "name": "DocType Layout", @@ -64,7 +64,7 @@ }, { "read": 1, - "role": "Guest" + "role": "All" } ], "route": "doctype-layout", diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index 53a5a50cec..5013c4fb3d 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -363,7 +363,7 @@ def get_events(start, end, user=None, for_reminder=False, filters=None) -> list[ # last day of month issue, start from prev month! try: getdate(date) - except ValueError: + except Exception: date = date.split("-") date = date[0] + "-" + str(cint(date[1]) - 1) + "-" + date[2] diff --git a/frappe/desk/form/meta.py b/frappe/desk/form/meta.py index 94f3842ab7..62a9c89c81 100644 --- a/frappe/desk/form/meta.py +++ b/frappe/desk/form/meta.py @@ -207,7 +207,7 @@ class FormMeta(Meta): if df.get("is_custom_field"): custom_field_link = get_link_to_form("Custom Field", df.name) - msg += " " + _("Please delete the field from {2} or add the required doctype.").format( + msg += " " + _("Please delete the field from {0} or add the required doctype.").format( custom_field_link ) diff --git a/frappe/email/doctype/notification/notification.js b/frappe/email/doctype/notification/notification.js index a149aacd57..eb3e2e8634 100644 --- a/frappe/email/doctype/notification/notification.js +++ b/frappe/email/doctype/notification/notification.js @@ -1,16 +1,6 @@ // Copyright (c) 2018, Frappe Technologies and contributors // For license information, please see license.txt -this.frm.add_fetch("sender", "email_id", "sender_email"); - -this.frm.fields_dict.sender.get_query = function () { - return { - filters: { - enable_outgoing: 1, - }, - }; -}; - frappe.notification = { setup_fieldname_select: function (frm) { // get the doctype to update fields @@ -156,6 +146,15 @@ frappe.ui.form.on("Notification", { refresh: function (frm) { frappe.notification.setup_fieldname_select(frm); frappe.notification.setup_example_message(frm); + + frm.add_fetch("sender", "email_id", "sender_email"); + frm.set_query("sender", () => { + return { + filters: { + enable_outgoing: 1, + }, + }; + }); frm.get_field("is_standard").toggle(frappe.boot.developer_mode); frm.trigger("event"); }, diff --git a/frappe/hooks.py b/frappe/hooks.py index a5fac508e0..36ba699531 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -218,7 +218,6 @@ scheduler_events = { "frappe.automation.doctype.auto_repeat.auto_repeat.set_auto_repeat_as_completed", "frappe.email.doctype.unhandled_email.unhandled_email.remove_old_unhandled_emails", "frappe.core.doctype.log_settings.log_settings.run_log_clean_up", - "frappe.utils.subscription.enable_manage_subscription", ], "daily_long": [ "frappe.integrations.doctype.dropbox_settings.dropbox_settings.take_backups_daily", @@ -392,3 +391,20 @@ ignore_links_on_delete = [ "Integration Request", "Unhandled Email", ] + +# Request Hooks +before_request = [ + "frappe.recorder.record", + "frappe.monitor.start", + "frappe.rate_limiter.apply", +] +after_request = ["frappe.rate_limiter.update", "frappe.monitor.stop", "frappe.recorder.dump"] + +# Background Job Hooks +before_job = [ + "frappe.monitor.start", +] +after_job = [ + "frappe.monitor.stop", + "frappe.utils.file_lock.release_document_locks", +] diff --git a/frappe/model/__init__.py b/frappe/model/__init__.py index 9ac9f4396e..f6c6ee0a21 100644 --- a/frappe/model/__init__.py +++ b/frappe/model/__init__.py @@ -95,6 +95,7 @@ optional_fields = ("_user_tags", "_comments", "_assign", "_liked_by", "_seen") table_fields = ("Table", "Table MultiSelect") core_doctypes_list = ( + "DefaultValue", "DocType", "DocField", "DocPerm", @@ -199,14 +200,13 @@ def get_permitted_fields( if doctype in core_doctypes_list: return valid_columns - meta_fields = meta.default_fields.copy() - optional_meta_fields = [x for x in optional_fields if x in valid_columns] + if permitted_fields := meta.get_permitted_fieldnames(parenttype=parenttype, user=user): + meta_fields = meta.default_fields.copy() + optional_meta_fields = [x for x in optional_fields if x in valid_columns] - if meta.istable: - meta_fields.extend(child_table_fields) + if meta.istable: + meta_fields.extend(child_table_fields) - return ( - meta_fields - + meta.get_permitted_fieldnames(parenttype=parenttype, user=user) - + optional_meta_fields - ) + return meta_fields + permitted_fields + optional_meta_fields + + return [] diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index e3694d1baf..93fddcf686 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -762,7 +762,7 @@ class BaseDocument: values.name = doctype if frappe.get_meta(doctype).get("is_virtual"): - values = frappe.get_doc(doctype, docname) + values = frappe.get_doc(doctype, docname).as_dict() if values: setattr(self, df.fieldname, values.name) diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index 81ac1847d9..893d349d70 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -164,6 +164,7 @@ class DatabaseQuery: self.run = run self.strict = strict self.ignore_ddl = ignore_ddl + self.parent_doctype = parent_doctype # for contextual user permission check # to determine which user permission is applicable on link field of specific doctype @@ -588,19 +589,34 @@ class DatabaseQuery: self.fields.pop(idx) def apply_fieldlevel_read_permissions(self): - """Apply fieldlevel read permissions to the query""" + """Apply fieldlevel read permissions to the query + + Note: Does not apply to `frappe.model.core_doctype_list` + + Remove fields that user is not allowed to read. If `fields=["*"]` is passed, only permitted fields will + be returned. + + Example: + - User has read permission only on `title` for DocType `Note` + - Query: fields=["*"] + - Result: fields=["title", ...] // will also include Frappe's meta field like `name`, `owner`, etc. + """ if self.flags.ignore_permissions: return asterisk_fields = [] - permitted_fields = get_permitted_fields(doctype=self.doctype) + permitted_fields = get_permitted_fields(doctype=self.doctype, parenttype=self.parent_doctype) for i, field in enumerate(self.fields): if "distinct" in field.lower(): # field: 'count(distinct `tabPhoto`.name) as total_count' # column: 'tabPhoto.name' - self.distinct = True - column = field.split(" ", 2)[1].replace("`", "").replace(")", "") + if _fn := FN_PARAMS_PATTERN.findall(field): + column = _fn[0].replace("distinct ", "").replace("DISTINCT ", "").replace("`", "") + # field: 'distinct name' + # column: 'name' + else: + column = field.split(" ", 2)[1].replace("`", "") else: # field: 'count(`tabPhoto`.name) as total_count' # column: 'tabPhoto.name' @@ -628,7 +644,7 @@ class DatabaseQuery: permitted_child_table_fields = get_permitted_fields( doctype=ch_doctype, parenttype=self.doctype ) - if column in permitted_child_table_fields: + if column in permitted_child_table_fields or column in optional_fields: continue else: self.remove_field(i) diff --git a/frappe/model/meta.py b/frappe/model/meta.py index 0f785be0bf..d8d26c9a71 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -533,16 +533,25 @@ class Meta(Document): return self.high_permlevel_fields def get_permitted_fieldnames(self, parenttype=None, *, user=None): - """Build list of `fieldname` with read perm level and all the higher perm levels defined.""" - if not hasattr(self, "permitted_fieldnames"): - self.permitted_fieldnames = [] - permlevel_access = set(self.get_permlevel_access("read", parenttype, user=user)) + """Build list of `fieldname` with read perm level and all the higher perm levels defined. - for df in self.get_fieldnames_with_value(with_field_meta=True, with_virtual_fields=True): - if df.permlevel in permlevel_access: - self.permitted_fieldnames.append(df.fieldname) + Note: If permissions are not defined for DocType, return all the fields with value. + """ + permitted_fieldnames = [] - return self.permitted_fieldnames + if self.istable and not parenttype: + return permitted_fieldnames + + if not self.get_permissions(parenttype=parenttype): + return self.get_fieldnames_with_value() + + permlevel_access = set(self.get_permlevel_access("read", parenttype, user=user)) + + for df in self.get_fieldnames_with_value(with_field_meta=True, with_virtual_fields=True): + if df.permlevel in permlevel_access: + permitted_fieldnames.append(df.fieldname) + + return permitted_fieldnames def get_permlevel_access(self, permission_type="read", parenttype=None, *, user=None): has_access_to = [] @@ -772,7 +781,7 @@ def trim_tables(doctype=None, dry_run=False, quiet=False): delete the db field. """ UPDATED_TABLES = {} - filters = {"issingle": 0} + filters = {"issingle": 0, "is_virtual": 0} if doctype: filters["name"] = doctype diff --git a/frappe/patches.txt b/frappe/patches.txt index ec55c7fedd..b2e2f1392d 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -215,7 +215,6 @@ frappe.patches.v14_0.update_multistep_webforms execute:frappe.delete_doc('Page', 'background_jobs', ignore_missing=True, force=True) frappe.patches.v14_0.drop_unused_indexes frappe.patches.v15_0.drop_modified_index -frappe.patches.v14_0.add_manage_subscriptions_in_navbar_settings frappe.patches.v14_0.update_attachment_comment frappe.patches.v15_0.set_contact_full_name execute:frappe.delete_doc("Page", "activity", force=1) diff --git a/frappe/patches/v13_0/generate_theme_files_in_public_folder.py b/frappe/patches/v13_0/generate_theme_files_in_public_folder.py index f05cf46c74..62c7bcdfde 100644 --- a/frappe/patches/v13_0/generate_theme_files_in_public_folder.py +++ b/frappe/patches/v13_0/generate_theme_files_in_public_folder.py @@ -12,7 +12,6 @@ def execute(): for theme in themes: doc = frappe.get_doc("Website Theme", theme.name) try: - doc.generate_bootstrap_theme() doc.save() except Exception: print("Ignoring....") diff --git a/frappe/patches/v13_0/website_theme_custom_scss.py b/frappe/patches/v13_0/website_theme_custom_scss.py index d1a5e11228..d72b763bd9 100644 --- a/frappe/patches/v13_0/website_theme_custom_scss.py +++ b/frappe/patches/v13_0/website_theme_custom_scss.py @@ -8,21 +8,31 @@ def execute(): for theme in frappe.get_all("Website Theme"): doc = frappe.get_doc("Website Theme", theme.name) + setup_color_record(doc) if not doc.get("custom_scss") and doc.theme_scss: # move old theme to new theme doc.custom_scss = doc.theme_scss - - if doc.background_color: - setup_color_record(doc.background_color) - doc.save() -def setup_color_record(color): - frappe.get_doc( - { - "doctype": "Color", - "__newname": color, - "color": color, - } - ).save() +def setup_color_record(doc): + color_fields = [ + "primary_color", + "text_color", + "light_color", + "dark_color", + "background_color", + ] + + for color_field in color_fields: + color_code = doc.get(color_field) + if not color_code or frappe.db.exists("Color", color_code): + continue + + frappe.get_doc( + { + "doctype": "Color", + "__newname": color_code, + "color": color_code, + } + ).insert() diff --git a/frappe/patches/v14_0/add_manage_subscriptions_in_navbar_settings.py b/frappe/patches/v14_0/add_manage_subscriptions_in_navbar_settings.py deleted file mode 100644 index 0c54eddc93..0000000000 --- a/frappe/patches/v14_0/add_manage_subscriptions_in_navbar_settings.py +++ /dev/null @@ -1,25 +0,0 @@ -import frappe - - -def execute(): - navbar_settings = frappe.get_single("Navbar Settings") - - if frappe.db.exists("Navbar Item", {"item_label": "Manage Subscriptions"}): - return - - for idx, row in enumerate(navbar_settings.settings_dropdown[2:], start=4): - row.idx = idx - - navbar_settings.append( - "settings_dropdown", - { - "item_label": "Manage Subscriptions", - "item_type": "Action", - "action": "frappe.ui.toolbar.redirectToUrl()", - "is_standard": 1, - "hidden": 1, - "idx": 3, - }, - ) - - navbar_settings.save() diff --git a/frappe/printing/doctype/print_format/print_format.js b/frappe/printing/doctype/print_format/print_format.js index dfe5633f65..64cd36a727 100644 --- a/frappe/printing/doctype/print_format/print_format.js +++ b/frappe/printing/doctype/print_format/print_format.js @@ -41,7 +41,7 @@ frappe.ui.form.on("Print Format", { } if (frappe.model.can_write("Customize Form")) { frappe.model.with_doctype(frm.doc.doc_type, function () { - let current_format = frappe.get_meta(frm.doc.DocType).default_print_format; + let current_format = frappe.get_meta(frm.doc.doc_type).default_print_format; if (current_format == frm.doc.name) { return; } diff --git a/frappe/printing/page/print_format_builder/print_format_builder_column_selector.html b/frappe/printing/page/print_format_builder/print_format_builder_column_selector.html index 495b837f48..adc87fff22 100644 --- a/frappe/printing/page/print_format_builder/print_format_builder_column_selector.html +++ b/frappe/printing/page/print_format_builder/print_format_builder_column_selector.html @@ -17,10 +17,10 @@
diff --git a/frappe/public/js/desk.bundle.js b/frappe/public/js/desk.bundle.js index 3383c6aaeb..6697c034bc 100644 --- a/frappe/public/js/desk.bundle.js +++ b/frappe/public/js/desk.bundle.js @@ -83,7 +83,6 @@ import "./frappe/ui/toolbar/search_utils.js"; import "./frappe/ui/toolbar/about.js"; import "./frappe/ui/toolbar/navbar.html"; import "./frappe/ui/toolbar/toolbar.js"; -import "./frappe/ui/toolbar/subscription.js"; // import "./frappe/ui/toolbar/notifications.js"; import "./frappe/views/communication.js"; import "./frappe/views/translation_manager.js"; diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index 43263d5632..4a81e8620b 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -430,62 +430,12 @@ frappe.Application = class Application { }); } handle_session_expired() { - if (!frappe.app.session_expired_dialog) { - var dialog = new frappe.ui.Dialog({ - title: __("Session Expired"), - keep_open: true, - fields: [ - { - fieldtype: "Password", - fieldname: "password", - label: __("Please Enter Your Password to Continue"), - }, - ], - onhide: () => { - if (!dialog.logged_in) { - frappe.app.redirect_to_login(); - } - }, - }); - dialog.get_field("password").disable_password_checks(); - dialog.set_primary_action(__("Login"), () => { - dialog.set_message(__("Authenticating...")); - frappe.call({ - method: "login", - args: { - usr: frappe.session.user, - pwd: dialog.get_values().password, - }, - callback: (r) => { - if (r.message === "Logged In") { - dialog.logged_in = true; - - // revert backdrop - $(".modal-backdrop").css({ - opacity: "", - "background-color": "#334143", - }); - } - dialog.hide(); - }, - statusCode: () => { - dialog.hide(); - }, - }); - }); - frappe.app.session_expired_dialog = dialog; - } - if (!frappe.app.session_expired_dialog.display) { - frappe.app.session_expired_dialog.show(); - // add backdrop - $(".modal-backdrop").css({ - opacity: 1, - "background-color": "#4B4C9D", - }); - } + frappe.app.redirect_to_login(); } redirect_to_login() { - window.location.href = "/"; + window.location.href = `/login?redirect-to=${encodeURIComponent( + window.location.pathname + window.location.search + )}`; } set_favicon() { var link = $('link[type="image/x-icon"]').remove().attr("href"); diff --git a/frappe/public/js/frappe/doctype/index.js b/frappe/public/js/frappe/doctype/index.js index 1562d430fd..0dc5fd0a34 100644 --- a/frappe/public/js/frappe/doctype/index.js +++ b/frappe/public/js/frappe/doctype/index.js @@ -114,4 +114,90 @@ frappe.model.DocTypeController = class DocTypeController extends frappe.ui.form. this.frm.set_df_property("fields", "reqd", this.frm.doc.autoname !== "Prompt"); } + + setup_fetch_from_fields(doc, doctype, docname) { + let frm = this.frm; + // Render two select fields for Fetch From instead of Small Text for better UX + let field = frm.cur_grid.grid_form.fields_dict.fetch_from; + $(field.input_area).hide(); + + let $doctype_select = $(``); + let $wrapper = $('
'); + $wrapper.append($doctype_select, $field_select); + field.$input_wrapper.append($wrapper); + $doctype_select.wrap('
'); + $field_select.wrap('
'); + + let row = frappe.get_doc(doctype, docname); + let curr_value = { doctype: null, fieldname: null }; + if (row.fetch_from) { + let [doctype, fieldname] = row.fetch_from.split("."); + curr_value.doctype = doctype; + curr_value.fieldname = fieldname; + } + + let doctypes = frm.doc.fields + .filter((df) => df.fieldtype == "Link") + .filter((df) => df.options && df.fieldname != row.fieldname) + .sort((a, b) => a.options.localeCompare(b.options)) + .map((df) => ({ + label: `${df.options} (${df.fieldname})`, + value: df.fieldname, + })); + $doctype_select.add_options([ + { label: __("Select DocType"), value: "", selected: true }, + ...doctypes, + ]); + + $doctype_select.on("change", () => { + row.fetch_from = ""; + frm.dirty(); + update_fieldname_options(); + }); + + function update_fieldname_options() { + $field_select.find("option").remove(); + + let link_fieldname = $doctype_select.val(); + if (!link_fieldname) return; + let link_field = frm.doc.fields.find((df) => df.fieldname === link_fieldname); + let link_doctype = link_field.options; + frappe.model.with_doctype(link_doctype, () => { + let fields = frappe.meta + .get_docfields(link_doctype, null, { + fieldtype: ["not in", frappe.model.no_value_type], + }) + .sort((a, b) => a.label.localeCompare(b.label)) + .map((df) => ({ + label: `${df.label} (${df.fieldtype})`, + value: df.fieldname, + })); + $field_select.add_options([ + { + label: __("Select Field"), + value: "", + selected: true, + disabled: true, + }, + ...fields, + ]); + + if (curr_value.fieldname) { + $field_select.val(curr_value.fieldname); + } + }); + } + + $field_select.on("change", () => { + let fetch_from = `${$doctype_select.val()}.${$field_select.val()}`; + row.fetch_from = fetch_from; + frm.dirty(); + }); + + if (curr_value.doctype) { + $doctype_select.val(curr_value.doctype); + update_fieldname_options(); + } + } }; diff --git a/frappe/public/js/frappe/form/controls/base_input.js b/frappe/public/js/frappe/form/controls/base_input.js index 50030fdc04..7831a9e9b6 100644 --- a/frappe/public/js/frappe/form/controls/base_input.js +++ b/frappe/public/js/frappe/form/controls/base_input.js @@ -17,7 +17,7 @@ frappe.ui.form.ControlInput = class ControlInput extends frappe.ui.form.Control
- +
diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index b767dac932..8771229884 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -63,7 +63,7 @@ export default class Grid { let template = `
- +

diff --git a/frappe/public/js/frappe/form/script_manager.js b/frappe/public/js/frappe/form/script_manager.js index a5511285a8..e634ef81e5 100644 --- a/frappe/public/js/frappe/form/script_manager.js +++ b/frappe/public/js/frappe/form/script_manager.js @@ -176,12 +176,12 @@ frappe.ui.form.ScriptManager = class ScriptManager { } if (client_script) { - eval(client_script); + new Function(client_script)(); } if (!this.frm.doctype_layout && doctype.__custom_js) { try { - eval(doctype.__custom_js); + new Function(doctype.__custom_js)(); } catch (e) { frappe.msgprint({ title: __("Error in Client Script"), diff --git a/frappe/public/js/frappe/form/sidebar/user_image.js b/frappe/public/js/frappe/form/sidebar/user_image.js index 9fbcc480fb..ae6167e184 100644 --- a/frappe/public/js/frappe/form/sidebar/user_image.js +++ b/frappe/public/js/frappe/form/sidebar/user_image.js @@ -73,6 +73,8 @@ frappe.ui.form.setup_user_image_event = function (frm) { field.make_input(); } field.$input.trigger("attach_doc_image"); + // close sidebar + frm.page.close_sidebar(); } else { /// on remove event for a sidebar image wrapper remove attach file. frm.attachments.remove_attachment_by_filename( diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index 4e74710edf..f4f46aaccd 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -1832,7 +1832,6 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { this.disable_list_update = true; bulk_operations.edit(this.get_checked_items(true), field_mappings, () => { this.disable_list_update = false; - this.clear_checked_items(); this.refresh(); }); }, diff --git a/frappe/public/js/frappe/model/model.js b/frappe/public/js/frappe/model/model.js index b835989c07..0fa2ef3621 100644 --- a/frappe/public/js/frappe/model/model.js +++ b/frappe/public/js/frappe/model/model.js @@ -274,21 +274,18 @@ $.extend(frappe.model, { init_doctype: function (doctype) { var meta = locals.DocType[doctype]; - if (meta.__list_js) { - eval(meta.__list_js); - } - if (meta.__custom_list_js) { - eval(meta.__custom_list_js); - } - if (meta.__calendar_js) { - eval(meta.__calendar_js); - } - if (meta.__map_js) { - eval(meta.__map_js); - } - if (meta.__tree_js) { - eval(meta.__tree_js); + for (const asset_key of [ + "__list_js", + "__custom_list_js", + "__calendar_js", + "__map_js", + "__tree_js", + ]) { + if (meta[asset_key]) { + new Function(meta[asset_key])(); + } } + if (meta.__templates) { $.extend(frappe.templates, meta.__templates); } diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index b0df2d60fe..18e9c9492c 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -188,14 +188,15 @@ frappe.ui.Page = class Page { } setup_overlay_sidebar() { + this.sidebar.find(".close-sidebar").remove(); let overlay_sidebar = this.sidebar.find(".overlay-sidebar").addClass("opened"); $('
').hide().appendTo(this.sidebar).fadeIn(); let scroll_container = $("html").css("overflow-y", "hidden"); - this.sidebar.find(".close-sidebar").on("click", (e) => close_sidebar(e)); - this.sidebar.on("click", "button:not(.dropdown-toggle)", (e) => close_sidebar(e)); + this.sidebar.find(".close-sidebar").on("click", (e) => this.close_sidebar(e)); + this.sidebar.on("click", "button:not(.dropdown-toggle)", (e) => this.close_sidebar(e)); - let close_sidebar = () => { + this.close_sidebar = () => { scroll_container.css("overflow-y", ""); this.sidebar.find("div.close-sidebar").fadeOut(() => { overlay_sidebar diff --git a/frappe/public/js/frappe/ui/toolbar/subscription.js b/frappe/public/js/frappe/ui/toolbar/subscription.js deleted file mode 100644 index cde855f989..0000000000 --- a/frappe/public/js/frappe/ui/toolbar/subscription.js +++ /dev/null @@ -1,80 +0,0 @@ -$(document).on("startup", async () => { - if (!frappe.boot.setup_complete || !frappe.user.has_role("System Manager")) { - return; - } - - const expiry = frappe.boot.subscription_expiry; - - if (expiry) { - let diff_days = - frappe.datetime.get_day_diff(cstr(expiry), frappe.datetime.get_today()) - 1; - - let subscription_string = __( - `Your subscription will end in ${cstr(diff_days).bold()} ${ - diff_days > 1 ? "days" : "day" - }. After that your site will be suspended.` - ); - - let $bar = $(` -
-
-

${subscription_string}

-
- - -
-
-
- `); - - $("footer").append($bar); - - $bar.find(".dismiss-upgrade").on("click", () => { - $bar.remove(); - }); - - $bar.find(".button-renew").on("click", () => { - redirectToUrl(); - }); - } -}); - -function redirectToUrl() { - frappe.call({ - method: "frappe.utils.subscription.remote_login", - callback: (url) => { - if (url.message !== false) { - window.open(url.message, "_blank"); - } else { - frappe.msgprint({ - title: __("Message"), - indicator: "orange", - message: __("No active subscriptions found."), - }); - } - }, - }); -} - -$.extend(frappe.ui.toolbar, { - redirectToUrl() { - redirectToUrl(); - }, -}); diff --git a/frappe/public/scss/common/controls.scss b/frappe/public/scss/common/controls.scss index 08debbbde9..9fe5f82a35 100644 --- a/frappe/public/scss/common/controls.scss +++ b/frappe/public/scss/common/controls.scss @@ -135,6 +135,9 @@ select.form-control { content: ' *'; color: var(--red-400); } + .help:empty { + display: none; + } .ql-editor:not(.read-mode) { background-color: var(--control-bg); } diff --git a/frappe/public/scss/desk/frappe_datatable.scss b/frappe/public/scss/desk/frappe_datatable.scss index cfec31b72e..1bf3dc5b41 100644 --- a/frappe/public/scss/desk/frappe_datatable.scss +++ b/frappe/public/scss/desk/frappe_datatable.scss @@ -36,6 +36,10 @@ top: 5px; right: 10px; } + + .help { + display: none; + } } .dt-header { @@ -67,6 +71,10 @@ .checkbox { margin: 7px 0 7px 8px; + + .label-area { + display: none; + } } [data-fieldtype="Color"] .control-input { diff --git a/frappe/tests/test_api.py b/frappe/tests/test_api.py index 1085f4c39e..c345d8fbcf 100644 --- a/frappe/tests/test_api.py +++ b/frappe/tests/test_api.py @@ -2,6 +2,7 @@ import sys from contextlib import contextmanager from random import choice from threading import Thread +from time import time from unittest.mock import patch import requests @@ -306,3 +307,36 @@ class TestReadOnlyMode(FrappeAPITestCase): response = self.post(self.REQ_PATH, {"description": frappe.mock("paragraph"), "sid": self.sid}) self.assertEqual(response.status_code, 503) self.assertEqual(response.json["exc_type"], "InReadOnlyMode") + + +class TestWSGIApp(FrappeAPITestCase): + def test_request_hooks(self): + self.addCleanup(lambda: _test_REQ_HOOK.clear()) + get_hooks = frappe.get_hooks + + def patch_request_hooks(event: str, *args, **kwargs): + patched_hooks = { + "before_request": ["frappe.tests.test_api.before_request"], + "after_request": ["frappe.tests.test_api.after_request"], + } + if event not in patched_hooks: + return get_hooks(event, *args, **kwargs) + return patched_hooks[event] + + with patch("frappe.get_hooks", patch_request_hooks): + self.assertIsNone(_test_REQ_HOOK.get("before_request")) + self.assertIsNone(_test_REQ_HOOK.get("after_request")) + res = self.get("/api/method/ping") + self.assertEqual(res.json, {"message": "pong"}) + self.assertLess(_test_REQ_HOOK.get("before_request"), _test_REQ_HOOK.get("after_request")) + + +_test_REQ_HOOK = {} + + +def before_request(*args, **kwargs): + _test_REQ_HOOK["before_request"] = time() + + +def after_request(*args, **kwargs): + _test_REQ_HOOK["after_request"] = time() diff --git a/frappe/tests/test_background_jobs.py b/frappe/tests/test_background_jobs.py index 1b6680eb9b..72660128cf 100644 --- a/frappe/tests/test_background_jobs.py +++ b/frappe/tests/test_background_jobs.py @@ -1,11 +1,19 @@ import time +from contextlib import contextmanager +from unittest.mock import patch from rq import Queue import frappe from frappe.core.doctype.rq_job.rq_job import remove_failed_jobs from frappe.tests.utils import FrappeTestCase -from frappe.utils.background_jobs import generate_qname, get_redis_conn +from frappe.utils.background_jobs import ( + RQ_JOB_FAILURE_TTL, + RQ_RESULTS_TTL, + execute_job, + generate_qname, + get_redis_conn, +) class TestBackgroundJobs(FrappeTestCase): @@ -44,6 +52,79 @@ class TestBackgroundJobs(FrappeTestCase): # lesser is earlier self.assertTrue(high_priority_job.get_position() < low_priority_job.get_position()) + def test_enqueue_call(self): + with patch.object(Queue, "enqueue_call") as mock_enqueue_call: + frappe.enqueue( + "frappe.handler.ping", + queue="short", + timeout=300, + kwargs={"site": frappe.local.site}, + ) + + mock_enqueue_call.assert_called_once_with( + execute_job, + on_success=None, + on_failure=None, + timeout=300, + kwargs={ + "site": frappe.local.site, + "user": "Administrator", + "method": "frappe.handler.ping", + "event": None, + "job_name": "frappe.handler.ping", + "is_async": True, + "kwargs": {"kwargs": {"site": frappe.local.site}}, + }, + at_front=False, + failure_ttl=RQ_JOB_FAILURE_TTL, + result_ttl=RQ_RESULTS_TTL, + ) + + def test_job_hooks(self): + self.addCleanup(lambda: _test_JOB_HOOK.clear()) + with freeze_local() as locals, frappe.init_site(locals.site), patch( + "frappe.get_hooks", patch_job_hooks + ): + frappe.connect() + self.assertIsNone(_test_JOB_HOOK.get("before_job")) + r = execute_job( + site=frappe.local.site, + user="Administrator", + method="frappe.handler.ping", + event=None, + job_name="frappe.handler.ping", + is_async=True, + kwargs={}, + ) + self.assertEqual(r, "pong") + self.assertLess(_test_JOB_HOOK.get("before_job"), _test_JOB_HOOK.get("after_job")) + def fail_function(): return 1 / 0 + + +_test_JOB_HOOK = {} + + +def before_job(*args, **kwargs): + _test_JOB_HOOK["before_job"] = time.time() + + +def after_job(*args, **kwargs): + _test_JOB_HOOK["after_job"] = time.time() + + +@contextmanager +def freeze_local(): + locals = frappe.local + frappe.local = frappe.Local() + yield locals + frappe.local = locals + + +def patch_job_hooks(event: str): + return { + "before_job": ["frappe.tests.test_background_jobs.before_job"], + "after_job": ["frappe.tests.test_background_jobs.after_job"], + }[event] diff --git a/frappe/tests/test_boot.py b/frappe/tests/test_boot.py index 0b688d6aee..232c379e08 100644 --- a/frappe/tests/test_boot.py +++ b/frappe/tests/test_boot.py @@ -1,5 +1,5 @@ import frappe -from frappe.boot import get_unseen_notes +from frappe.boot import get_unseen_notes, get_user_pages_or_reports from frappe.desk.doctype.note.note import mark_as_seen from frappe.tests.utils import FrappeTestCase @@ -26,3 +26,47 @@ class TestBootData(FrappeTestCase): mark_as_seen(note.name) unseen_notes = [d.title for d in get_unseen_notes()] self.assertListEqual(unseen_notes, []) + + def test_get_user_pages_or_reports_with_permission_query(self): + # Create a ToDo custom report with admin user + frappe.set_user("Administrator") + frappe.get_doc( + { + "doctype": "Report", + "ref_doctype": "ToDo", + "report_name": "Test Admin Report", + "report_type": "Report Builder", + "is_standard": "No", + } + ).insert() + + # Add permission query such that each user can only see their own custom reports + frappe.get_doc( + dict( + doctype="Server Script", + name="test_report_permission_query", + script_type="Permission Query", + reference_doctype="Report", + script="""conditions = f"(`tabReport`.is_standard = 'Yes' or `tabReport`.owner = '{frappe.session.user}')" + """, + ) + ).insert() + + # Create a ToDo custom report with test user + frappe.set_user("test@example.com") + frappe.get_doc( + { + "doctype": "Report", + "ref_doctype": "ToDo", + "report_name": "Test User Report", + "report_type": "Report Builder", + "is_standard": "No", + } + ).insert(ignore_permissions=True) + + get_user_pages_or_reports("Report") + allowed_reports = frappe.cache().get_value("has_role:Report", user=frappe.session.user) + + # Test user must not see admin user's report + self.assertNotIn("Test Admin Report", allowed_reports) + self.assertIn("Test User Report", allowed_reports) diff --git a/frappe/tests/test_commands.py b/frappe/tests/test_commands.py index 4a10484d1d..7bda577bb6 100644 --- a/frappe/tests/test_commands.py +++ b/frappe/tests/test_commands.py @@ -33,6 +33,7 @@ from frappe.tests.utils import FrappeTestCase, timeout from frappe.utils import add_to_date, get_bench_path, get_bench_relative_path, now from frappe.utils.backups import BackupGenerator, fetch_latest_backups from frappe.utils.jinja_globals import bundled_asset +from frappe.utils.scheduler import enable_scheduler, is_scheduler_inactive _result: Result | None = None TEST_SITE = "commands-site-O4PN2QKA.test" # added random string tag to avoid collisions @@ -773,3 +774,52 @@ class TestDBCli(BaseTestCommands): def test_db_cli(self): self.execute("bench --site {site} db-console", kwargs={"cmd_input": rb"\q"}) self.assertEqual(self.returncode, 0) + + @run_only_if(db_type_is.MARIADB) + def test_db_cli_with_sql(self): + self.execute("bench --site {site} db-console -e 'select 1'") + self.assertEqual(self.returncode, 0) + self.assertIn("1", self.stdout) + + +class TestSchedulerCLI(BaseTestCommands): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.is_scheduler_active = not is_scheduler_inactive() + + @classmethod + def tearDownClass(cls): + super().tearDownClass() + if cls.is_scheduler_active: + enable_scheduler() + + def test_scheduler_status(self): + self.execute("bench --site {site} scheduler status") + self.assertEqual(self.returncode, 0) + self.assertRegex(self.stdout, r"Scheduler is (disabled|enabled) for site .*") + + self.execute("bench --site {site} scheduler status -f json") + parsed_output = frappe.parse_json(self.stdout) + self.assertEqual(self.returncode, 0) + self.assertIsInstance(parsed_output, dict) + self.assertIn("status", parsed_output) + self.assertIn("site", parsed_output) + + def test_scheduler_enable_disable(self): + self.execute("bench --site {site} scheduler disable") + self.assertEqual(self.returncode, 0) + self.assertRegex(self.stdout, r"Scheduler is disabled for site .*") + + self.execute("bench --site {site} scheduler enable") + self.assertEqual(self.returncode, 0) + self.assertRegex(self.stdout, r"Scheduler is enabled for site .*") + + def test_scheduler_pause_resume(self): + self.execute("bench --site {site} scheduler pause") + self.assertEqual(self.returncode, 0) + self.assertRegex(self.stdout, r"Scheduler is paused for site .*") + + self.execute("bench --site {site} scheduler resume") + self.assertEqual(self.returncode, 0) + self.assertRegex(self.stdout, r"Scheduler is resumed for site .*") diff --git a/frappe/tests/test_db_query.py b/frappe/tests/test_db_query.py index 96b71f5eb7..2a3c1b6685 100644 --- a/frappe/tests/test_db_query.py +++ b/frappe/tests/test_db_query.py @@ -986,6 +986,46 @@ class TestDBQuery(FrappeTestCase): class TestReportView(FrappeTestCase): + def test_get_count(self): + frappe.local.request = frappe._dict() + frappe.local.request.method = "GET" + + # test with data check field + frappe.local.form_dict = frappe._dict( + { + "doctype": "DocType", + "filters": [["DocType", "show_title_field_in_link", "=", 1]], + "fields": [], + "distinct": "false", + } + ) + list_filter_response = execute_cmd("frappe.desk.reportview.get_count") + frappe.local.form_dict = frappe._dict( + {"doctype": "DocType", "filters": {"show_title_field_in_link": 1}, "distinct": "true"} + ) + dict_filter_response = execute_cmd("frappe.desk.reportview.get_count") + self.assertIsInstance(list_filter_response, int) + self.assertEqual(list_filter_response, dict_filter_response) + + # test with child table filter + frappe.local.form_dict = frappe._dict( + { + "doctype": "DocType", + "filters": [["DocField", "fieldtype", "=", "Data"]], + "fields": [], + "distinct": "true", + } + ) + child_filter_response = execute_cmd("frappe.desk.reportview.get_count") + current_value = frappe.db.sql( + # the below query is equivalent to the one in reportview.get_count + "select distinct count(distinct `tabDocType`.name) as total_count" + " from `tabDocType` left join `tabDocField`" + " on (`tabDocField`.parenttype = 'DocType' and `tabDocField`.parent = `tabDocType`.name)" + " where `tabDocField`.`fieldtype` = 'Data'" + )[0][0] + self.assertEqual(child_filter_response, current_value) + def test_reportview_get(self): user = frappe.get_doc("User", "test@example.com") add_child_table_to_blog_post() diff --git a/frappe/tests/test_model_utils.py b/frappe/tests/test_model_utils.py index 0baef8bb85..25523012e9 100644 --- a/frappe/tests/test_model_utils.py +++ b/frappe/tests/test_model_utils.py @@ -1,4 +1,8 @@ +from contextlib import contextmanager +from random import choice + import frappe +from frappe.model import core_doctypes_list, get_permitted_fields from frappe.model.utils import get_fetch_values from frappe.tests.utils import FrappeTestCase @@ -25,3 +29,47 @@ class TestModelUtils(FrappeTestCase): self.assertEqual( get_fetch_values(doctype, "assigned_by", user), {"assigned_by_full_name": full_name} ) + + def test_get_permitted_fields(self): + # Administrator should have access to all fields in ToDo + todo_all_fields = get_permitted_fields("ToDo", user="Administrator") + todo_all_columns = frappe.get_meta("ToDo").get_valid_columns() + self.assertListEqual(todo_all_fields, todo_all_columns) + + # Guest should have access to no fields in ToDo + with set_user("Guest"): + guest_permitted_fields = get_permitted_fields("ToDo") + self.assertEqual(guest_permitted_fields, []) + + # everyone should have access to all fields of core doctypes + with set_user("Guest"): + picked_doctype = choice(core_doctypes_list) + core_permitted_fields = get_permitted_fields(picked_doctype) + picked_doctype_all_columns = frappe.get_meta(picked_doctype).get_valid_columns() + self.assertSequenceEqual(core_permitted_fields, picked_doctype_all_columns) + + # access to child tables' fields is restricted to no fields unless parent is passed & permitted + with set_user("Administrator"): + without_parent_fields = get_permitted_fields("Installed Application") + with_parent_fields = get_permitted_fields( + "Installed Application", parenttype="Installed Applications" + ) + child_all_fields = frappe.get_meta("Installed Application").get_valid_columns() + self.assertEqual(without_parent_fields, []) + self.assertLess(len(without_parent_fields), len(with_parent_fields)) + self.assertSequenceEqual(set(with_parent_fields), set(child_all_fields)) + + # guest has access to no fields + with set_user("Guest"): + self.assertEqual(get_permitted_fields("Installed Application"), []) + self.assertEqual( + get_permitted_fields("Installed Application", parenttype="Installed Applications"), [] + ) + + +@contextmanager +def set_user(user: str): + past_user = frappe.session.user or "Administrator" + frappe.set_user(user) + yield + frappe.set_user(past_user) diff --git a/frappe/tests/test_search.py b/frappe/tests/test_search.py index fdcf005da8..4f8e35301a 100644 --- a/frappe/tests/test_search.py +++ b/frappe/tests/test_search.py @@ -15,10 +15,7 @@ class TestSearch(FrappeTestCase): def setUp(self): if self._testMethodName == "test_link_field_order": setup_test_link_field_order(self) - - def tearDown(self): - if self._testMethodName == "test_link_field_order": - teardown_test_link_field_order(self) + self.addCleanup(teardown_test_link_field_order, self) def test_search_field_sanitizer(self): # pass @@ -146,24 +143,28 @@ def setup_test_link_field_order(TestCase): TestCase.parent_doctype_name = "All Territories" # Create Tree doctype - TestCase.tree_doc = frappe.get_doc( - { - "doctype": "DocType", - "name": TestCase.tree_doctype_name, - "module": "Custom", - "custom": 1, - "is_tree": 1, - "autoname": "field:random", - "fields": [{"fieldname": "random", "label": "Random", "fieldtype": "Data"}], - } - ).insert() - TestCase.tree_doc.search_fields = "parent_test_tree_order" - TestCase.tree_doc.save() + if not frappe.db.exists("DocType", TestCase.tree_doctype_name): + TestCase.tree_doc = frappe.get_doc( + { + "doctype": "DocType", + "name": TestCase.tree_doctype_name, + "module": "Custom", + "custom": 1, + "is_tree": 1, + "autoname": "field:random", + "fields": [{"fieldname": "random", "label": "Random", "fieldtype": "Data"}], + } + ).insert() + TestCase.tree_doc.search_fields = "parent_test_tree_order" + TestCase.tree_doc.save() + else: + TestCase.tree_doc = frappe.get_doc("DocType", TestCase.tree_doctype_name) # Create root for the tree doctype - frappe.get_doc( - {"doctype": TestCase.tree_doctype_name, "random": TestCase.parent_doctype_name, "is_group": 1} - ).insert() + if not frappe.db.exists(TestCase.tree_doctype_name, {"random": TestCase.parent_doctype_name}): + frappe.get_doc( + {"doctype": TestCase.tree_doctype_name, "random": TestCase.parent_doctype_name, "is_group": 1} + ).insert(ignore_if_duplicate=True) # Create children for the root for child_name in TestCase.child_doctypes_names: @@ -173,7 +174,7 @@ def setup_test_link_field_order(TestCase): "random": child_name, "parent_test_tree_order": TestCase.parent_doctype_name, } - ).insert() + ).insert(ignore_if_duplicate=True) TestCase.child_doctype_list.append(temp) diff --git a/frappe/tests/test_utils.py b/frappe/tests/test_utils.py index 59df08dd91..ad3367862e 100644 --- a/frappe/tests/test_utils.py +++ b/frappe/tests/test_utils.py @@ -972,4 +972,5 @@ class TestTBSanitization(FrappeTestCase): traceback = frappe.get_traceback(with_context=True) self.assertNotIn("42", traceback) self.assertIn("********", traceback) + self.assertIn("password =", traceback) self.assertIn("safe_value", traceback) diff --git a/frappe/tests/utils.py b/frappe/tests/utils.py index 5f13c9cd11..fe95960518 100644 --- a/frappe/tests/utils.py +++ b/frappe/tests/utils.py @@ -3,6 +3,7 @@ import datetime import signal import unittest from contextlib import contextmanager +from typing import Sequence import frappe from frappe.model.base_document import BaseDocument @@ -39,6 +40,10 @@ class FrappeTestCase(unittest.TestCase): return super().setUpClass() + def assertSequenceSubset(self, larger: Sequence, smaller: Sequence, msg=None): + """Assert that `expected` is a subset of `actual`.""" + self.assertTrue(set(smaller).issubset(set(larger)), msg=msg) + # --- Frappe Framework specific assertions def assertDocumentEqual(self, expected, actual): """Compare a (partial) expected document with actual Document.""" diff --git a/frappe/translations/tr.csv b/frappe/translations/tr.csv index 93f1174056..d81a953021 100644 --- a/frappe/translations/tr.csv +++ b/frappe/translations/tr.csv @@ -2,11 +2,11 @@ A4,A4, API Endpoint,API Bitiş Noktası, API Key,API Anahtarı, Access Token,Erişim Anahtarı, -Account,hesap, -Accounts Manager,Hesap Yöneticisi, +Account,Muhasebe, +Accounts Manager,Muhasebe Yöneticisi, Accounts User,Muhasebe Kullanıcıları, -Action,Eylem, -Actions,Eylemler, +Action,İşlem, +Actions,İşlemler, Active,Etkin, Add,Ekle, Add Comment,Yorum Ekle, @@ -22,7 +22,7 @@ Amended From,İtibaren değiştirilmiş, Amount,Tutar, Applicable For,İçin uygulanabilir, Approval Status,Onay Durumu, -Assign,Atamak, +Assign,Ata, Assign To,Ata, Attachment,Haciz, Attachments,Eklentiler, @@ -37,61 +37,63 @@ Category,Kategori, Category Name,Kategori Adı, City,İl, City/Town,İl / İlçe, -Client,Müşteri:, -Client ID,Müşteri Kimliği, -Client Secret,Müşteri Gizliliği, +Client,Client:, +Client ID,Client ID, +Client Secret,Client Secret, Closed,Kapalı, -Code,Kod, -Collapse All,Tüm daraltmak, +Code,Kodu, +Collapse All,Tümünü Daralt, Color,Renk, Company Name,Firma Adı, Condition,Koşul, Contact,İrtibat, -Contact Details,İletişim Bilgileri, +Contact Details,İrtibat Bilgileri, Content,İçerik, Content Type,İçerik Türü, Create,Oluştur, -Created By,Tarafından oluşturulan, -Current,şimdiki, +Created By,Oluşturan, +Current,Geçerli, Custom HTML,Özel HTML, Custom?,Özel?, +Customizations Discarded,Özelleştirmeler Silindi, Date Format,Tarih Biçimi, Datetime,Tarihzaman, Day,Gün, -Default Letter Head,Mektubu Başkanı Standart, -Defaults,Standart Değerler, +Dismiss,Reddet, +Default Letter Head,Varsayılan Mektubu Başlığı, +Defaults,Varsayılan Değerler, Delivery Status,Teslim Durumu, Department,Departman, Details,ayrıntılar, Document Name,Belge Adı, Document Status,Belge Durumu, Document Type,Belge Türü, -Domain,Etki Alanı, -Domains,Çalışma Alanları, -Draft,taslak, +Domain,Domain, +Domains,Domains, +Draft,Taslak, Edit,Düzenle, Email Account,E-posta Hesabı, -Email Address,E, +Email Address,E-posta Adresi, Email ID,Email kimliği, -Email Sent,E-posta Gönderilmiş, -Email Template,E-posta şablonu, +Email Sent,E-posta Gönderildi, +Email Template,E-posta Şablonu, Enable,Etkinleştir, Enabled,Etkin, -End Date,Bitiş tarihi, +End Date,Bitiş Tarihi, Error Code: {0},Hata kodu {0}, -Error Log,hata Günlüğü, +Error Log,Hata Günlüğü, Event,Faaliyet, -Expand All,Hepsini genişlet, +Expand All,Tümünü Genişlet, Fail,Başarısız, Failed,Başarısız, Fax,Faks, Feedback,Geri bildirim, Female,Kadın, Field Name,Alan Adı, -Fieldname,fieldname, +Fieldname,Alanadı, Fields,Alanlar, -First Name,Ad, -Frequency,frekans, +First Name,Adı, +Frequency,Frekans, Friday,Cuma, From,Itibaren, Full,Tam, @@ -107,32 +109,33 @@ Hourly,Saatlik, Hub Sync ID,Hub Senkronizasyon Kimliği, IP Address,IP adresi, Image,Resim, -Image View,Resim Görüntüle, +Image View,Resmi Göster, Import Data,Verileri İçe Aktar, Import Log,Günlüğü İçe Aktar, -Inactive,etkisiz, +Inactive,Etkisiz, Insert,Ekle, -Interests,İlgi, +Interests,İlgi alanları, Introduction,Giriş, -Is Active,Aktif, -Is Completed,Tamamlandı, -Is Default,Standart, -Kanban Board,Kanban Kurulu, +Is Active,Aktif mi, +Is Completed,Tamamlandı mı, +Is Default,Standart mı, +Kanban Board,KanBoard, Label,Etiket, Language Name,Dil Adı, Last Name,Soyadı, -Leaderboard,Liderler Sıralaması, +Leaderboard,Liderlik Tablosu, Letter Head,Antetli Kağıt, Level,Seviye, -Limit,sınır, -Log,Giriş, -Logs,Kayıtlar, +Limit,Limit, +Log,Log, +Logs,Loglar, Low,Düşük, -Maintenance Manager,Bakım Müdürü, -Maintenance User,Bakımcı Kullanıcı, +Maintenance,Bakım, +Maintenance Manager,Bakım Yöneticisi, +Maintenance User,Bakım Kullanıcısı, Male,Erkek, Mandatory,Zorunlu, -Mapping,haritalama, +Mapping,Eşleme, Mapping Type,Eşleme Türü, Medium,Orta, Meeting,Toplantı, @@ -147,19 +150,19 @@ More Information,Daha fazla bilgi, More...,Daha..., Move,Hareket, My Account,Hesabım, -New Address,Yeni adres, -New Contact,Yeni bağlantı, +New Address,Yeni Adres, +New Contact,Yeni İlgili Kişi, Next,İleri, -No Data,Hiçbir veri, +No Data,Hiç Veri yok, No address added yet.,Hiçbir adres Henüz eklenmiş., No contacts added yet.,Hiç kişiler Henüz eklenmiş., No items found.,Hiç bir öğe bulunamadı., None,Yok, -Not Permitted,İzin Değil, +Not Permitted,İzin verilmedi, Not active,Aktif Değil, Notes,Notlar, Number,Numara, -Online,İnternet üzerinden, +Online,Online, Operation,Operasyon, Options,Seçenekler, Other,Diğer, @@ -167,7 +170,7 @@ Owner,Sahibi, Page Missing or Moved,Sayfa yok ya da taşınmış, Parameter,Parametre, Password,Parola, -Payment Gateway,Ödeme Gateway, +Payment Gateway,Ödeme Ağ Geçidi, Payment Gateway Name,Ödeme Ağ Geçidi Adı, Payments,Ödemeler, Period,Dönem, @@ -181,16 +184,17 @@ Portal,Portal, Portal Settings,Portal Ayarları, Preview,Önizleme, Primary,Birincil, -Print Format,Yazdırma Formatı, -Print Settings,Yazdırma Ayarları, +Print Format,Baskı Formatı, +Print Settings,Baskı Ayarları, Print taxes with zero amount,Sıfır tutarlı vergileri yazdırın, Private,Özel, Property,Özellik, +Profile,Profil, Public,Genel, Published,Yayınlandı, Purchase Manager,Satınalma Yöneticisi, -Purchase Master Manager,Satınalma Usta Müdürü, -Purchase User,Satınalma Kullanıcı, +Purchase Master Manager,Satınalma Master Yöneticisi, +Purchase User,Satınalma Kullanıcısı, Query Options,Sorgu Seçenekleri, Range,Aralık, Rating,Değerlendirme, @@ -199,29 +203,29 @@ Recipients,Alıcılar, Redirect URL,Yönlendirme URL, Reference,Referans, Reference Date,Referans Tarihi, -Reference Document,referans Belgesi, +Reference Document,Referans Belgesi, Reference Document Type,Referans Belge Türü, -Reference Owner,referans Sahibi, +Reference Owner,Referans Sahibi, Reference Type,Referans Tipi, -Refresh Token,Yenile Jetonu, +Refresh Token,Jetonu Yenile, Region,Bölge, Rejected,Reddedildi, -Reopen,Yeniden açmak, +Reopen,Yeniden aç, Replied,Cevaplandı, Report,Rapor, Report Builder,Rapor Oluşturucu, Report Type,Rapor Türü, Reports,Raporlar, Response,Tepki, -Role,rol, +Role,Roller, Route,Rota, -Sales Manager,Satış Müdürü, -Sales Master Manager,Satış Master Müdürü, -Sales User,Satış Kullanıcı, +Sales Manager,Satış Yöneticisi, +Sales Master Manager,Satış Master Yöneticisi, +Sales User,Satış Kullanıcısı, Salutation,Hitap, Sample,Numune, Saturday,Cumartesi, -Saved,Kaydedilmiş, +Saved,Kaydedildi, Scan Barcode,Barkod Tara, Scheduled,Planlandı, Search,Arama, @@ -239,16 +243,16 @@ Short Name,Kısa Adı, Slideshow,Slayt Gösterisi, Some information is missing,Bazı bilgiler eksik, Source,Kaynak, -Source Name,kaynak Adı, +Source Name,Kaynak Adı, Standard,Standart, Start Date,Başlangıç Tarihi, Start Import,İçe Aktarmayı Başlat, -State,"Belirtmek, bildirmek", +State,Eyalet, Stopped,Durduruldu, -Subject,konu, +Subject,Konu, Submit,Gönder, Successful,Başarılı, -Summary,özet, +Summary,Özet, Sunday,Pazar, System Manager,Sistem Yöneticisi, Target,Hedef, @@ -258,14 +262,15 @@ Test,Test, Thank you,Teşekkürler, The page you are looking for is missing. This could be because it is moved or there is a typo in the link.,Aradığınız sayfa eksik. taşınması veya linkte bir yazım hatası yoktur Bunun nedeni olabilir., Timespan,Zaman aralığı, -To,için, -To Date,Tarihine kadar, +To,Bitiş, +To Date,Bitiş Tarihi, Tools,Araçlar, -Traceback,Geri iz, +Traceback,Geri takip, +Translator,Çevirmen, URL,URL, -Unsubscribed,Kaydolmamış, +Unsubscribed,Abonelik iptal edildi, Use Sandbox,Kullanım Sandbox, -User,kullanıcı, +User,Kullanıcı, User ID,Kullanıcı kimliği, Users,Kullanıcılar, Validity,Geçerlilik, @@ -278,22 +283,22 @@ Week,Hafta, Weekdays,Hafta içi, Weekly,Haftalık, Welcome email sent,Hoşgeldiniz e-posta adresine gönderildi, -Workflow,İş Akışı, +Workflow,Workflow, +Add a comment,Yorum Ekle, You need to be logged in to access this page,Bu sayfaya erişmek için giriş yapmış olmanız gerekmektedir, old_parent,old_parent, {0} is mandatory,{0} alanı zorunludur, - to your browser,tarayıcına, +to your browser,tarayıcına, """Company History""","""Şirket Tarihçesi""", """Parent"" signifies the parent table in which this row must be added","""Ana"" bu satırın ekleneceği ana tabloyu belirtir", """Team Members"" or ""Management""","""Takım Üyeleri"" veya ""Yönetim""", -<head> HTML,<head> HTML, 'In Global Search' not allowed for type {0} in row {1},{1} satırında {0} türü için 'Genel Arama'ya izin verilmiyor, 'In List View' not allowed for type {0} in row {1},'Liste görüntüle' izin türü için {0} üst üste {1}, -'Recipients' not specified,'Alıcılar' belirtilmemiş, +'Recipients' not specified,'Alıcılar' belirtilmemiş, (Ctrl + G),(Ctrl + G), ** Failed: {0} to {1}: {2},** Başarısız: {0} için {1}: {2}, **Currency** Master,** Para ** Ana, -0 - Draft; 1 - Submitted; 2 - Cancelled,0 - Taslak; 1 - Gönderildi ; 2 - İptal Edildi, +"0 - Draft; 1 - Submitted; 2 - Cancelled","0 - Taslak; 1 - Gönderildi; 2 - İptal Edildi", 0 is highest,0 en üsttedir, 1 Currency = [?] Fraction\nFor e.g. 1 USD = 100 Cent,1 Döviz = [?] Örneğin 1 TKY = 100 Kuruş, 1 comment,1 yorum, @@ -301,7 +306,7 @@ old_parent,old_parent, 1 minute ago,1 dakika önce, 1 month ago,1 ay önce, 1 year ago,1 yıl önce, -; not allowed in condition,; Durumda izin verilmiyor, +"; not allowed in condition","; Durumda izin verilmiyor", "

Default Template

\n

Uses Jinja Templating and all the fields of Address (including Custom Fields if any) will be available

\n
{{ address_line1 }}<br>\n{% if address_line2 %}{{ address_line2 }}<br>{% endif -%}\n{{ city }}<br>\n{% if state %}{{ state }}<br>{% endif -%}\n{% if pincode %} PIN:  {{ pincode }}<br>{% endif -%}\n{{ country }}<br>\n{% if phone %}Phone: {{ phone }}<br>{% endif -%}\n{% if fax %}Fax: {{ fax }}<br>{% endif -%}\n{% if email_id %}Email: {{ email_id }}<br>{% endif -%}\n
","

Varsayılan Şablon \n

Jinja şablonu ve Adres tüm alanları (kullanır {; br & gt;, \n {% eğer address_line2%} {{address_line2}} & lt; br & gt Özel Alanlar varsa) \n

  {{address_line1}} & lt sunulacak dahil % endif -%} \n {{şehir}} & lt; br & gt; \n {% eğer devlet%} {{devlet}} & lt; br & gt; {% endif -%} {% \n eğer pin kodunu%} PIN: {{pin}} & lt; br & gt; {% endif -%} \n {{ülke}} & lt; br & gt; \n {% eğer telefon%} Telefon: {{telefon}} & lt; br & gt; { % endif -%} \n {% takdirde faks%} Faks: {{faks}} & lt; br & gt; {% endif -%} \n {% eğer email_id%} E-posta: {{email_id}} & lt; br & gt {% endif -%} \n  

", A Lead with this Email Address should exist,Bu e-posta adresiyle bir Müşteri Adayı bulunmalıdır, A list of resources which the Client App will have access to after the user allows it.
e.g. project,"Müşteri App kullanıcı izin verdiği sonra erişimi olacak kaynakların listesi.
örneğin, proje", @@ -331,9 +336,9 @@ Add / Manage Email Domains.,E-posta alan adlarını Ekle/Yönet, Add / Update,Ekle / Güncelle, Add A New Rule,Yeni Kural Ekle, Add Another Comment,Bir yorum daha ekle, -Add Attachment,Ek ekle, -Add Column,Sütun ekle, -Add Contact,Kişi ekle, +Add Attachment,Ek dosya Ekle, +Add Column,Sütun Ekle, +Add Contact,Kişi Ekle, Add Contacts,Kişileri ekleyin, Add Filter,Filtre Ekle, Add Group,Grup ekle, @@ -344,12 +349,13 @@ Add Subscribers,Abone Ekle, Add Total Row,Toplam satır ekle, Add Unsubscribe Link,Aboneliğini Bağlantısı Ekle, Add User Permissions,Kullanıcı İzinleri Ekleyin, +Add a Filter,Bir Filtre Ekle, Add a New Role,Yeni Rol Ekle, -Add a column,Sütun ekle, -Add a comment,Yorum ekle, +Add a column,Sütun Ekle, +Add a comment,Yorum Ekle, Add a new section,Yeni bölüm ekle, Add a tag ...,Etiket ekle ..., -Add all roles,Rol Ekleyin, +Add all roles,Tüm Rolleri Ekle, Add custom forms.,Özelleştirilmiş formlar ekle, Add custom javascript to forms.,Formlara özel javascript ekle., Add fields to forms.,Formlara ekstra alan ekleme., @@ -365,27 +371,27 @@ Address Template,Adres Şablonu, Address Title is mandatory.,Adres Başlığı zorunludur., Address and other legal information you may want to put in the footer.,Adres ve diğer yasal bilgileri altbilgi kısmına koyabilirsiniz, Addresses And Contacts,İrtibatlar ve Adresler, -Adds a client custom script to a DocType,Bir DocType'a istemci özel komut dosyası ekler, +Adds a client custom script to a DocType,Bir Belge Tipine özel bir client script ekler, Adds a custom field to a DocType,Bir DocType için özel bir alan ekler, -Admin,yönetim, +Admin,Yönetim, Administrator Logged In,Yönetici Giriş Yaptı, Administrator accessed {0} on {1} via IP Address {2}.,Yönetici {1} üzerindeki {0}'a {2} IP Adresinden erişti., Advanced,Gelişmiş, Advanced Control,Gelişmiş Kontrol, Advanced Search,Gelişmiş Arama, Align Labels to the Right,Etiketleri Sağa hizalayın, -Align Value,Değeri hizala, +Align Value,Değeri Hizala, All Images attached to Website Slideshow should be public,Web Sitesi Slayt gösterisine eklenen tüm resimler herkese açık olmalıdır, All customizations will be removed. Please confirm.,Tüm özelleştirmeler silinecektir. Onaylayın., -"All possible Workflow States and roles of the workflow. Docstatus Options: 0 is""Saved"", 1 is ""Submitted"" and 2 is ""Cancelled""","Mümkün olan tüm İş Akışı Devletler ve iş akışı rolleri. Docstatus Seçenekleri: 0 "Kaydedildi", 1 "Ekleyen" ve 2 "İptal" olduğunu", +"All possible Workflow States and roles of the workflow. Docstatus Options: 0 is""Saved"", 1 is ""Submitted"" and 2 is ""Cancelled""","Mümkün olan tüm İş Akışı Durumlar ve iş akışı rolleri. Docstatus Seçenekleri: 0 'Kaydedildi', 1 'Gönderildi' ve 2 'İptal edildi' ", All-uppercase is almost as easy to guess as all-lowercase.,"Hepsi büyük harf, hepsi küçük harf kadar kolay tahmin edilebilir.", Allocated To,Atanan, -Allow,İzin vermek, +Allow,İzin ver, Allow Bulk Edit,Toplu düzenlemeye izin ver, Allow Comments,Yorumlara izin ver, Allow Consecutive Login Attempts ,Ardışık Giriş Denemelerine İzin Ver, Allow Dropbox Access,Dropbox erişimine izin ver, -Allow Edit,Düzenle İzin, +Allow Edit,İzin Düzenle, Allow Guest to View,Misafirin görüntülemesine izin ver, Allow Import (via Data Import Tool),İçe aktarıma izin ver (Veri Alma Aracı ile), Allow Incomplete Forms,Eksik Formlara izin ver, @@ -403,7 +409,7 @@ Allow Roles,Rollere izin ver, Allow Self Approval,Kendi Onayına İzin Ver, Allow approval for creator of the document,Belgenin yaratıcısı için onay ver, Allow events in timeline,Zaman çizelgesindeki etkinliklere izin ver, -Allow in Quick Entry,Hızlı Giriş'e İzin Ver, +Allow in Quick Entry,Hızlı Giriş'e İzin Ver, Allow on Submit,Gönderme Onayı İzni, Allow only one session per user,Kullanıcı başına yalnızca bir oturuma izin ver, Allow page break inside tables,Tablo içerisinde sayfa sonlarına izin ver, @@ -416,13 +422,13 @@ Allowed In Mentions,Yorumlarda İzin Verildi, Already Registered,Zaten Kayıtlı, Also adding the dependent currency field {0},Ayrıca bağımlı para birimi alanını {0} ekleyerek, "Always add ""Draft"" Heading for printing draft documents","Taslak belgeleri yazdırırken her zaman ""Taslak"" başlığını ekle", -Always use Account's Email Address as Sender,Daima Gönderen olarak Hesabının E-posta Adresi kullanmak, +Always use Account's Email Address as Sender,Daima Gönderen olarak Hesabının E-posta Adresi kullan, Always use Account's Name as Sender's Name,Her zaman Hesap Adını Gönderenin Adı olarak kullan, Amend,Değiştir, Amending,Değiştirilen, Amount Based On Field,Alan Bazlı Tutar, Amount Field,tutar Alan, -Amount must be greater than 0.,Miktar 0'dan büyük olmalıdır., +Amount must be greater than 0.,Miktar 0'dan büyük olmalıdır., An error occured during the payment process. Please contact us.,Ödeme işlemi sırasında bir hata oluştu. Lütfen bizimle iletişime geçin., An icon file with .ico extension. Should be 16 x 16 px. Generated using a favicon generator. [favicon-generator.org],.ico Uzantılı bir simge dosyası. 16 x 16 px olmalıdır. Bir favicon jeneratörü kullanılarak oluşturulan. [favicon-generator.org], Ancestors Of,Ataları, @@ -445,15 +451,16 @@ Append To can be one of {0},{0} biri ile ilişkilendirilebilir, Append To is mandatory for incoming mails,Için Gelen postalar için zorunludur Append, "Append as communication against this DocType (must have fields, ""Status"", ""Subject"")","(Alanları, ""Durum"" olmalı ""Konu"") Bu DocType karşı iletişim gibi ekler", Applicable Document Types,Uygulanabilir Belge Türleri, -Apply,Uygulamak, +Apply,Uygula, +Apply Filters,Filtreyi Uygula, Apply Strict User Permissions,Katı Kullanıcı Yetkilerini Uygula, Apply To All Document Types,Tüm Belge Türlerine Uygula, Apply this rule if the User is the Owner,Kullanıcı Sahibi ise bu kuralı uygula, Apply to all Documents Types,Tüm Belge Türlerine Uygula, -Appreciate,takdir etmek, -Appreciation,takdir, +Appreciate,Takdir et, +Appreciation,Takdir, Archive,Arşiv, -Archived,Arşivlenen, +Archived,Arşivlendi, Archived Columns,Arşivlenen Sütunlar, Are you sure you want to delete the attachment?,Eki silmek istediğinizden emin misiniz?, Are you sure you want to relink this communication to {0}?,Eğer {0} bu iletişimi yeniden bağlamak istediğinden emin misin?, @@ -465,15 +472,15 @@ Assign To Users,Kullanıcılara Atama, "Assign one by one, in sequence",Sırayla birer birer atayın, Assign to me,Bana Ata, Assign to the one who has the least assignments,En az ödeve sahip olana tayin edin, -Assigned,atanan, -Assigned By,By Assigned, +Assigned,Atanan, +Assigned By,Atayan, Assigned By Full Name,Bilinen Tam Adı, Assigned By Me,Bana Atanan, Assigned To,Atanan, Assigned To/Owner,/ Kişiye Atanan, Assignment,atama, Assignment Complete,Komple Atama, -Assignment Completed,atama Tamamlandı, +Assignment Completed,Atama Tamamlandı, Assignment Rule,Atama Kuralı, Assignment Rule User,Atama Kuralı Kullanıcısı, Assignment Rules,Atama Kuralları, @@ -481,26 +488,26 @@ Assignment closed by {0},Atama tarafından kapatıldı {0}, Assignment for {0} {1},{0} {1} için ödev, Atleast one field of Parent Document Type is mandatory,Ana belge tipinin en az bir alanı zorunludur, Attach,Ekle, -Attach Document Print,Belge Yazdır takın, -Attach Image,Görüntü Ekleyin, -Attach Print,Yazdır takın, +Attach Document Print,Ek Belgeyi Yazdır, +Attach Image,Görüntü Ekle, +Attach Print,Eki Yazdır, Attach Your Picture,Resminizi Ekleyin, -Attach file for Import,İçe Aktar için dosya ekle, -Attach files / urls and add in table.,Dosyaları / URL'leri ekleyin ve tabloya ekleyin., -Attached To DocType,DocType'a Ekle, +Attach file for Import,İçe Aktarım için dosya ekle, +Attach files / urls and add in table.,Dosyaları / URL'leri ekleyin ve tabloya ekleyin., +Attached To DocType,Belge Türüne Ekle, Attached To Field,Alana Bağlı, Attached To Name,Adı için Eklenmiş, Attachment Limit (MB),Eklenti Limiti (MB), Attachment Removed,Eklenti kaldırıldı, Attempting Connection to QZ Tray...,QZ Tepsisine Bağlantı Deneniyor ..., -Attempting to launch QZ Tray...,QZ Tray'i başlatmaya çalışıyor ..., +Attempting to launch QZ Tray...,QZ Tray'i başlatmaya çalışıyor ..., Auth URL Data,Kimlik Doğrulama URL Veri, Authenticating...,Kimlik doğrulanıyor ..., Authentication,Doğrulama, Authentication Apps you can use are: ,Kullanabileceğiniz kimlik doğrulama uygulamaları şunlardır:, Authentication Credentials,Kimlik Doğrulama Kimlik Bilgileri, Authorization Code,Yetki Kodu, -Authorize URL,URL'yi yetkilendir, +Authorize URL,URL'yi yetkilendir, Authorized,Yetkili, Auto,Otomatik, Auto Email Report,Otomatik E-posta Raporu, @@ -561,18 +568,18 @@ Braintree Settings,Braintree Ayarları, Braintree payment gateway settings,Braintree ödeme ağ geçidi ayarları, Brand HTML,Marka HTML, Brand Image,Marka imajı, -Breadcrumbs,Kırıntıları, +Breadcrumbs,Sayfa işaretleri, Browser not supported,Tarayıcı desteklenmiyor, -Brute Force Security,Kaba kuvvet güvenlik, -Build Report,Rapor oluşturmak, -Bulk Delete,Toplu Silme, -Bulk Edit {0},Toplu Düzenleme {0}, -Bulk Rename,Toplu Rename, -Bulk Update,Çoklu güncelleme, +Brute Force Security,Kaba Kuvvet Güvenliği, +Build Report,Rapor Oluştur, +Bulk Delete,Toplu Sil, +Bulk Edit {0},Toplu Düzenle {0}, +Bulk Rename,Toplu Yeniden adlandır, +Bulk Update,Toplu Güncelle, Busy,Meşgul, -Button,Düğme, -Button Help,düğme Yardımı, -Button Label,düğme Etiketi, +Button,Buton, +Button Help,Buton Yardımı, +Button Label,Buton Etiketi, Bypass Two Factor Auth for users who login from restricted IP Address,Kısıtlı IP Adresi ile giriş yapan kullanıcılar için İki Faktör Kimlik Doğrulama, Bypass restricted IP Address check If Two Factor Auth Enabled,"İki Faktör Yetkilisi Etkinleştirilmişse, Sınırlı IP Adresi kontrolünü atla", CC,CC, @@ -602,7 +609,7 @@ Cannot change state of Cancelled Document. Transition row {0},İptal Belgesinin Cannot change user details in demo. Please signup for a new account at https://erpnext.com,Demoda kullanıcı ayrıntılarını değiştiremezsiniz. Lütfen https://erpnext.com adresinden yeni bir hesap için kaydolun, Cannot create a {0} against a child document: {1},oluşturulamıyor bir {0} alt belgenin karşı: {1}, Cannot delete Home and Attachments folders,Ev ve Ekler klasörleri silemezsiniz, -Cannot delete file as it belongs to {0} {1} for which you do not have permissions,{0} {1} 'e ait olduğu için dosyanın izinleri olmadığı için silinemiyor, +Cannot delete file as it belongs to {0} {1} for which you do not have permissions,{0} {1} 'e ait olduğu için dosyanın izinleri olmadığı için silinemiyor, Cannot delete or cancel because {0} {1} is linked with {2} {3} {4},"{0} {1}, {2} {3} {4} ile bağlantılı olduğundan silinemez veya iptal edilemez", Cannot delete standard field. You can hide it if you want,Standart alan silinemiyor. İstersen bunu gizleyebilirsiniz, Cannot delete {0},{0} sililemiyor, @@ -618,7 +625,7 @@ Cannot move row,Satır taşınamıyor, Cannot open instance when its {0} is open,"Açıkken, örneği açılamaz {0}", Cannot open {0} when its instance is open,Örnek açıkken {0} açılamıyor, Cannot remove ID field,Kimlik alanı kaldırılamıyor, -Cannot set Notification on Document Type {0},Belge Türü'nde Bildirim Ayarlanamıyor {0}, +Cannot set Notification on Document Type {0},Belge Türü'nde Bildirim Ayarlanamıyor {0}, Cannot update {0},{0} güncellenemiyor, Cannot use sub-query in order by,tarafından sırayla alt sorgu kullanılamaz, Cannot {0} {1},{0} {1} olamaz, @@ -631,7 +638,7 @@ Cent,Sent, Chain Integrity,Zincir bütünlüğü, Chaining Hash,Zincirleme karma, Change Label (via Custom Translation),(Özel Çevirisi) Değişim Etiket, -Change Password,Şifre değiştir, +Change Password,Şifre Değiştir, "Change field properties (hide, readonly, permission etc.)","Değişim alan özellikleri (sakla, salt okunur, izin vb)", Channel,Kanal, Chart Name,Grafik Adı, @@ -652,7 +659,7 @@ Chat Token,Sohbet Simgesi, Chat Type,Sohbet Türü, Chat messages and other notifications.,Iletileri ve diğer bildirimleri Sohbet., Check,Kontrol, -Check Request URL,İstek URL'sini kontrol et, +Check Request URL,İstek URL'sini kontrol et, "Check columns to select, drag to set order.","Sırasını ayarlamak için, sürükle seçmek için sütunları kontrol edin.", Check this if you are testing your payment using the Sandbox API,Sandbox API kullanarak ödemenizi test eğer bu kontrol, Check this to pull emails from your mailbox,Posta kutunuzdan mail çekmek için işaretleyin, @@ -677,7 +684,7 @@ Clicked,Tıklandı, Client Credentials,Müşteri Kimlik, Client Information,Müşteri bilgisi, Client Script,İstemci Komut Dosyası, -Client URLs,Müşteri URL'leri, +Client URLs,Müşteri URL'leri, Client side script extensions in Javascript,JavaScript İstemci tarafı komut dosyası uzantıları, Collapsible,Katlanabilir, Collapsible Depends On,Katlanabilir Bağlıdır, @@ -699,7 +706,7 @@ Comments and Communications will be associated with this linked document,Yorumla Comments cannot have links or email addresses,Yorumların bağlantıları veya e-posta adresleri olamaz, Common names and surnames are easy to guess.,Ortak ad ve soyadları tahmin etmek kolaydır., Communicated via {0} on {1}: {2},aracılığıyla iletilen {0} {1}: {2}, -Communication Type,haberleşme Tipi, +Communication Type,İletişim Tipi, Company History,Şirket Tarihçesi, Company Introduction,Firma Tanıtımı, Compiled Successfully,Başarıyla Derlendi, @@ -711,19 +718,19 @@ Compose Email,E-posta oluştur, Condition Detail,Durum Ayrıntısı, Conditions,Koşullar, Configure Chart,Grafiği Yapılandır, -Configure Charts,Grafikleri Yapılandırma, -Confirm,Onaylamak, +Configure Charts,Grafikleri Yapılandır, +Confirm,Onayla, Confirm Deletion of Data,Verilerin Silinmesini Onayla, Confirm Request,İsteği Onayla, Confirm Your Email,E-posta adresiniz Onayla, Confirmed,Onaylı, -Connected to QZ Tray!,QZ Tray'e bağlı!, +Connected to QZ Tray!,QZ Tray'e bağlı!, Connection Name,Bağlantı adı, Connection Success,Bağlantı Başarı, Connection lost. Some features might not work.,Bağlantı koptu. Bazı özellikler çalışmayabilir., Connector Name,Bağlayıcı Adı, Connector Type,Bağlayıcı Türü, -Contact Us Settings,Bize Ulaşın ayarları, +Contact Us Settings,Bize Ulaşın Ayarları, "Contact options, like ""Sales Query, Support Query"" etc each on a new line or separated by commas.","'Satış sorgusu, Destek sorgusu' gibi her biri yeni bir sırada ya da virgüllerle ayrılmış, iletişim seçenekleri", Contacts,Kişiler, Content (HTML),İçerik (HTML), @@ -732,13 +739,13 @@ Content Hash,İçerik Hash, Content web page.,Içerik web sayfası., Conversation Tones,Konuşma Sesleri, Copyright,Telif hakkı, -Core,Çekirdek, -Core DocTypes cannot be customized.,Çekirdek DocTypes özelleştirilemez., +Core,Temel Ayarlar, +Core DocTypes cannot be customized.,Temel Belge Türleri özelleştirilemez., Could not connect to outgoing email server,Giden e-posta sunucusu için bağlantı kurulamadı, Could not find {0},Bulunamıyor {0}, Could not find {0} in {1},{1}'in içinde {0} bulunamadı, Could not identify {0},{0} tanımlanamadı, -Count,saymak, +Count,Sayım, Country Name,Ülke Adı, County,Kontluk, Create Chart,Grafik Oluştur, @@ -746,15 +753,15 @@ Create New,Yeni Oluştur, Create Post,Gönderi Oluştur, Create User Email,Kullanıcı E-postası Oluştur, Create a New Format,Yeni Format Oluştur, -Create a new record,Yeni bir kayıt oluştur, -Create a new {0},Yeni {0} oluşturun, -Create and Send Newsletters,Oluşturun ve gönderin Haber, +Create a new record,Yeni bir Kayıt Oluştur, +Create a new {0},Yeni bir {0} Oluştur, +Create and Send Newsletters,Haber bülteni Oluştur ve Gönder, Create and manage newsletter,Bülten oluşturun ve yönetin, Created,düzenlendi, Created Custom Field {0} in {1},Tasarlanmış özel alan {0} {1}, Created On,Oluşturulma Tarihi, Criticism,eleştiri, -Criticize,eleştirmek, +Criticize,Eleştir, Ctrl + Down,Ctrl + Aşağı, Ctrl + Up,Ctrl + Yukarı, Ctrl+Enter to add comment,Yorum eklemek için Ctrl+Enter tuşlarına basın, @@ -772,42 +779,42 @@ Custom Base URL,Özel Ana URL, Custom CSS,Özel CSS, Custom DocPerm,Özel DocPerm, Custom Field,Özel Alan, -Custom Fields can only be added to a standard DocType.,Özel Alanlar sadece standart bir DocType'a eklenebilir., -Custom Fields cannot be added to core DocTypes.,"Özel Dokümanlar, çekirdek DocTypes'e eklenemez.", +Custom Fields can only be added to a standard DocType.,Özel Alanlar sadece standart bir DocType'a eklenebilir., +Custom Fields cannot be added to core DocTypes.,"Özel Dokümanlar, çekirdek DocTypes'e eklenemez.", Custom Format,Özel Formatı, Custom HTML Help,Özel HTML Yardımı, Custom JS,Özel JS, Custom Menu Items,Özel Menü Öğeleri, -Custom Report,Özel rapor, +Custom Report,Özel Rapor, Custom Reports,Özel Raporlar, -Custom Role,Özel Rolü, +Custom Role,Özel Roller, Custom Script,Özel Komut, Custom Sidebar Menu,Özel Kenar Çubuğu Menüsü, -Custom Translations,özel Çeviriler, +Custom Translations,Özel Çeviriler, Customization,Özelleştirme, Customizations Reset,Özelleştirmeler Sıfırla, Customizations for {0} exported to:
{1},{0} için verilen özelleştirmeler şu kişilere ihraç edildi:
{1}, -Customize Form,Formu özelleştirmek, -Customize Form Field,Form alanını özelleştirmek, +Customize Form,Formu Özelleştir, +Customize Form Field,Form alanını özelleştir, "Customize Label, Print Hide, Default etc.","Özelleştirme Etiket, Baskı gizle vb.", Customize...,Özelleştirmek..., "Customized Formats for Printing, Email","Baskı, E-posta için Özelleştirilmiş Biçimleri", Customized HTML Templates for printing transactions.,Baskı işlemleri için özel HTML Şablonları., -Cut,Kesmek, +Cut,Kes, DESC,AZALAN, Daily Event Digest is sent for Calendar Events where reminders are set.,Günlük Planlar takvime gönderilir ve bunlar için alarm ayarlanır., Danger,Tehlike, Dark Color,Koyu renk, -Dashboard Chart,Gösterge Tablosu, -Dashboard Chart Link,Kontrol Paneli Grafik Bağlantısı, +Dashboard Chart,Gösterge Paneli Grafiği, +Dashboard Chart Link,Gösterge Paneli Grafik Bağlantısı, Dashboard Chart Source,Kontrol Paneli Grafik Kaynağı, Dashboard Name,Kontrol Paneli Adı, Dashboards,Gösterge tabloları, Data,Veri, -Data Export,Veri Aktarımı, -Data Import,Veri İçe Aktarma, +Data Export,Veri Aktarma, +Data Import,Veri Alma, Data Import Template,Veri Alma Şablon, -Data Migration,Veri göçü, +Data Migration,Veri Göçü, Data Migration Connector,Veri Taşıma Bağlayıcısı, Data Migration Mapping,Veri Taşıma Eşleme, Data Migration Mapping Detail,Veri Taşıma Eşleme Ayrıntısı, @@ -843,7 +850,7 @@ Default Value,Varsayılan Değer, "Default: ""Contact Us""","Default: ""Bize Ulaşın""", DefaultValue,VarsayılanDeğer, Define workflows for forms.,Formlar için iş akışlarını tanımlayın., -Defines actions on states and the next step and allowed roles.,Devletlerin eylemleri ve bir sonraki adımı ve izin verilen rolleri tanımlar., +Defines actions on states and the next step and allowed roles.,"Durumlar üzerindeki eylemleri, sonraki adımları ve izin verilen rolleri tanımlar.", Defines workflow states and rules for a document.,Bir belge için iş akışı durumları ve kuralları tanımlar., Delayed,Gecikmiş, Delete Data,Verileri Sil, @@ -851,23 +858,23 @@ Delete comment?,Yorum silinsin mi?, Delete this record to allow sending to this email address,Bu e-posta adresine gönderilmesine izin Bu kayıt silinsin, Delete {0} items permanently?,Bu {0} öğeyi kalıcı olarak silmek istediğinize emin misiniz?, Deleted,Silinen, -Deleted DocType,DocType silindi, -Deleted Document,Döküman silindi, -Deleted Documents,Silinmiş Belgeler, -Deleted Name,İsim silindi, +Deleted DocType,Silinen Belge Türü, +Deleted Document,Silinen Belge, +Deleted Documents,Silinen Belgeler, +Deleted Name,Silinen ad, Deleting {0},Siliniyor {0}, Depends On,Bağlıdır, Descendants Of,Torunları, Desk,Masa, -Desk Access,Danışma Erişim, +Desk Access,Masa Erişimi, Desktop Icon,Masaüstü simgesi, Desktop Icon already exists,Masaüstü Simgesi zaten var, Developer,Geliştirici, -Did not add,Eklemek vermedi, -Did not cancel,Iptal edilmedi, +Did not add,Eklenemedi, +Did not cancel,İptal edilemedi, Did not find {0} for {0} ({1}),Için {0} bulamadık {0} ({1}), Did not remove,Kaldırılamaz, -"Different ""States"" this document can exist in. Like ""Open"", ""Pending Approval"" etc.","Bu belge içeri var farklı ""Devletleri"" ""Aç"" gibi, ""Onay Bekliyor"" vb", +"Different ""States"" this document can exist in. Like ""Open"", ""Pending Approval"" etc.","Bu belge içeri var farklı ""Durumlar"" ""Açık"" gibi, ""Onay Bekliyor"" vb", Direct,direkt, Direct room with {0} already exists.,{0} ile doğrudan oda zaten var., Disable Auto Refresh,Otomatik Yenilemeyi Devre Dışı Bırak, @@ -884,7 +891,7 @@ Display,Görüntü, Display Depends On,Görüntü şuna bağlı, Do not allow user to change after set the first time,Kullanıcı değiştirmesine izin vermeyin sonra ilk kez ayarlayın, Do not edit headers which are preset in the template,Şablonda önceden belirlenmiş başlıkları düzenleme, -Do not send Emails,E-postalar gönderme, +Do not send Emails,E-posta gönderme, Doc Event,Doktor Etkinliği, Doc Events,Doc Etkinlikleri, Doc Status,Doc Durum, @@ -892,34 +899,34 @@ DocField,DocField, DocPerm,DocPerm, DocShare,DocShare, DocType {0} provided for the field {1} must have atleast one Link field,"{1} alanı için sağlanan DocType {0} , en az bir Link alanına sahip olmalı", -DocType can not be merged,DocType birleştirilmiş olamaz, -DocType can only be renamed by Administrator,DocType sadece Yönetici tarafından yeniden adlandırılabilir, -DocType is a Table / Form in the application.,DocType uygulamasında bir tablo / Formu olduğunu., -DocType must be Submittable for the selected Doc Event,"DocType, seçilen Dok Olayı için Gönderilebilir olmalıdır", +DocType can not be merged,Belge Türü birleştirilmiş olamaz, +DocType can only be renamed by Administrator,Belge Türü sadece Yönetici tarafından yeniden adlandırılabilir, +DocType is a Table / Form in the application.,Belge Türü uygulamasında bir tablo / Formu olduğunu., +DocType must be Submittable for the selected Doc Event,"Belge Türü, seçilen Dok Olayı için Gönderilebilir olmalıdır", DocType on which this Workflow is applicable.,Uygulanabilir iş akışı DOCTYPE., "DocType's name should start with a letter and it can only consist of letters, numbers, spaces and underscores","BELGETÜRÜ adı bir harfle başlamalıdır ve sadece harfler, sayılar, boşluklar ve alt oluşabilir", -Doctype required,Doctype gerekli, +Doctype required,Belge Türü gerekli, Document,Belge, -Document Follow,Döküman Takibi, +Document Follow,Belge Takibi, Document Follow Notification,Belge Takip Bildirimi, Document Queued,Belge sıraya alınmış, -Document Restored,Doküman Geri Yüklendi, +Document Restored,Belge Geri Yüklendi, Document Share Report,Belge Paylaş Raporu, -Document States,Belge Devletleri, +Document States,Belge Durumları, Document Type is not importable,Belge Türü içe aktarılmaz, Document Type is not submittable,Belge Türü gönderilemez, Document Type to Track,İzlenecek Belge Türü, Document Types,Belge Türleri, -Document can't saved.,Doküman kaydedilemiyor., +Document can't saved.,Belge kaydedilemiyor., Document {0} has been set to state {1} by {2},"{0} belgesi, {2} tarihinde {1} durumunu yapacak şekilde ayarlandı", Documents,Belgeler, Documents assigned to you and by you.,Size ve sizin tarafınızdan atanmış belgeler., Domain Settings,Etki Alanı Ayarları, Domains HTML,Domains HTML, -"Don't HTML Encode HTML tags like <script> or just characters like < or >, as they could be intentionally used in this field",Do not <script> ya da sadece karakterler kasten bu alanda kullanılan olabilir gibi gibi <veya> gibi HTML Encode HTML etiketleri, -Don't Override Status,Durum geçersiz kılma etmeyin, +"Don't HTML Encode HTML tags like <script> or just characters like < or >, as they could be intentionally used in this field","Do not <script> ya da sadece karakterler kasten bu alanda kullanılan olabilir gibi gibi <veya> gibi HTML Encode HTML etiketleri", +Don't Override Status,Durumu geçersiz kılma, Don't create new records,Yeni kayıtlar oluşturma, -Don't have an account? Sign up,Hesabınız mı yok mu? Kayıt ol, +"Don't have an account? Sign up","Hesabınız mı yok mu? Kayıt ol", "Don't know, ask 'help'","Bilmiyorsanız, 'Yardım' isteyin", Download Data,Veri İndir, Download Files Backup,Dosya İndirme Yedekleme, @@ -933,26 +940,26 @@ Drag elements from the sidebar to add. Drag them back to trash.,Kenar çubuğund Dropbox Access Key,Dropbox Erişim Anahtarı, Dropbox Access Secret,Dropbox Erişimi Gizli, Dropbox Access Token,Bırakma Kutusu Erişim Kartı, -Dropbox Settings,dropbox Ayarları, +Dropbox Settings,Dropbox Ayarları, Dropbox Setup,Dropbox Kurulumu, Dropbox access is approved!,Dropbox erişimi onaylandı!, Dropbox backup settings,Dropbox yedekleme ayarları, Duplicate Filter Name,Yinelenen Filtre Adı, -Dynamic Link,Dynamic Link, +Dynamic Link,Dinamik Bağlantı, Dynamic Report Filters,Dinamik Rapor Filtreleri, ESC,ESC, Edit Auto Email Report Settings,Otomatik E-posta Rapor Ayarlarını Düzenle, Edit Custom HTML,Edit Custom HTML, -Edit DocType,Düzenleme DocType, -Edit Filter,Düzen Filtre, -Edit Format,Düzen Biçimi, +Edit DocType,Belge Türünü Düzenle, +Edit Filter,Filtreyi Düzenle, +Edit Format,Biçimi Düzenle, Edit HTML,HTML Düzenle, -Edit Heading,Düzenle Başlık, +Edit Heading,Başlık Düzenle, Edit Properties,Özellikleri Düzenle, -Edit to add content,Içerik eklemek için düzenleyin, +Edit to add content,Içerik eklemek için düzenle, Edit {0},{0} düzenle, Editable Grid,Düzenlenebilir Izgara, -Editing Row,Düzenleme Satır, +Editing Row,Satır Düzenleme, Eg. smsgateway.com/api/send_sms.cgi,Örn. msgateway.com / api / send_sms.cgi, Email Account Name,E-posta Hesap Adı, Email Account added multiple times,E-posta Hesabı birden çok kez eklendi, @@ -965,7 +972,7 @@ Email Group,E-posta Grubu, Email Group List,E-posta Grubu Listesi, Email Group Member,Grup Üyesi e-posta, Email Login ID,E-posta Giriş Kimliği, -Email Queue,E-posta Kuyruk, +Email Queue,E-posta Kuyruğu, Email Queue Recipient,E-posta Kuyruk Alıcı, Email Queue records.,E-posta Kuyruk kayıtları., Email Reply Help,E-posta Yanıtı Yardım, @@ -1002,15 +1009,15 @@ Enable Two Factor Auth,İki Faktör Onayı Etkinleştir, Enabled email inbox for user {0},{0} kullanıcısı için e-posta gelen kutusu etkin, "Encryption key is invalid, Please check site_config.json","Şifreleme anahtarı geçersiz, lütfen site_config.json dosyasını kontrol edin.", End Date Field,Bitiş Tarihi Alanı, -End Date cannot be before Start Date!,"Bitiş Tarihi, Başlangıç Tarihi'nden önce olamaz!", -Endpoint URL,Bitiş noktası URL'si, -Energy Point Log,Enerji Noktası Günlüğü, -Energy Point Rule,Enerji Noktası Kuralı, -Energy Point Settings,Enerji Noktası Ayarları, -Energy Points,Enerji Noktaları, -Enter Email Recipient(s),Enter-posta Alıcı (lar), +End Date cannot be before Start Date!,"Bitiş Tarihi, Başlangıç Tarihi'nden önce olamaz!", +Endpoint URL,Bitiş noktası URL'si, +Energy Point Log,Enerji Puanı Günlüğü, +Energy Point Rule,Enerji Puanı Kuralı, +Energy Point Settings,Enerji Puanı Ayarları, +Energy Points,Enerji Puanları, +Enter Email Recipient(s),E-posta Alıcılarını Girin, Enter Form Type,Form Türü Girin, -"Enter default value fields (keys) and values. If you add multiple values for a field, the first one will be picked. These defaults are also used to set ""match"" permission rules. To see list of fields, go to ""Customize Form"".","Varsayılan değer alanları (tuşlar) ve değerlerini girin. Bir alan için birden fazla değer eklerseniz, ilki alınacak. Bu varsayılan ayrıca "maç" izni kuralları ayarlamak için kullanılır. Alanların listesini görmek için, "Özelleştir Formu" gidin.", +"Enter default value fields (keys) and values. If you add multiple values for a field, the first one will be picked. These defaults are also used to set ""match"" permission rules. To see list of fields, go to ""Customize Form"".","Varsayılan değer alanları (tuşlar) ve değerlerini girin. Bir alan için birden fazla değer eklerseniz, ilki alınacak. Bu varsayılan ayrıca 'maç' izni kuralları ayarlamak için kullanılır. Alanların listesini görmek için, 'Özelleştir Formu' gidin.", Enter folder name,Klasör adını girin, "Enter keys to enable login via Facebook, Google, GitHub.","Facebook, Google, GitHub üzerinden oturum açmayı etkinleştirme anahtarlarını girin.", Enter python module or select connector type,Python modülünü girin veya konektör türünü seçin, @@ -1050,11 +1057,11 @@ Expire Notification On,On Bildirimi Expire, Expires In,İçinde sona eriyor, Expiry time of QR Code Image Page,QR Kodu Resim Sayfa son kullanma süresi, Export All {0} rows?,Tüm {0} satırları dışa aktar?, -Export Custom Permissions,İhracat Özel İzinler, -Export Customizations,ihracat Özelleştirmeler, +Export Custom Permissions,Export Özel İzinler, +Export Customizations,Export Özelleştirmeleri, Export Data,Verileri Dışa Aktar, Export Data in CSV / Excel format.,Verileri CSV / Excel formatında dışa aktarın., -Export Report: {0},İhracat Raporu: {0}, +Export Report: {0},Export Raporu: {0}, Expose Recipients,Alıcılar Açığa, "Expression, Optional","İfade, Opsiyonel", Facebook,Facebook, @@ -1067,12 +1074,12 @@ Fetch From,From Get, Fetch If Empty,Boşsa Al, Fetch Images,Görüntüleri getir, Fetch attached images from document,Ekli görüntüleri dokümandan getir, -"Field ""route"" is mandatory for Web Views",Web İzleme alanları "rota" zorunlu, -"Field ""value"" is mandatory. Please specify value to be updated",Alan "değer" zorunludur. güncelleştirilmesi için değer belirtin, +"Field ""route"" is mandatory for Web Views",Web İzleme alanları 'rota' zorunlu, +"Field ""value"" is mandatory. Please specify value to be updated",Alan 'değer' zorunludur. güncelleştirilmesi için değer belirtin, Field Description,Alan Açıklama, Field Maps,Alan Haritaları, Field Type,Alan Türü, -"Field that represents the Workflow State of the transaction (if field is not present, a new hidden Custom Field will be created)","İş Akışı işlem Devleti (alan mevcut değilse, yeni bir gizli Özel Alan oluşturulur) temsil Field", +"Field that represents the Workflow State of the transaction (if field is not present, a new hidden Custom Field will be created)","İşlemin İş Akışı Durumunu temsil eden alan (alan yoksa yeni bir gizli Özel Alan oluşturulacaktır)", Field to Track,İzlenecek Alan, Field type cannot be changed for {0},{0} için alan türü değiştirilemiyor, Field {0} not found.,{0} alanı bulunamadı., @@ -1082,16 +1089,16 @@ Fieldname which will be the DocType for this link field.,Bu linki alan için Doc Fieldname {0} cannot have special characters like {1},Fieldname {0} gibi özel karakterleri olamaz {1}, Fieldname {0} conflicting with meta object,{0} alan adı meta nesne ile çakışıyor, Fields Multicheck,Alanlar Multicheck, -"Fields separated by comma (,) will be included in the ""Search By"" list of Search dialog box","Virgülle ayrılmış alanlar (,) dahil edilecektir Arama iletişim kutusunun listesinde "ile Arama"", -Fieldtype,FIELDTYPE, +"Fields separated by comma (,) will be included in the ""Search By"" list of Search dialog box","Virgülle ayrılmış alanlar (,) dahil edilecektir Arama iletişim kutusunun listesinde 'ile Arama'", +Fieldtype,ALANTIPI, Fieldtype cannot be changed from {0} to {1} in row {2},Alan Türleri {0} değiştirilemez {1} üste {2}, -File '{0}' not found,Dosya '{0}' bulunamadı, +File '{0}' not found,Dosya '{0}' bulunamadı, File Backup,Dosya Yedekleme, File Name,Dosya Adı, File Size,Dosya Boyutu, -File Type,Dosya tipi, +File Type,Dosya Tipi, File URL,Dosya URL'si, -File Upload,Dosya yükleme, +File Upload,Dosya Yükle, File Upload Disconnected. Please try again.,Dosya Yüklemesi kesildi. Lütfen tekrar deneyin., File Upload in Progress. Please try again in a few moments.,Dosya Yükleme Devam Ediyor. Lütfen birkaç dakika içinde tekrar deneyin., File backup is ready,Dosya yedeklemesi hazır, @@ -1100,8 +1107,8 @@ File size exceeded the maximum allowed size of {0} MB,Dosya boyutu {0} MB izin v File too big,Dosya çok büyük, File {0} does not exist,{0} yok Dosya, Files,Dosyalar, -Filter,filtre, -Filter Data,Verileri Filtreleme, +Filter,Filtrele, +Filter Data,Verileri Filtrele, Filter List,Filtre Listesi, Filter Meta,Meta Filtre, Filter Name,Filtre Adı, @@ -1109,27 +1116,27 @@ Filter Values,Filtre Değerleri, Filter must be a tuple or list (in a list),Filtre bir liste veya liste olmalıdır (bir listede), "Filter must have 4 values (doctype, fieldname, operator, value): {0}","Filtrenin 4 değeri olmalıdır (doctype, fieldname, operator, value): {0}", Filter...,Filtre ..., -"Filtered by ""{0}""",Tarafından Filtreli "{0}", -Filters Display,Filtreler Ekran, +"Filtered by ""{0}""","""{0}"" tarafından Filtreli", +Filters Display,Filtreler Ekranı, Filters JSON,JSON Filtreleri, Filters saved,Filtreler kaydedildi, Find {0} in {1},{0} Bul {1}, -First Level,İlk seviye, +First Level,İlk Seviye, First Success Message,İlk Başarı Mesajı, First Transaction,İlk işlem, First data column must be blank.,İlk veri sütunu boş olmalı., First set the name and save the record.,İlk önce ismi ayarlayın ve kaydı kaydedin., -Flag,bayrak, +Flag,Bayrak, Float,Float, -Float Precision,Float Precision, +Float Precision,Float Hassasiyeti, Fold,Kat, Fold can not be at the end of the form,Katlama formun sonundaki olamaz, Fold must come before a Section Break,Bir bölüm sonu önce gelmelidir Fold, Folder,Klasör, -Folder name should not include '/' (slash),Klasör adı '/' (eğik çizgi) içermemelidir., +Folder name should not include '/' (slash),Klasör adı '/' (eğik çizgi) içermemelidir., Folder {0} is not empty,Klasör {0} boş değil, Follow,Takip et, -Followed by,Bunu takiben, +Followed by,Takip eden, Following fields are missing:,Aşağıdaki alanlar eksik:, Following fields have missing values:,Aşağıdaki alanlar eksik değerler vardır:, Font,Yazı tipi, @@ -1148,15 +1155,15 @@ For example if you cancel and amend INV004 it will become a new document INV004- "For example: If you want to include the document ID, use {0}","Örneğin: Belge Kimliği eklemek istiyorsanız, kullanmak {0}", "For updating, you can update only selective columns.","Güncellenmesi için, sadece seçici sütunları güncelleyebilirsiniz.", For {0} at level {1} in {2} in row {3},Için {0} düzeyde {1} {2} tane üst üste {3}, -Force,Kuvvet, -Force Show,kuvvet göster, +Force,Zorla, +Force Show,Zorla göster, Forgot Password,Parolanızı mı unuttunuz, Forgot Password?,Parolanızı mı unuttunuz?, Form Customization,Form Özelleştirme, Form Settings,Form Ayarları, Format,Biçim, Format Data,Biçim Verileri, -Forward To Email Address,İleri E-posta Adresi, +Forward To Email Address,E-posta Adresine İlet, Fraction,Kesir, Fraction Units,Kesir Birimleri, Frames,Çerçeveler, @@ -1165,7 +1172,7 @@ Frappe Framework,Frappe Çerçeve, Friendly Title,Kullanıcı Dostu Başlık, From Date Field,Tarih Alanından, From Document Type,Belge Türünden, -From Full Name,Tam İsim, +From Full Name,Tam Adı, Full Page,Tam Sayfa, Fw: {0},İlt: {0}, GCalendar Sync ID,GCalendar Sync Kimliği, @@ -1187,7 +1194,7 @@ GitHub,GitHub, Give Review Points,İnceleme Puanı Ver, Global Unsubscribe,Küresel aboneliğini, Go to the document,Belgeye git, -Go to this URL after completing the form (only for Guest users),Formu tamamladıktan sonra bu URL'ye gidin (yalnızca Misafir kullanıcıları için), +Go to this URL after completing the form (only for Guest users),Formu tamamladıktan sonra bu URL'ye gidin (yalnızca Misafir kullanıcıları için), Go to {0},{0} adresine git, Go to {0} List,{0} Listeye Git, Go to {0} Page,{0} Sayfaya git, @@ -1196,7 +1203,7 @@ Google Analytics ID,Google Analytics Kimliği, Google Calendar ID,Google Takvim Kimliği, Google Font,Google Yazı Tipi, Google Services,Google Hizmetleri, -Grant Type,hibe Tipi, +Grant Type,Hibe Tipi, Group Name,Grup ismi, Group name cannot be empty.,Grup adı boş olamaz., Groups of DocTypes,Belgetürleri Grupları, @@ -1205,12 +1212,12 @@ HTML Editor,HTML Editör, "HTML Header, Robots and Redirects","HTML Üstbilgisi, Robotlar ve Yönlendirmeler", HTML for header section. Optional,Başlık bölüm için HTML. Opsiyonel, Half,Yarım, -Has Attachment,Ek Has, +Has Attachment,Eki Var, Has Attachments,Ekleri Var, Has Domain,Etki Alanı Var, -Has Role,Rol Has, +Has Role,Rolü var, Has Web View,Web Görünümü Has, -Have an account? Login,Hesabın var mı? Oturum aç, +Have an account? Login,"Hesabın var mı? Oturum aç", Header,Başlık, Header HTML,Başlık HTML, Header HTML set from attachment {0},{0} ekinden HTML başlık seti, @@ -1244,7 +1251,7 @@ Host,evsahibi, Hostname,Hostadı, "How should this currency be formatted? If not set, will use system defaults","Bu para birimi nasıl biçimlendirilmelidir? Ayarlanmamışsa, sistem varsayılanı kullanacaktır.", I found these: ,Bunları buldum:, -ID,İD, +ID,ID, ID (name) of the entity whose property is to be set,Özelliği ayarlanmalıdır varlık kimliği (adı), Icon will appear on the button,Simge düğmesi görünecektir, Identity Details,Kimlik Ayrıntıları, @@ -1254,21 +1261,21 @@ If Checked workflow status will not override status in list view,İşaretli iş If Owner,Sahibi ise, "If a Role does not have access at Level 0, then higher levels are meaningless.","Rol 0 düzeyinde erişimi yoksa, daha yüksek seviyeler anlamsızdır.", "If checked, all other workflows become inactive.","Eğer işaretli ise, diğer tüm iş akışları inaktif hale gelir.", -"If checked, this field will be not overwritten based on Fetch From if a value already exists.","İşaretlenirse, bir değer zaten mevcutsa, Get From From'a dayalı olarak bu alanın üzerine yazılmaz.", +"If checked, this field will be not overwritten based on Fetch From if a value already exists.","İşaretlenirse, bir değer zaten mevcutsa, Get From From'a dayalı olarak bu alanın üzerine yazılmaz.", "If checked, users will not see the Confirm Access dialog.","kontrol, kullanıcılar Onayla Erişim iletişimi bir daha görmezsiniz.", "If disabled, this role will be removed from all users.","devre dışı ise, bu rol tüm kullanıcılar kaldırılır.", -"If enabled, user can login from any IP Address using Two Factor Auth, this can also be set for all users in System Settings","Etkinleştirildiğinde, kullanıcı İki Faktör Kimlik Doğrulaması kullanarak herhangi bir IP Adresinden giriş yapabilir, bu, Sistem Ayarları'ndaki tüm kullanıcılar için de ayarlanabilir.", +"If enabled, user can login from any IP Address using Two Factor Auth, this can also be set for all users in System Settings","Etkinleştirildiğinde, kullanıcı İki Faktör Kimlik Doğrulaması kullanarak herhangi bir IP Adresinden giriş yapabilir, bu, Sistem Ayarları'ndaki tüm kullanıcılar için de ayarlanabilir.", "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","Etkinleştirilirse, tüm kullanıcılar Two Factor Auth kullanarak herhangi bir IP adresinden giriş yapabilirler. Bu, yalnızca Kullanıcı Sayfasındaki belirli kullanıcılar için de ayarlanabilir", "If enabled, changes to the document are tracked and shown in timeline","Etkinleştirilirse, belgede yapılan değişiklikler izlenir ve zaman çizelgesinde gösterilir.", "If enabled, document views are tracked, this can happen multiple times","Etkinleştirilirse, belge görünümleri izlenir, bu birkaç kez olabilir", "If enabled, the document is marked as seen, the first time a user opens it","Etkinleştirilirse, belge, kullanıcı ilk kez açtığında göründüğü gibi işaretlenir", -"If enabled, the password strength will be enforced based on the Minimum Password Score value. A value of 2 being medium strong and 4 being very strong.","Etkinleştirilirse, şifre kuvveti Minimum Şifre Puanı değerine dayanarak zorlanır. 2'lik bir değer orta derecede güçlü ve 4'ü çok güçlü.", -"If enabled, users who login from Restricted IP Address, won't be prompted for Two Factor Auth","Etkinleştirilmişse, Kısıtlı IP Adresi'nden giriş yapan kullanıcılar, İki Faktör Auth için istenmez", +"If enabled, the password strength will be enforced based on the Minimum Password Score value. A value of 2 being medium strong and 4 being very strong.","Etkinleştirilirse, şifre kuvveti Minimum Şifre Puanı değerine dayanarak zorlanır. 2'lik bir değer orta derecede güçlü ve 4'ü çok güçlü.", +"If enabled, users who login from Restricted IP Address, won't be prompted for Two Factor Auth","Etkinleştirilmişse, Kısıtlı IP Adresi'nden giriş yapan kullanıcılar, İki Faktör Auth için istenmez", "If enabled, users will be notified every time they login. If not enabled, users will only be notified once.","Etkinleştirilirse, kullanıcıların her eriştiklerinde bilgilendirilirler. Etkinleştirilmezse, kullanıcılar yalnızca bir kez bilgilendirilir.", If non standard port (e.g. 587),standart olmayan bağlantı noktası (örneğin 587), "If non standard port (e.g. 587). If on Google Cloud, try port 2525.",Standart olmayan port ise (örn. 587). Google Cloud’ta 2525 numaralı bağlantı noktasını deneyin., "If not set, the currency precision will depend on number format","Ayarlanmazsa, para birimi hassaslığı sayı formatına bağlı olacaktır", -If the condition is satisfied user will be rewarded with the points. eg. doc.status == 'Closed'\n,Koşul yerine getirilirse kullanıcı puanla ödüllendirilecektir. Örneğin. doc.status == 'Kapalı', +If the condition is satisfied user will be rewarded with the points. eg. doc.status == 'Closed'\n,Koşul yerine getirilirse kullanıcı puanla ödüllendirilecektir. Örneğin. doc.status == 'Kapalı', "If the user has any role checked, then the user becomes a ""System User"". ""System User"" has access to the desktop","Eğer bir kullanıcı için herhangi bir Rol seçildiyse, kullanıcı ""Sistem Kullanıcısı"" olur. ""Sistem Kullanıcısı"" masaüstüne erişim hakkına sahiptir.", "If these instructions where not helpful, please add in your suggestions on GitHub Issues.","Bu talimatlar burada yararlı değilse, GitHub konular üzerinde önerileri lütfen ekleyin.", "If this is checked, rows with valid data will be imported and invalid rows will be dumped into a new file for you to import later.","Bu işaretlenirse, geçerli verilere sahip satırlar içe aktarılır ve daha sonra içe aktarmanız için geçersiz satırlar yeni bir dosyaya dökülür.", @@ -1294,14 +1301,14 @@ Image field must be a valid fieldname,Resim Alamı geçerli bir alan adı olmal Image field must be of type Attach Image,"Resim Alanı ""Resim Ekle"" cinsinden bir alan olmalıdır", Images,Görüntüler, Implicit,üstü kapalı, -Import,İçe aktar, +Import,İçeri Aktar, Import Email From,E-postayı İçe Aktar, Import Status,İçe Aktarma Durumu, Import Subscribers,Aboneleri İçe Aktar, Import Zip,Zip Al, In Filter,Filtre, In Global Search,Küresel Ara, -In Grid View,Grid View, +In Grid View,Grid Görünüm, In Hours,Saatleri, In List View,Liste Görünümü, In Preview,Önizlemede, @@ -1325,27 +1332,27 @@ Info:,Bilgi:, Initial Sync Count,İlk Eşitleme Sayısı, InnoDB,InnoDB, Insert Above,Yukarı Ekle, -Insert After,Sonra ekle, +Insert After,Sonra Ekle, Insert After cannot be set as {0},Olarak ayarlanamaz sonra yerleştirin {0}, -"Insert After field '{0}' mentioned in Custom Field '{1}', with label '{2}', does not exist","alan '{0}' Özel Alan belirtilen sonra yerleştirin '{1}' etiketi ile '{2}', yok", -Insert Below,Aşağıda takın, +"Insert After field '{0}' mentioned in Custom Field '{1}', with label '{2}', does not exist","alan '{0}' Özel Alan belirtilen sonra yerleştirin '{1}' etiketi ile '{2}', yok", +Insert Below,Aşağı Ekle, Insert Column Before {0},{0} önündeki Sütun Ekle, Insert Style,Stil ekleme, Insert new records,Yeni kayıt ekle, Instructions Emailed,E-postayla gönderilen talimatlar, Insufficient Permission for {0},{0} için yetersiz izin, Int,Int, -Integration Request,entegrasyon Talebi, +Integration Request,Entegrasyon Talebi, Integration Request Service,Entegrasyon Talep Hizmet, -Integration Type,entegrasyon Tipi, -Integrations,Entegrasyonları, +Integration Type,Entegrasyon Tipi, +Integrations,Entegrasyonlar, Integrations can use this field to set email delivery status,Entegrasyonlar e-posta dağıtım durumunu ayarlamak için bu alanı kullanabilirsiniz, Internal Server Error,İç Sunucu Hatası, Internal record of document shares,Belge hisse İç rekor, Introduce your company to the website visitor.,Web sitesi ziyaretçi için şirketinizi tanıtın, Introductory information for the Contact Us Page,İletişim Sayfası için gerekli bilgiler, Invalid,Geçersiz, -"Invalid ""depends_on"" expression",Geçersiz "depends_on" ifadesi, +"Invalid ""depends_on"" expression",Geçersiz 'depends_on' ifadesi, Invalid Access Key ID or Secret Access Key.,Geçersiz Erişim Tuş Kimliği veya Gizli Erişim Tuşu., Invalid CSV Format,Geçersiz CSV Biçimi, Invalid Home Page,Geçersiz Ana Sayfa, @@ -1364,7 +1371,7 @@ Invalid Token,Geçersiz Jetonu, Invalid User Name or Support Password. Please rectify and try again.,Geçersiz Kullanıcı Adı veya ޞifre Destek. Lütfen Düzeltin ve tekrar deneyin., Invalid column,Geçersiz sütun, Invalid field name {0},Geçersiz alan adı {0}, -Invalid fieldname '{0}' in autoname,autoname geçersiz AlanAdı '{0}', +Invalid fieldname '{0}' in autoname,autoname geçersiz AlanAdı '{0}', Invalid file path: {0},Geçersiz dosya yolu: {0}, Invalid login or password,Geçersiz giriş ya da şifre, Invalid module path,Geçersiz modül yolu, @@ -1373,29 +1380,30 @@ Invalid payment gateway credentials,Geçersiz ödeme ağ geçidi kimlik bilgiler Invalid recipient address,Geçersiz alıcı adresi, Invalid {0} condition,Geçersiz {0} durumu, Inverse,Ters, -Is,Mı, -Is Attachments Folder,Ekler Klasör mı, +Installed Apps,Kurulan Uygulamalar, +Is,Is, +Is Attachments Folder,Ekler Klasörü mü, Is Child Table,Alt tablo mu, -Is Custom Field,Özel Alan mi, +Is Custom Field,Özel Alan mı, Is First Startup,İlk Başlangıç mı, -Is Folder,Klasör mı, -Is Global,Küresel mi, +Is Folder,Klasör mü, +Is Global,Genel mi, Is Globally Pinned,Global olarak sabitlenmiş, -Is Home Folder,Home Folder mı, +Is Home Folder,Ana Klasör mü, Is Mandatory Field,Zorunlu Alan mi, Is Pinned,Sabitlendi, Is Primary Contact,Birincil İrtibat, Is Private,Özel mi, -Is Published Field,Alan Yayın mi, -Is Published Field must be a valid fieldname,Saha gerekir Yayın geçerli bir AlanAdı olmak, +Is Published Field,Alan Yayınlandı mı, +Is Published Field must be a valid fieldname,Yayınlandı Alan geçerli bir alan adı olmalıdır, Is Single,Tek mi, Is Spam,Spam mı, Is Standard,Standart mı, -Is Submittable,Submittable mi, +Is Submittable,Gönderilebilir mi, Is Table,Tablo mu, Is Your Company Address,Firmanız Adresi, It is risky to delete this file: {0}. Please contact your System Manager.,Bu dosyayı silmek için riskli: {0}. Sistem Yöneticisi irtibata geçiniz., -Item cannot be added to its own descendants,"Ürün, kendi soyundan ilave edilemez", +Item cannot be added to its own descendents,"Ürün, kendi soyundan ilave edilemez", JS,JS, JSON,JSON, JavaScript Format: frappe.query_reports['REPORTNAME'] = {},JavaScript Format: frappe.query_reports ['ReportName'] = {}, @@ -1403,19 +1411,19 @@ Javascript to append to the head section of the page.,Javascript sayfasının ba Jinja,Jinja, John Doe,John Doe, Kanban,Kanban, -Kanban Board Column,Kanban Kurulu Sütun, -Kanban Board Name,Kanban Bölüm İsmi, +Kanban Board Column,Kanboard Sütun, +Kanban Board Name,Kanboard Adı, Karma,Karma, Keep track of all update feeds,Tüm güncelleme akışlarını takip et, Keeps track of all communications,Tüm iletişimlerin kaydını tutar, Key,Anahtar, -Knowledge Base,Bilgi tabanı, -Knowledge Base Contributor,Bilgi Bankası Katılımcı, -Knowledge Base Editor,Bilgi Bankası Editör, +Knowledge Base,Bilgi Bankası, +Knowledge Base Contributor,Bilgi Bankası Katılımcısı, +Knowledge Base Editor,Bilgi Bankası Editörü, LDAP Email Field,LDAP E-posta Alan, LDAP First Name Field,LDAP Ad Alanı, LDAP Not Installed,LDAP Yüklü Değil, -LDAP Search String,LDAP Arama Dize, +LDAP Search String,LDAP Arama Dizesi, "LDAP Search String needs to end with a placeholder, eg sAMAccountName={0}","LDAP Arama Dizgisinin bir yer tutucu ile bitmesi gerekiyor, örn. SAMAccountName = {0}", LDAP Security,LDAP Güvenliği, LDAP Server Url,LDAP Sunucusu URL, @@ -1434,18 +1442,18 @@ Last Known Versions,Son Bilinen Sürümleri, Last Login,Son Giriş, Last Message,Son Mesaj, Last Modified By,Son Değiştiren, -Last Modified Date,Son Değiştirilen Tarih, -Last Modified On,Son olarak Modifiye, -Last Month,Geçen ay, +Last Modified Date,Son Değiştirilme Tarihi, +Last Modified On,Son Değiştirilme, +Last Month,Geçen Ay, Last Point Allocation Date,Son Nokta Tahsis Tarihi, -Last Quarter,Son çeyrek, +Last Quarter,Son Çeyrek, Last Synced On,Son Senkronize Açık, -Last Updated By,Son Güncelleme tarafından, -Last Updated On,Son olarak Güncelleme, -Last User,Son kullanıcı, -Last Week,Geçen hafta, -Last Year,Geçen yıl, -Last synced {0},Son senkronizasyon {0}, +Last Updated By,Son Güncelleyen, +Last Updated On,Son Güncelleme Tarihi, +Last User,Son Kullanıcı, +Last Week,Geçen Hafta, +Last Year,Geçen Yıl, +Last synced {0},Son eşitleme {0}, Leave a Comment,Yorum Yap, Leave blank to repeat always,Her zaman tekrarlamak için boş bırakın, Leave this conversation,Bu konuşmayı bırakın, @@ -1455,50 +1463,52 @@ Length of {0} should be between 1 and 1000,{0} uzunluğu 1 ile 1000 arasında ol Let's avoid repeated words and characters,tekrarlanan kelimeleri ve karakterleri önlemek edelim, Let's prepare the system for first use.,Ilk kullanım için sistemi hazırlamak edelim., Letter,Mektup, -Letter Head Based On,Temelli Mektup Başlığı, -Letter Head Image,Letter Head Görüntüsü, +Letter Head Based On,Mektup Başlığına göre, +Letter Head Image,Antet Resmi, Letter Head Name,Antet Adı, -Letter Head in HTML,HTML Mektubu Başkanı, +Letter Head in HTML,HTML Mektup Başlığı, Level Name,Seviye Adı, Liked,Beğendim, -Liked By,By Beğendim, -Liked by {0},Tarafından Beğendim {0}, +Liked By,Beğenen, +Liked by {0},{0} tarafından Beğenildi, Likes,Beğeniler, Limit Number of DB Backups,DB Yedeklemelerinin Sınırı Sayısı, Line,Hat, -Link DocType,bağlantı DocType, +Link DocType,Bağlantı DocType, Link Expired,Bağlantı Süresi Doldu, -Link Name,bağlantı Adı, -Link Title,link Title, +Link Name,Bağlantı Adı, +Link Title,Bağlantı Başlığı, "Link that is the website home page. Standard Links (index, login, products, blog, about, contact)","Bu web sitesi ana sayfası bağlantı. Standart Linkler (indeks, giriş, ürünleri, blog, hakkında, iletişim)", Link to the page you want to open. Leave blank if you want to make it a group parent.,Açmak istediğiniz sayfaya bağlantı. Eğer bir grup ebeveyn yapmak istiyorsanız boş bırakın., Linked,Bağlantılı, -Linked With,Ile Bağlantılı, +Linked With,İle Bağlantılı, Linked with {0},{0} ile bağlantılı, Links,Bağlantılar, List,Liste, +List View,Liste Görünümü, List Filter,Liste Filtresi, -List View Setting,Liste Görünümü Ayarı, +List View Setting,Liste Görünüm Ayarı, List a document type,Bir belge türü Liste, -"List as [{""label"": _(""Jobs""), ""route"":""jobs""}]","[{: _ ( "İşler"), "rota": "işler" "etiketi"}] olarak Listesi", +"List as [{""label"": _(""Jobs""), ""route"":""jobs""}]","[{: _ ( 'İşler'), 'rota': 'işler' 'etiketi'}] olarak Listesi", List of backups available for download,İndirilebilir yedeklerin listesi, List of patches executed,Yamalar listesi idam, List of themes for Website.,Web sitesi için temalar listesi., -Load Balancing,Yük dengeleme, -Loading,Yükleme, -Local DocType,Yerel DocType, +Load Balancing,Yük Dengeleme, +Loading,Yükleniyor, +Loading versions...,Sürümler Yükleniyor... +Local DocType,Yerel Belge Türü, Local Fieldname,Yerel Alan Adı, Local Primary Key,Yerel İlköğretim Anahtarı, -Locals,Yerliler, +Locals,Yerel, Log Details,Günlük Ayrıntıları, Log of Scheduler Errors,Zamanlayıcı Hatalar Giriş, Log of error during requests.,Istekleri sırasında hata yapın., Log of error on automated events (scheduler).,Otomatik olaylar (zamanlayıcı) hakkında hata açın., Logged Out,Çıkış yapıldı, Logged in as Guest or Administrator,Misafir veya Yönetici olarak oturum, -Login,Giriş, -Login After,Sonra yap, -Login Before,Önce Giriş, +Login,Oturum aç, +Login After,Sonra Giriş Yap, +Login Before,Önce Giriş yap, Login Id is required,Giriş Kimliği gerekli, Login Required,Giriş Gerekli, Login Verification Code from {},{} Adresinden Giriş Doğrulama Kodu, @@ -1514,8 +1524,8 @@ Looks like something is wrong with this site's Paypal configuration.,Görünüş Looks like something is wrong with this site's payment gateway configuration. No payment has been made.,Görünüşe göre bu sitenin ödeme ağ geçidi yapılandırması ile ilgili bir sorun var. Herhangi bir ödeme yapılmadı., "Looks like something went wrong during the transaction. Since we haven't confirmed the payment, Paypal will automatically refund you this amount. If it doesn't, please send us an email and mention the Correlation ID: {0}.","bir şey işlemi sırasında yanlış gitti gibi görünüyor. Biz ödeme onaylandıktan değil çünkü, Paypal otomatik olarak bu miktarı iade edecektir. Aksi takdirde, bize bir e-posta göndermek ve Korelasyon kimliğini belirtiniz: {0}.", Madam,madam, -Main Section,Ana bölüm, -"Make ""name"" searchable in Global Search",Küresel Ara arama yapılabilsin "ad", +Main Section,Ana Bölüm, +"Make ""name"" searchable in Global Search",Küresel Ara arama yapılabilsin 'ad', Make use of longer keyboard patterns,uzun klavye desen yararlanın, Manage Third Party Apps,Üçüncü Taraf Uygulamalarını Yönetin, Mandatory Information missing:,Eksik zorunlu bilgiler:, @@ -1541,7 +1551,7 @@ Max width for type Currency is 100px in row {0},Para için maksimum genişlik 10 Maximum Attachment Limit for this record reached.,Bu kayıt için maksimum Ek Sınırı ulaştı., Maximum {0} rows allowed,Maksimum {0} satıra izin verildi, "Meaning of Submit, Cancel, Amend",Arasında Gönder İptal Amend Anlamı, -Mention transaction completion page URL,işlem tamamlama sayfası URL'sini Mansiyon, +Mention transaction completion page URL,işlem tamamlama sayfası URL'sini Mansiyon, Mentions,Mansiyonlar, Menu,Menü, Merchant ID,Tüccar kimliği, @@ -1560,14 +1570,15 @@ Migration ID Field,Taşıma Kimliği Alanı, Milestone,Aşama, Milestone Tracker,Kilometre Taşı İzleyici, Minimum Password Score,Minimum Şifre Puanı, -Miss,bayan, +Miss,Bayan, Missing Fields,Eksik Alanları, Missing parameter Kanban Board Name,Kanban Board Name eksik parametre, Missing parameters for login,Giriş için eksik parametreler, Models (building blocks) of the Application,Uygulama Modelleri (yapı taşları), Modified By,Tarafından tasarlandı, -Module,modül, -Module Def,Modül Def, +Module,Modül, +Module Profile,Modül Profili, +Module Def,Modül Tanımları, Module Name,Modül Adı, Module Not Found,Modül Bulunamadı, Module Path,Modül Yolu, @@ -1577,7 +1588,7 @@ Monospace,Monospace, More articles on {0},Daha makaleler {0}, More content for the bottom of the page.,Sayfanın altında daha fazla içerik., Most Used,En çok kullanılan, -Move To,Taşınmak, +Move To,Taşı, Move To Trash,Çöp kutusuna taşıyın, Move to Row Number,Satır Numarasına Taşı, Mr,Bay, @@ -1606,9 +1617,9 @@ New Chat,Yeni sohbet, New Comment on {0}: {1},{0} Üzerine Yeni Yorum: {1}, New Connection,Yeni Bağlantı, New Custom Print Format,Yeni Özel Baskı Biçimi, -New Email,yeni e-posta, +New Email,Yeni E-posta, New Email Account,Yeni E-posta Hesabı, -New Event,Yeni etkinlik, +New Event,Yeni Etkinlik, New Folder,Yeni dosya, New Kanban Board,Yeni Kanban Kurulu, New Message from Website Contact Page,Web sitesi İletişim Sayfasından Yeni İleti, @@ -1625,7 +1636,7 @@ New value to be set,Ayarlanacak Yeni değer, New {0},Yeni {0}, New {} releases for the following apps are available,Aşağıdaki uygulamalar için yeni {} sürümler kullanıma sunuldu, Newsletter Email Group,Bülten E-posta Grubu, -Newsletter Manager,Bülten Müdürü, +Newsletter Manager,Bülten Yöneticisi, Newsletter has already been sent,Bülten zaten gönderildi, "Newsletters to contacts, leads.","İrtibatlara, müşterilere bülten", Next Action Email Template,Sonraki Eylem E-posta Şablonu, @@ -1636,7 +1647,7 @@ Next State,Next State, Next Sync Token,Sonraki Senkronizasyon Jetonu, Next actions,Sonraki eylemler, No Active Sessions,Etkin Oturum Yok, -No Copy,No Copy, +No Copy,Kopya yok, No Email Account,E-posta Yok Hesabı, No Email Accounts Assigned,E-posta Hesabı Atanan, No Emails,hiçbir e-postalar, @@ -1646,14 +1657,14 @@ No Permissions set for this criteria.,No Permissions set for this criteria., No Preview,Önizleme yok, No Preview Available,Önizleme Yok, No Printer is Available.,Yazıcı Yok., -No Results,No Sonuçları, -No Tags,hiçbir Etiketler, +No Results,Sonuç yok, +No Tags,Etiket yok, No alerts for today,Bugün için uyarı yok, -No comments yet,henüz yorum yok, +No comments yet,Yorum yok, No comments yet. Start a new discussion.,Henüz yorum yok. Yeni bir tartışma başlat., No data found in the file. Please reattach the new file with data.,Dosyada veri bulunamadı. Lütfen yeni dosyayı veri ile yeniden bağlayın., No document found for given filters,Verilen filtreler için hiçbir doküman bulunamadı, -"No fields found that can be used as a Kanban Column. Use the Customize Form to add a Custom Field of type ""Select"".",Kanban sütunu olarak kullanılabilecek alan bulunamadı. "Seç" tipi bir Özel Alan eklemek için Özelleştir Formunu kullanın., +"No fields found that can be used as a Kanban Column. Use the Customize Form to add a Custom Field of type ""Select"".",Kanban sütunu olarak kullanılabilecek alan bulunamadı. 'Seç' tipi bir Özel Alan eklemek için Özelleştir Formunu kullanın., No file attached,Ekli dosya yok, No further records,Başka bir kayıt, No matching records. Search something new,Eşleşen kayıtları. Yeni bir şey ara, @@ -1670,19 +1681,19 @@ No records present in {0},{0} içinde hiç kayıt yok, No records tagged.,Hiç bir kayıt etiketlenmedi., No template found at path: {0},Yolda bulunamadı şablon: {0}, No {0} found,Gösterilecek {0} bulunamadı, -No {0} mail,Hayır {0} posta, +No {0} mail,Hiç {0} posta yok, No {0} permission,{0} izni yok, None: End of Workflow,Hiçbiri: İş Akışı sonu, Not Allowed: Disabled User,İzin Verilmedi: Engelli Kullanıcı, Not Ancestors Of,Ataları değil, Not Descendants Of,Torunları değil, -Not Equals,Eşit değildir, -Not In,Değil ise, +Not Equals,Eşit değil, +Not In,İçinde geçen değil, Not Linked to any record,Herhangi bir rekorla bağlantılı değil, Not Published,Yayınlandı değil, Not Saved,Kaydedilmedi, Not Seen,Görmedim, -Not Sent,Gönderilen Değil, +Not Sent,Gönderilmedi, Not Set,Ayarlanmadı, Not a valid Comma Separated Value (CSV File),Geçerli bir Virgülle Ayrılmış Değer (CSV Dosyası), Not a valid User Image.,Geçerli bir Kullanıcı Resmi değil., @@ -1690,8 +1701,8 @@ Not a valid Workflow Action,Geçerli bir İş Akışı Eylemi değil, Not a valid user,Geçerli bir kullanıcı, Not a zip file,Değil bir zip dosyası, Not allowed for {0}: {1},{0} için izin verilmiyor: {1}, -"You are not allowed to access {0} because it is linked to {1} '{2}' in row {3}, field {4}","{0} erişmek için izniniz yok, çünkü {3} satırında {1} '{2}' bağlıdır, alan {4}", -You are not allowed to access this {0} record because it is linked to {1} '{2}' in field {3},"Bu {0} kaydına erişmek için izniniz yok, çünkü alan {3} {1} '{2}' bağlıdır", +Not allowed for {0}: {1} in Row {2}. Restricted field: {3},{2} satırında {0}: {1} için izin verilmez. Sınırlı alan: {3}, +Not allowed for {0}: {1}. Restricted field: {2},{0} için izin verilmiyor: {1}. Sınırlı alan: {2}, Not allowed to Import,İçe Aktarıma izin verilmiyor, Not allowed to change {0} after submission,Sunulmasından sonra {0} değiştirmek için izin verilmez, Not allowed to print cancelled documents,İptal edilmiş dokümanlar yazdırılamaz, @@ -1702,13 +1713,13 @@ Not in Developer Mode! Set in site_config.json or make 'Custom' DocType.,Değil Note Seen By,By Görülme Not, Note:,Not:, Note: By default emails for failed backups are sent.,"Not: Varsayılan olarak, başarısız yedeklemeler için e-postalar gönderilir.", -Note: Changing the Page Name will break previous URL to this page.,Not: Sayfa Adını değiştirmek önceki URL'yi bu sayfaya ayıracaktır., +Note: Changing the Page Name will break previous URL to this page.,Not: Sayfa Adını değiştirmek önceki URL'yi bu sayfaya ayıracaktır., "Note: For best results, images must be of the same size and width must be greater than height.",Not: En iyi sonucu elde etmek için görüntüler aynı boyutta olmalı ve genişlik yükseklikten büyük olmalıdır., Note: Multiple sessions will be allowed in case of mobile device,Not: Birden fazla seans mobil cihazın durumunda izin verilecek, Nothing to show,Gösterilecek bir şey yok, Nothing to update,Güncellenecek bir şey yok, -Notification,tebliğ, -Notification Recipient,Bildirim Alıcı, +Notification,Bildirim, +Notification Recipient,Bildirim Alıcısı, Notification Tones,Bildirim Zilleri, Notifications,Bildirimler, Notifications and bulk mails will be sent from this outgoing server.,Bildirimler ve toplu postalar bu giden sunucudan gönderilir., @@ -1719,7 +1730,7 @@ Notify users with a popup when they log in,oturum açtıklarında bir pop-up ile Number Format,Sayı Biçimi, Number of Backups,Yedeklemeler sayısı, Number of DB Backups,DB Yedekleme Sayısı, -Number of DB backups cannot be less than 1,DB yedeklerinin sayısı 1'den az olamaz, +Number of DB backups cannot be less than 1,DB yedeklerinin sayısı 1'den az olamaz, Number of columns for a field in a Grid (Total Columns in a grid should be less than 11),bir kılavuz bir alan için sütun sayısı (bir ızgarada Toplam Sütunlar az 11 olmalıdır), Number of columns for a field in a List View or a Grid (Total Columns should be less than 11),Bir Liste Görünümü veya bir kılavuz bir alan için sütun sayısı (Toplam Sütunlar az 11 den olmalıdır), OAuth Authorization Code,OAuth Yetki Kodu, @@ -1738,7 +1749,7 @@ Older backups will be automatically deleted,Eski yedekleri otomatik olarak silin "On {0}, {1} wrote:","{0} üzerinde, {1} yazdı:", "Once submitted, submittable documents cannot be changed. They can only be Cancelled and Amended.",Gönderildikten sonra gönderilebilir belgeler değiştirilemez. Sadece İptal Edilebilir ve Değiştirilebilirler., "Once you have set this, the users will only be able access documents (eg. Blog Post) where the link exists (eg. Blogger).","Bunu ayarladıktan sonra, kullanıcılar sadece mümkün erişim belgeler (örn. olacak Bağlantı var Blog Post) (örn. Blogger).", -One Last Step,One Last Step, +One Last Step,Son Bir Adım, One Time Password (OTP) Registration Code from {},Bir Zamanlı Parola (OTP) Kayıt Kodu {}, Only 200 inserts allowed in one request,Sadece 200 ekler tek isteği izin, Only Administrator can delete Email Queue,Sadece yönetici E-posta Kuyruğu silebilirsiniz, @@ -1757,11 +1768,11 @@ Open Link,Açık Bağlantı, Open Source Applications for the Web,Web Açık Kaynak Uygulamaları, Open Translation,Çeviri Açık, Open a dialog with mandatory fields to create a new record quickly,Hızlı bir şekilde yeni bir kayıt oluşturmak için zorunlu alanlarla bir iletişim kutusu açın, -Open a module or tool,Bir modül veya aracı açmak, +Open a module or tool,Bir modül veya aracı aç, Open your authentication app on your mobile phone.,Kimlik doğrulama uygulamanızı cep telefonunuzdan açın., -Open {0},Open {0}, +Open {0},{0} Aç, Opened,Açılmış, -Operator must be one of {0},Operatör {0} 'dan biri olmalı, +Operator must be one of {0},Operatör {0} 'dan biri olmalı, Option 1,Seçenek 1, Option 2,Seçenek 2, Option 3,Seçenek 3, @@ -1771,7 +1782,7 @@ Options 'Dynamic Link' type of field must point to another Link Field with optio Options Help,Yardım Seçenekleri, Options for select. Each option on a new line.,Select için seçenekler. Yeni bir satırda her seçenek., Options not set for link field {0},Seçenekleri link alanına ayarlı değil {0}, -Or login with,Ya ile giriş, +Or login with,veya bununla giriş yap, Order,Sipariş, Org History,Org Tarihçe, Org History Heading,Org Tarih Başlık, @@ -1785,7 +1796,7 @@ PDF Page Size,PDF Sayfa Boyutu, PDF Settings,PDF Ayarları, PDF generation failed,PDF oluşturma başarısız oldu, PDF generation failed because of broken image links,PDF oluşturma nedeniyle kırık görüntü bağlantıları başarısız, -"PDF printing via ""Raw Print"" is not yet supported. Please remove the printer mapping in Printer Settings and try again.","Raw Print" ile PDF yazdırma henüz desteklenmiyor. Lütfen Yazıcı Ayarlarını Yazıcı Ayarları'ndan kaldırın ve tekrar deneyin., +"PDF printing via ""Raw Print"" is not yet supported. Please remove the printer mapping in Printer Settings and try again.",'Raw Print' ile PDF yazdırma henüz desteklenmiyor. Lütfen Yazıcı Ayarlarını Yazıcı Ayarları'ndan kaldırın ve tekrar deneyin., Page HTML,Sayfa HTML, Page Length,Sayfa Uzunluğu, Page Name,Sayfa Adı, @@ -1804,8 +1815,8 @@ Partial Success,Kısmi Başarı, Partially Successful,Kısmen Başarılı, Participants,Katılımcılar, Passive,Pasif, -Password Reset,Parola sıfırlama, -Password Updated,Şifre Güncelleme, +Password Reset,Şifreyi Sıfırla, +Password Updated,Şifre Güncellendi, Password for Base DN,Baz DN için şifre, Password is required or select Awaiting Password,Şifre gerekli veya Bekleniyor Parola seçmektir, Password not found,Şifre bulunamadı, @@ -1863,12 +1874,12 @@ Please do not change the template headings.,Şablon başlıkları değiştirmek Please duplicate this to make changes,Değişikliğin uygulanması için Lütfen bu öğeyi çoğaltın, Please enable developer mode to create new connection,Lütfen yeni bağlantı oluşturmak için geliştirici modunu etkinleştirin, Please ensure that your profile has an email address,Profil E-posta adresi olduğundan emin olun, -Please enter Access Token URL,Lütfen Erişim Simgesi URL'si girin, -Please enter Authorize URL,Lütfen URL'yi Yetkilendirin girin, -Please enter Base URL,Lütfen Temel URL'yi girin, +Please enter Access Token URL,Lütfen Erişim Simgesi URL'si girin, +Please enter Authorize URL,Lütfen URL'yi Yetkilendirin girin, +Please enter Base URL,Lütfen Temel URL'yi girin, Please enter Client ID before social login is enabled,Sosyal giriş etkinleştirilmeden önce lütfen Müşteri Kimliğini girin, Please enter Client Secret before social login is enabled,Sosyal giriş etkinleştirilmeden önce Müşteri Sırrını giriniz, -Please enter Redirect URL,Lütfen Yönlendirme URL'sini girin, +Please enter Redirect URL,Lütfen Yönlendirme URL'sini girin, Please enter the password,şifrenizi giriniz, Please enter valid mobile nos,Lütfen Geçerli bir cep telefonu numarası giriniz, Please enter values for App Access Key and App Secret Key,Uygulama Erişim Anahtarı ve App Gizli Key değerlerini girin, @@ -1881,23 +1892,23 @@ Please save the document before assignment,Atama öncesi belgeyi saklayınız, Please save the document before removing assignment,Atama çıkarmadan önce belgeyi saklayınız, Please save the report first,İlk raporu kaydetmek Lütfen, Please select DocType first,İlk DOCTYPE seçiniz, -Please select Entity Type first,Lütfen önce Varlık Türü'nü seçin, +Please select Entity Type first,Lütfen önce Varlık Türü'nü seçin, Please select Minimum Password Score,Lütfen Minimum Şifre Puanını seçin, Please select a Amount Field.,Bir Tutar alanı seçiniz., Please select a file or url,Bir dosya veya url seçiniz, Please select a new name to rename,Lütfen yeniden adlandırmak için yeni bir ad seçin, Please select a valid csv file with data,Veri içeren geçerli bir csv dosyası seçiniz, -Please select another payment method. PayPal does not support transactions in currency '{0}',başka bir ödeme yöntemi seçin. PayPal '{0}' para biriminde yapılan işlemleri desteklemez, -Please select another payment method. Razorpay does not support transactions in currency '{0}',başka bir ödeme yöntemi seçin. Razorpay '{0}' para biriminde yapılan işlemleri desteklemez, +Please select another payment method. PayPal does not support transactions in currency '{0}',başka bir ödeme yöntemi seçin. PayPal '{0}' para biriminde yapılan işlemleri desteklemez, +Please select another payment method. Razorpay does not support transactions in currency '{0}',başka bir ödeme yöntemi seçin. Razorpay '{0}' para biriminde yapılan işlemleri desteklemez, Please select atleast 1 column from {0} to sort/group,{0} sıralamak / gruptan en az 1 sütun seçin, Please select document type first.,Lütfen önce doküman tipini seçiniz., -Please select the Document Type.,Lütfen Belge Türü'nü seçin., -Please set Base URL in Social Login Key for Frappe,Lütfen Frappe için Sosyal Oturum Açma Anahtarında Temel URL'yi ayarlayın, +Please select the Document Type.,Lütfen Belge Türü'nü seçin., +Please set Base URL in Social Login Key for Frappe,Lütfen Frappe için Sosyal Oturum Açma Anahtarında Temel URL'yi ayarlayın, Please set Dropbox access keys in your site config,Lütfen site yapılandırmanızda Dropbox erişim anahtarı ayarlayınız, Please set a printer mapping for this print format in the Printer Settings,Lütfen bu yazdırma formatı için Yazıcı Ayarlarında bir yazıcı eşlemesi ayarlayın, Please set filters,Filtreleri ayarlayın Lütfen, Please set filters value in Report Filter table.,Rapor Filtresi tabloda filtreler değerini ayarlayın., -"Please setup SMS before setting it as an authentication method, via SMS Settings","Lütfen, SMS Ayarları aracılığıyla bir kimlik doğrulama yöntemi olarak ayarlamadan önce SMS'i kurun.", +"Please setup SMS before setting it as an authentication method, via SMS Settings","Lütfen, SMS Ayarları aracılığıyla bir kimlik doğrulama yöntemi olarak ayarlamadan önce SMS'i kurun.", Please setup a message first,Lütfen önce bir mesaj kurun, Please specify which date field must be checked,Kontrol edilmesi gereken tarih alanı belirtiniz, Please specify which value field must be checked,Değer alanı kontrol edilmesi gerektiği belirtiniz, @@ -1919,7 +1930,7 @@ Posts by {0},Tarafından Mesaj {0}, Posts filed under {0},Filed under Mesajlar {0}, Precision,Hassas, Precision should be between 1 and 6,Hassas 1 ile 6 arasında olmalıdır, -Predictable substitutions like '@' instead of 'a' don't help very much.,Öngörülebilir gibi değiştirmeler '@' yerine '' çok fazla yardımcı olmamaktadır., +Predictable substitutions like '@' instead of 'a' don't help very much.,Öngörülebilir gibi değiştirmeler '@' yerine '' çok fazla yardımcı olmamaktadır., Preferred Billing Address,Tercih edilen Fatura Adresi, Preferred Shipping Address,Tercih edilen Teslimat Adresi, Prepared Report,Hazırlanmış Rapor, @@ -1939,8 +1950,8 @@ Print Format {0} is disabled,Baskı Biçimi {0} devre dışı, Print Hide,Gizle Yazdır, Print Hide If No Value,Baskı gizle Hayır Değer, Print Sent to the printer!,Yazdır Yazıcıya gönderildi!, -Print Server,Yazdırma Sunucusu, -Print Style,Yazdırma Stili, +Print Server,Baskı Sunucusu, +Print Style,Baskı Stili, Print Style Name,Baskı Stili Adı, Print Style Preview,Baskı Önizleme Stil, Print Width,Baskı Genişliği, @@ -1956,7 +1967,7 @@ Private and public Notes.,Özel ve kamu Notları., ProTip: Add Reference: {{ reference_doctype }} {{ reference_name }} to send document reference,ProTip: Ekle Reference: {{ reference_doctype }} {{ reference_name }} göndermek için doküman referansı, Processing,İşleme, Processing...,İşleme..., -Prof,profesör, +Prof,Prof, Progress,İlerleme, Property Setter,Özellik Belirleyici, Property Setter overrides a standard DocType or Field property,Mülkiyet Setter standart DOCTYPE veya Saha özelliğini geçersiz kılar, @@ -1969,12 +1980,12 @@ Published On,Yayınlandı, Pull,Çek, Pull Failed,Çekin Başarısız Oldu, Pull Insert,Çekme Uç, -Pull Update,Güncelleme Çek, +Pull Update,Pull Update, Push,it, Push Delete,Sil tuşuna basın, Push Failed,İtem Başarısız Oldu, -Push Insert,Ekle'yi itin, -Push Update,Güncelleştir'e Bas, +Push Insert,Ekle'yi itin, +Push Update,Güncelleştir'e Bas, Python Module,Python Modülü, Pyver,Pyver, QR Code,QR kod, @@ -2001,7 +2012,7 @@ Read,Okundu, Read Only,Salt Okunur, Read by Recipient,Alıcıya Göre Oku, Read by Recipient On,Alıcının Açık Oku, -Rebuild,yeniden inşa etmek, +Rebuild,Rebuild, Receiver Parameter,Alıcı Parametre, Recent years are easy to guess.,Son yıllarda tahmin etmek kolaydır., Recipient,Alıcı, @@ -2010,7 +2021,7 @@ Record does not exist,Kaydı yok, Records for following doctypes will be filtered,Aşağıdaki doktrinler için kayıtlar filtrelenecek, Redirect To,To yönlendir, Redirect URI Bound To Auth Code,URI Kimlik Doğrulama Kodu için Bound REDIRECT_PATH, -Redirect URIs,URI'ları yönlendir, +Redirect URIs,URI'ları yönlendir, Redis cache server not running. Please contact Administrator / Tech support,Redis önbellek sunucusu çalışmıyor. Yönetici / Teknik desteğe başvurun, Ref DocType,Ref DocType, Ref Report DocType,Ref Rapor DocType, @@ -2023,10 +2034,10 @@ Register OAuth Client App,OAuth İstemci App Kayıt Ol, Registered but disabled,Tescil edilmiş ancak engelli, Relapsed,Nüks, Relapses,Relapslar, -Relink,yeniden bağlama, +Relink,Yeniden bağla, Relink Communication,Yeniden Bağla Haberleşme, -Relinked,yeniden bağlandı, -Reload,Yeniden yükle, +Relinked,Yeniden bağlandı, +Reload,Yeniden Yükle, Remember Last Selected Value,Son Seçilmiş Değer hatırla, Remote,uzak, Remote Fieldname,Uzak Alan Adı, @@ -2047,8 +2058,8 @@ Repeat On,Tekrar açık, Repeat Till,Till tekrarlayın, Repeat on Day,Günde tekrarlayın, Repeat this Event,Bu olay tekrarlayın, -"Repeats like ""aaa"" are easy to guess","Aaa" gibi tekrarlar tahmin etmek kolaydır, -"Repeats like ""abcabcabc"" are only slightly harder to guess than ""abc""","Abcabcabc" sadece biraz zor "abc" den tahmin gibi tekrarlar, +"Repeats like ""aaa"" are easy to guess",'aaa' gibi tekrarları tahmin etmek kolaydır, +"Repeats like ""abcabcabc"" are only slightly harder to guess than ""abc""",'Abcabcabc' sadece biraz zor 'abc' den tahmin gibi tekrarlar, Reply,Cevapla, Reply All,Hepsini cevapla, Report End Time,Bitiş Zamanı Bildir, @@ -2071,42 +2082,42 @@ Request URL,URL isteğinde bulun, Require Trusted Certificate,Güvenilir Sertifika İste, Res: {0},Res: {0}, Reset OTP Secret,OTP Anahtarını Sıfırla, -Reset Password,Parola Sıfırlama, -Reset Password Key,Şifre Key Reset, -Reset Permissions for {0}?,{0} için İzinlerini Sıfırla?, -Reset to defaults,Varsayılan sıfırla, +Reset Password,Şifreyi Sıfırla, +Reset Password Key,Şifre Anahtarını Sıfırla, +Reset Permissions for {0}?,{0} için İzinleri Sıfırla?, +Reset to defaults,Varsayılana Sıfırla, Reset your password,Şifrenizi sıfırlayın, -Response Type,tepki Türü, -Restore,Restore, +Response Type,Yanıt Türü, +Restore,Geri yükle, Restore Original Permissions,Orijinal izinler Restore, Restore or permanently delete a document.,Bir belgeyi geri yükleyin veya kalıcı olarak silin., Restore to default settings?,Varsayılan ayarları geri yükle?, -Restored,restore, +Restored,Geri yüklendi, Restrict IP,IP sınırla, Restrict To Domain,Etki Alanıyla Sınırla, Restrict user for specific document,Belirli bir belge için kullanıcıyı kısıtla, 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),Sadece bu IP adresinden kullanıcı kısıtlayın. Çoklu IP adresleri virgül ile ayırarak eklenebilir. Ayrıca gibi kısmi IP adresleri (111.111.111) kabul, Resume Sending,gönderme Özgeçmiş, -Retake,geri almak, +Retake,Geri al, Retry,Tekrar dene, Return to the Verification screen and enter the code displayed by your authentication app,Doğrulama ekranına geri dönün ve kimlik doğrulama uygulamanız tarafından görüntülenen kodu girin, Reverse Icon Color,Simge Renk Ters, -Revert,dönmek, +Revert,Eski haline çevir, Revert Of,Geri Dön, Reverted,Geri alındı, Review Level,İnceleme Seviyesi, Review Levels,Seviyeleri gözden geçir, Review Points,Değerlendirme Noktaları, -Reviews,yorumlar, -Revoke,geri almak, +Reviews,Yorumlar, +Revoke,Geri al, Revoked,iptal, Rich Text,Zengin Metin, Robots.txt,robots.txt, Role Name,Rol Adı, -Role Permission for Page and Report,Page ve Raporu için Rol İzni, -Role Permissions,Rol İzinler, +Role Permission for Page and Report,Sayfa ve Rapor için Rol İzni, +Role Permissions,Rol İzinleri, Role Profile,Rol Profili, -Role and Level,Rolü ve Seviye, +Role and Level,Rol ve Seviye, Roles,Roller, Roles Assigned,Atanan Rolleri, Roles can be set for users from their User page.,Roller kendi Kullanıcı sayfasından kullanıcılar için ayarlanabilir., @@ -2127,49 +2138,49 @@ Rows Added,Satırlar eklendi, Rows Removed,Satırlar kaldırıldı, Rule,Kural, Rule Name,Kural ismi, -Rules defining transition of state in the workflow.,Iş akışında devletin geçişi tanımlayan kurallar., -"Rules for how states are transitions, like next state and which role is allowed to change state etc.","Devletlerin yanında devlet ve hangi rolü gibi geçişler, ne için kurallar vb durumunu değiştirmek için izin verilir", -Run,koş, +Rules defining transition of state in the workflow.,Iş akışında durumun geçişini tanımlayan kurallar., +"Rules for how states are transitions, like next state and which role is allowed to change state etc.","Durumların nasıl geçiş olduğuna ilişkin kurallar, bir sonraki durum gibi ve hangi rolün durumu değiştirmesine izin verildiği vb.", +Run,Çalıştır, Run scheduled jobs only if checked,Kontrol yalnızca zamanlanmış işlerini, S3 Backup Settings,S3 Yedekleme Ayarları, -S3 Backup complete!,S3 Yedekleme tamamlandı!, +S3 Backup complete!,S3 Yedeklemeyi tamamla!, SMS,SMS, -SMS Gateway URL,SMS Anageçit Adresi, +SMS Gateway URL,SMS Gateway Adresi, SMS Parameter,SMS Parametresi, SMS Settings,SMS Ayarları, SMS sent to following numbers: {0},SMS aşağıdaki numaralardan gönderilen: {0}, SMTP Server,SMTP Sunucusu, SMTP Settings for outgoing emails,Giden e-postalar için SMTP Ayarları, -"SQL Conditions. Example: status=""Open""",SQL Koşulları. Örnek: status = "Aç", +"SQL Conditions. Example: status=""Open""",SQL Koşulları. Örnek: status = 'Aç', SSL/TLS Mode,SSL / TLS Modu, -Salesforce,Satış ekibi, +Salesforce,Salesforce, Same Field is entered more than once,Aynı Alana birden çok kez girildi, -Save API Secret: ,API Gizli Kaydet:, -Save As,Farklı kaydet, +Save API Secret: ,API Secret Kaydet: , +Save As,Farklı Kaydet, Save Filter,Filtreyi Kaydet, Save Report,Raporu Kaydet, Save filters,Filtreleri kaydet, Saving,Kaydediliyor, -Saving...,Tasarruf ..., -Scan the QR Code and enter the resulting code displayed.,QR Code'u tarayın ve görüntülenen sonuç kodunu girin., -Scopes,kapsamları, +Saving...,Kaydediliyor..., +Scan the QR Code and enter the resulting code displayed.,QR Code'u tarayın ve görüntülenen sonuç kodunu girin., +Scopes,Kapsamlar, Script,Script, -Script Report,Senaryo Raporu, -Script or Query reports,Yazı veya sorgu raporları, -Script to attach to all web pages.,Senaryo tüm web sayfalarına eklemek için., -Search Fields,Arama Alanları, -Search Help,Yardım İste, +Script Report,Script Raporu, +Script or Query reports,Script veya Sorgu raporları, +Script to attach to all web pages.,Script tüm web sayfalarına eklemek için., +Search Fields,Alanları Ara, +Search Help,Yardım Ara, Search field {0} is not valid,Arama alanı {0} geçerli değil, -Search for '{0}','{0}' için ara, +Search for '{0}','{0}' için ara, Search for anything,herhangi bir şey için ara, Search in a document type,Bir belge türü ara, Search or Create a New Chat,Yeni Bir Mesaj Arama veya Yeni Bir Sohbet Oluşturma, -Search or type a command,Bir komutu ara veya yazın, -Search...,Arama..., -Searching,Arama, -Searching ...,Arama ..., +Search or type a command (Ctrl + G),Bir komut arayın veya yazın (Ctrl + G), +Search...,Arama yap..., +Searching,Arama yapılıyor, +Searching ...,Arama yapılıyor..., Section Break,Bölüm Sonu, -Section Heading,bölüm başlığı, +Section Heading,Bölüm başlığı, Security,Güvenlik, Security Settings,Güvenlik Ayarları, See all past reports.,Geçmiş tüm raporlara bakın., @@ -2181,11 +2192,11 @@ Seems Publishable Key or Secret Key is wrong !!!,Yayınlanabilir Anahtar veya Gi Seems token you are using is invalid!,Kullandığınız simge geçersiz görünüyor!, Seen,Görülme, Seen By,Tarafından görüldü, -Seen By Table,Tablo By Görülme, +Seen By Table,Tabloya göre Görülme, Select Attachments,Ekleri seç, Select Child Table,Çocuk Masası Seç, -Select Column,Sütunu seçin, -Select Columns,Seçin Sütunlar, +Select Column,Sütun Seç, +Select Columns,Sütunları Seç, Select Document Type,Belge Türü Seçin, Select Document Type or Role to start.,Başlatmak için Belge Türü veya Rol seçin., Select Document Types to set which User Permissions are used to limit access.,Seç Belge Türleri erişimi sınırlamak için kullanıldığı Kullanıcı İzinleri ayarlamak için., @@ -2195,11 +2206,11 @@ Select Language...,Dil Seçin..., Select Languages,seç Diller, Select Module,seç Modülü, Select Print Format,Baskı Biçimi Seç, -Select Print Format to Edit,Edit Baskı Biçimi seçin, +Select Print Format to Edit,Düzenlemek için Baskı Biçimi seçin, Select Role,Rol Seçin, -Select Table Columns for {0},Için Tablo Seç Sütunlar {0}, -Select Your Region,Bölgenizi Seçiniz, -Select a Brand Image first.,Önce bir Marka Resim seçin., +Select Table Columns for {0},{0} için Tablo Sütunları Seç, +Select Your Region,Bölgenizi Seçin, +Select a Brand Image first.,Önce bir Marka Resmi seçin., Select a DocType to make a new format,Yeni bir format yapmak için bir DOCTYPE seçin, Select a chat to start messaging.,Mesajlaşmayı başlatmak için bir sohbet seçin., Select a group node first.,İlk grup düğümünü seçin., @@ -2213,7 +2224,7 @@ Select the label after which you want to insert new field.,Select the label afte Select {0},Seçin {0}, Self approval is not allowed,Kendi onayına izin verilmez, Send After,Sonra Gönder, -Send Alert On,Uyarı göndermek, +Send Alert On,Uyarı gönder, Send Email Alert,E-posta Uyarısı Gönder, Send Email Print Attachments as PDF (Recommended),PDF olarak Email Print Ekler Gönder (Önerilen), Send Email for Successful Backup,Başarılı Yedekleme İçin E-posta Gönder, @@ -2229,7 +2240,7 @@ Send alert if this field's value changes,Uyarı gönder Bu alanın değeri deği Send an email reminder in the morning,Sabah bir hatırlatma e-postası gönder, Send days before or after the reference date,Önce veya referans tarihinden sonra gün Gönder, Send enquiries to this email address,Bu e-posta adresine soruşturma gönder, -Send me a copy,Bana bir kopya gönder, +Send me a copy,Bana bir kopyasını gönder, Send only if there is any data,"herhangi bir veri varsa, sadece Gönder", Send unsubscribe message in email,e-postadaki aboneliği iptal mesaj gönder, Sender,Gönderici, @@ -2238,27 +2249,27 @@ Sendgrid,Sendgrid, Sent Read Receipt,Gönderilen okundu bilgisi, Sent or Received,Gönderilmiş veya Alınmış, Sent/Received Email,Gönderilen / Alınan E-posta, -Server IP,Sunucu IP'si, +Server IP,Sunucu IP'si, Session Expired,Oturum süresi doldu, Session Expiry,Oturum kapanacak, -Session Expiry Mobile,Oturum Vade Mobil, -Session Expiry in Hours e.g. 06:00,Oturum kapanacak saat sonra, -Session Expiry must be in format {0},Oturum Vade formatında olmalıdır {0}, +Session Expiry Mobile,Oturum Sonu Mobil, +Session Expiry in Hours e.g. 06:00,Saat Cinsinden Oturum Bitişi Örn. 06:00, +Session Expiry must be in format {0},Oturum Bitişi {0} formatında olmalıdır, Session Start Failed,Oturum Başlatma Başarısız Oldu, -Set Banner from Image,Image Banner Set, +Set Banner from Image,Image Banner Ayarla, Set Chart,Grafiği Ayarla, Set Filters,Filtreleri Ayarla, Set New Password,Yeni Şifre ayarla, Set Number of Backups,Yedekler Set Sayısı, Set Only Once,Sadece bir kez ayarlama, -Set Password,Şifre seç, +Set Password,Şifre Seç, Set Permissions,İzinleri Ayarla, Set Permissions on Document Types and Roles,Belge Türleri ve Rol üzerinde İzinleri Ayarlama, Set Property After Alert,Uyarının Ardından Mülkü Ayarla, -Set Quantity,Set Miktarı, -Set Role For,İçin Set Rol, +Set Quantity,Miktarı Ayarla, +Set Role For,Rolü Ayarla, Set User Permissions,Kullanıcı Yetkilerini Belirle, -Set Value,Değeri ayarlayın, +Set Value,Değer Ayarla, Set custom roles for page and report,sayfa ve rapor için ayarlanan özel rolleri, "Set default format, page size, print style etc.","Set varsayılan biçim, sayfa boyutu, baskı tarzı vs", Set non-standard precision for a Float or Currency field,Bir Bolluk veya Para Birimi alanı için Set standart dışı hassas, @@ -2271,20 +2282,20 @@ Settings for Contact Us Page,Bize Sayfa Ayarları, Settings for Contact Us Page.,İletişim Sayfası Ayarları, Settings for OAuth Provider,OAuth Sağlayıcısı Ayarları, Settings for the About Us Page,Hakkımızda Sayfa Ayarları, -Setup Auto Email,Kurulum Otomatik e-posta, -Setup Complete,Kurulum tamamlandı, +Setup Auto Email,Otomatik E-posta Kurulumu, +Setup Complete,Kurulumu Tamamla, Setup Notifications based on various criteria.,Çeşitli kriterlere göre Kurulum Bildirimleri., Setup Reports to be emailed at regular intervals,Kurulum Raporları düzenli aralıklarla gönderilecektir edilecek, "Setup of top navigation bar, footer and logo.","Üst gezinti çubuğu, altbilgi ve logo Kur.", -Share,Pay, +Share,Paylaş, Share URL,URL paylaş, -Share With,Ile paylaş, +Share With,ile paylaş, Share this document with,Bu belgeyi paylaş, Share {0} with,{0} öğesini şunla paylaş, -Shared,paylaşılan, -Shared With,Paylaşıldı, +Shared,Paylaşıldı, +Shared With,Bununla Paylaşıldı, Shared with everyone,Herkesle paylaştı, -Shared with {0},Paylaşılan {0}, +Shared with {0},{0} ile Paylaşıldı, Shop,Mağaza, Short keyboard patterns are easy to guess,Kısa klavye desenleri tahmin etmek kolaydır, Show Attachments,Ekleri Göster, @@ -2299,26 +2310,26 @@ Show Report,Raporu göster, Show Section Headings,Göster Bölüm Başlıkları, Show Sidebar,göster Kenar Çubuğu, Show Title,Göster Başlığı, -Show Totals,Toplamları göster, -Show Weekends,Hafta sonlarını göster, -Show all Versions,Tüm Sürümleri göster, +Show Totals,Toplamları Göster, +Show Weekends,Hafta sonlarını Göster, +Show all Versions,Tüm Sürümleri Göster, Show as Grid,Izgara Olarak Göster, -Show as cc,cc olarak göster, +Show as cc,cc olarak Göster, Show failed jobs,Göster başarısız işler, -Show in Module Section,Modül Bölüm göster, +Show in Module Section,Modül Bölüm Göster, Show in filter,Filtrede göster, -Show more details,Daha fazla ayrıntı göster, -Show only errors,Yalnızca hataları göster, -"Show title in browser window as ""Prefix - title""",Olarak tarayıcı penceresinde göster başlığı "Önek - title", -Showing only Numeric fields from Report,Yalnızca Rapor'dan sayısal alanlar gösteriliyor, +Show more details,Daha fazla ayrıntı Göster, +Show only errors,Yalnızca hataları Göster, +"Show title in browser window as ""Prefix - title""",Olarak tarayıcı penceresinde göster başlığı 'Önek - title', +Showing only Numeric fields from Report,Yalnızca Rapor'dan sayısal alanlar gösteriliyor, Sidebar Items,Kenar çubuğu Öğeler, Sidebar Settings,Kenar çubuğu ayarları, Sidebar and Comments,Kenar çubuğu ve Yorumlar, Sign Up,Kaydol, Sign Up is disabled,Yeni kayıtlar devredışı, Signature,İmza, -"Simple Python Expression, Example: Status in (""Closed"", ""Cancelled"")","Basit Python İfadesi, Örnek: Durumdaki ("Kapalı", "İptal edildi")", -"Simple Python Expression, Example: status == 'Open' and type == 'Bug'","Basit Python İfadesi, Örnek: status == 'Aç' ve == 'Hata' yazın", +"Simple Python Expression, Example: Status in (""Closed"", ""Cancelled"")","Basit Python İfadesi, Örnek: Durumdaki ('Kapalı', 'İptal edildi')", +"Simple Python Expression, Example: status == 'Open' and type == 'Bug'","Basit Python İfadesi, Örnek: status == 'Aç' ve == 'Hata' yazın", Simultaneous Sessions,Eşzamanlı Oturumlar, Single DocTypes cannot be customized.,Tek Doküman Tipleri özelleştirilemez., Single Post (article).,Single Post (makale)., @@ -2329,14 +2340,14 @@ Skype,Skype, Slack,Gevşek, Slack Channel,Slack Kanal, Slack Webhook Error,Slack Webhook Hatası, -Slack Webhook URL,Slack Webhook URL'si, +Slack Webhook URL,Slack Webhook URL'si, Slack Webhooks for internal integration,Dahili entegrasyon için gevşek Webhooks, Slideshow Items,Slayt Ürünler, Slideshow Name,Slayt İsmi, Slideshow like display for the website,Web sitesi için ekran gibi Slayt, Small Text,Küçük Metin, Smallest Currency Fraction Value,Küçük Döviz Kesir Değeri, -Smallest circulating fraction unit (coin). For e.g. 1 cent for USD and it should be entered as 0.01,Küçük dolaşan kesir birimi (sikke). O 0.01 olarak girilmelidir ve ABD Doları için örneğin 1 kuruş için, +Smallest circulating fraction (coin). For e.g. 1 cent for USD and it should be entered as 0.01,Küçük dolaşan kesir birimi (sikke). O 0.01 olarak girilmelidir ve ABD Doları için örneğin 1 kuruş için, Snapshot View,Anlık Görünüm, Social,Sosyal, Social Login Key,Sosyal Giriş Anahtarı, @@ -2359,7 +2370,7 @@ Source Text,Kaynak Metin, Spam,İstenmeyen e, SparkPost,SparkPost, Special Characters are not allowed,Özel Karakterler izin verilmez, -"Standard DocType cannot have default print format, use Customize Form","Standart DocType varsayılan yazdırma biçimine sahip olamaz, Formu Özelleştir'i kullanın", +"Standard DocType cannot have default print format, use Customize Form","Standart DocType varsayılan yazdırma biçimine sahip olamaz, Formu Özelleştir'i kullanın", Standard Print Format cannot be updated,Standart Baskı Biçimi güncellenen olamaz, Standard Print Style cannot be changed. Please duplicate to edit.,Standart Baskı Stili değiştirilemez. Düzenlemek için lütfen çoğaltın., Standard Reports,Standart Raporlar, @@ -2375,8 +2386,8 @@ StartTLS,StartTLS, Started,Başlatılan, Starting Frappe ...,Frappe başlıyor ..., Starts on,Başlıyor, -States,Devletler, -"States for workflow (e.g. Draft, Approved, Cancelled).","Iş akışı için Devletler (örneğin Taslak, Onaylı, İptal).", +States,Durumlar, +"States for workflow (e.g. Draft, Approved, Cancelled).","Iş akışı için Durumlar (örneğin Taslak, Onaylı, İptal).", Static Parameters,Statik Parametreleri, Stats based on last month's performance (from {0} to {1}),Geçen ayın performansına göre istatistikler ({0} - {1} arası), Stats based on last week's performance (from {0} to {1}),Geçen haftaki performansa dayalı istatistikler ({0} - {1} arası), @@ -2396,9 +2407,9 @@ Subdomain,Subdomain, Subject Field,Konu Alanı, Submit after importing,İçe aktarmadan sonra gönderme, Submit an Issue,Bir Sorun Gönder, -Submit this document to confirm,onaylamak için bu belge göndermek, +Submit this document to confirm,Onaylamak için bu belgeyi gönder, Submit {0} documents?,{0} dokümanı gönderilsin mi?, -Submitting {0},{0} gönderiliyor, +Submiting {0},{0} gönderiliyor, Submitted Document cannot be converted back to draft. Transition row {0},Ekleyen Belge taslak geri dönüştürülemez. Geçiş satır {0}, Submitting,Tanzim Ediliyor, Subscription Notification,Abonelik Bildirimi, @@ -2425,6 +2436,16 @@ System Page,Sistem Sayfası, System Settings,Sistem Ayarları, System User,Sistem Kullanıcısı, System and Website Users,Sistemi ve Web Sitesi Kullanıcıları, +Let's Set Up Some Masters,Biraz Ana Verileri Ayarlayalım, +"Company, Item, Customer, Supplier, Navigation Help, Data Import, Letter Head, Quotation","Şirket, Ürün, Müşteri, Tedarikçi, Navigasyon Yardımı, Veri İçe Aktarma, Antet, Fiyat Teklifi", +Set Up a Company,Şirket Kurulumu, +How to Navigate in ERPNext,ERPNext'te Nasıl Gezinilir, +Import Data from Spreadsheet,Elektronik Tablodan Veri Al, +Manage Items,Öğeleri Yönet, +Manage Customers,Müşterileri Yönetin, +Manage Suppliers,Tedarikçileri Yönetin, +Create your first Quotation,İlk Teklifinizi oluşturun, +Setup Your Letterhead,Antetli Kağıdınızı Hazırlayın, Table,Tablo, Table Field,Tablo Alanı, Table HTML,Tablo HTML, @@ -2449,7 +2470,7 @@ Thank you for your email,E-postanız için teşekkür ederiz, Thank you for your interest in subscribing to our updates,Güncellemeler için abone olduğunuzdan dolayı teşekkür ederiz, Thank you for your message,Mesajınız için teşekkür ederiz, The CSV format is case sensitive,CSV biçimi büyük / küçük harf duyarlıdır, -The Condition '{0}' is invalid,Durum '{0}' geçersiz, +The Condition '{0}' is invalid,Durum '{0}' geçersiz, The First User: You,İlk Kullanıcı: Sen, "The application has been updated to a new version, please refresh this page","Uygulama yeni bir sürüme güncellendi, lütfen bu sayfayı yenileyin", The attachments could not be correctly linked to the new document,Ekler yeni belgeye doğru şekilde bağlanılamıyor, @@ -2462,7 +2483,7 @@ The resource you are looking for is not available,Aradığınız kaynak mevcut d The system provides many pre-defined roles. You can add new roles to set finer permissions.,Sistem birçok önceden tanımlı roller sağlar. Sen ince izinlerini ayarlamak için yeni roller ekleyebilir., The user from this field will be rewarded points,Bu alandaki kullanıcı ödüllendirilecek puanlar olacak, Theme,Tema, -Theme URL,Tema URL'si, +Theme URL,Tema URL'si, There can be only one Fold in a form,Bir formda tek bir kat olabilir, There is an error in your Address Template {0},Adres Şablon bir hata var {0}, There is no data to be exported,Dışa aktarılacak veri yok, @@ -2488,7 +2509,7 @@ This email is autogenerated,Bu e-posta otomatik olarak oluşturuldu, This email was sent to {0},Bu e-posta gönderildi {0}, This email was sent to {0} and copied to {1},Bu e-posta {0} gönderilecek ve kopyalanan {1}, This feature is brand new and still experimental,Bu özellik hala yepyeni ve deneysel, -This field will appear only if the fieldname defined here has value OR the rules are true (examples): \nmyfield\neval:doc.myfield=='My Value'\neval:doc.age>18,"Burada tanımlanan AlanAdı değeri vardır VEYA kurallar gerçek (örnekler) yalnızca, bu alanı görünür: myField eval: doc.myfield == 'Benim Değer' eval: doc.age> 18", +"This field will appear only if the fieldname defined here has value OR the rules are true (examples): \nmyfield\neval:doc.myfield=='My Value'\neval:doc.age>18","Burada tanımlanan AlanAdı değeri vardır VEYA kurallar gerçek (örnekler) yalnızca, bu alanı görünür: myField eval: doc.myfield == 'Benim Değer' eval: doc.age> 18", This form does not have any input,Bu formda herhangi bir giriş yapılmamış, This form has been modified after you have loaded it,Bunu yükledikten sonra Bu form modifiye edilmiştir, This format is used if country specific format is not found,Ülkeye özgü format bulunamazsa bu format kullanılır, @@ -2563,7 +2584,7 @@ Track Email Status,E-posta Durumunu İzle, Track Field,Parça alanı, Track Seen,Görüldüğünü takip et, Track Views,İzlenme Sayısı, -"Track if your email has been opened by the recipient.\n
\nNote: If you're sending to multiple recipients, even if 1 recipient reads the email, it'll be considered ""Opened""","E-postanız alıcı tarafından açılmışsa izleyin.
Not: Birden fazla alıcıya gönderiyorsanız, 1 alıcı e-postayı okuyor olsa bile, "Açıldı" sayılır.", +"Track if your email has been opened by the recipient.\n
\nNote: If you're sending to multiple recipients, even if 1 recipient reads the email, it'll be considered ""Opened""","E-postanız alıcı tarafından açılmışsa izleyin.
Not: Birden fazla alıcıya gönderiyorsanız, 1 alıcı e-postayı okuyor olsa bile, 'Açıldı' sayılır.", Track milestones for any document,Herhangi bir belge için kilometre taşlarını izleyin, Transaction Hash,İşlem Hash, Transaction Log,İşlem Günlüğü, @@ -2579,7 +2600,7 @@ Trash,Çöp, Tree,ağaç, Trigger Method,tetik Yöntemi, Trigger Name,Tetikleyici Adı, -"Trigger on valid methods like ""before_insert"", ""after_update"", etc (will depend on the DocType selected)",""Before_insert", "after_update", vb gibi geçerli yöntemler hakkında Tetik (seçilen DocType bağlıdır)", +"Trigger on valid methods like ""before_insert"", ""after_update"", etc (will depend on the DocType selected)","'Before_insert', 'after_update', vb gibi geçerli yöntemler hakkında Tetik (seçilen DocType bağlıdır)", Try to avoid repeated words and characters,tekrarlanan kelimeleri ve karakterleri önlemek için deneyin, Try to use a longer keyboard pattern with more turns,Daha fazla dönüşler ile daha uzun klavye desen kullanmayı deneyin, Two Factor Authentication,İki Faktörlü Kimlik Doğrulama, @@ -2592,7 +2613,7 @@ UIDVALIDITY,UIDVALIDITY, UNSEEN,GÖRÜLMEMESİNİN, UPPER CASE,BÜYÜK HARF, "URIs for receiving authorization code once the user allows access, as well as failure responses. Typically a REST endpoint exposed by the Client App.\n
e.g. http://hostname//api/method/frappe.www.login.login_via_facebook",kullanıcı erişim sağlar bir kez yetki kodu alma yanı sıra başarısızlık yanıtları için URI'ları. Tipik REST uç Müşteri App tarafından gözler önüne serdi.
örneğin http: //hostname//api/method/frappe.www.login.login_via_facebook, -URLs,URL'ler, +URLs,URL'ler, Unable to find attachment {0},İlgili ek {0} bulunamadı, Unable to load camera.,Kamera yüklenemedi., Unable to load: {0},Yüklenemiyor: {0}, @@ -2611,39 +2632,39 @@ Unknown User,Bilinmeyen kullanıcı, "Unknown file encoding. Tried utf-8, windows-1250, windows-1252.","Bilinmeyen dosya kodlama. Denenmiş utf-8, windows-1250, windows-1252.", Unread,Okunmamış, Unread Notification Sent,Gönderilen Okunmamış Bildirimi, -Unselect All,Unselect Tüm, -Unshared,paylaşılmayan, +Unselect All,Tüm Seçimi Kaldır, +Unshared,Paylaşılmayan, Unsubscribe,Aboneliği Kaldır, -Unsubscribe Method,Aboneliği iptal Yöntemi, -Unsubscribe Param,Aboneliği iptal Param, +Unsubscribe Method,Abonelik İptal Yöntemi, +Unsubscribe Param,Abonelik İptal Parametresi, Unsupported File Format,Desteklenmeyen Dosya Biçimi, Unzip,Dosyaları Ayıkla, -Unzipped {0} files,Sıkıştırılmış {0} dosya, -Unzipping files...,Dosyaların açılması ..., +Unzipped {0} files,{0} dosya sıkıştırıldı, +Unzipping files...,Dosyalar ayıklanıyor..., Upcoming Events for Today,Bugün için Gelecek Etkinlikler, -Update Field,Alanı güncelle, +Update Field,Alanı Güncelle, Update Translations,Çevirileri Güncelle, Update Value,Değer Güncelle, Update many values at one time.,aynı anda çok sayıda değerleri güncelleştirmek., Update records,Kayıtları güncelle, -Updated,Güncellenmiş, +Updated,Güncellendi, Updated successfully,Başarıyla güncellendi, Updated {0}: {1},Güncellendi {0}: {1}, Updating,Güncelleniyor, Updating {0},{0} güncelleniyor, Upload Failed,Yükleme başarısız, -Uploaded To Dropbox,Dropbox'a Yüklendi, +Uploaded To Dropbox,Dropbox'a Yüklendi, Use ASCII encoding for password,Şifre için ASCII kodlamasını kullan, Use Different Email Login ID,Farklı E-posta Oturum Açma Kimliğini Kullan, -Use IMAP,Kullanım IMAP, -Use POST,POST'u kullanın, -Use SSL,SSL kullan, -Use TLS,TLS kullanın, -"Use a few words, avoid common phrases.","ortak sözcük önlemek, birkaç kelime kullanın.", +Use IMAP,IMAP Kullan, +Use POST,POST'u Kullan, +Use SSL,SSL Kullan, +Use TLS,TLS Kullan, +"Use a few words, avoid common phrases.","Birkaç kelime kullanın, yaygın ifadelerden kaçının.", Use of sub-query or function is restricted,Alt sorgu veya işlev kullanımı kısıtlıdır, Use socketio to upload file,Dosya yüklemek için socketio kullanın, Use this fieldname to generate title,Başlığı oluşturmak için bu alan adı kullanın, -User '{0}' already has the role '{1}',Kullanıcı '{0}' zaten bir role sahip '{1}', +User '{0}' already has the role '{1}',Kullanıcı '{0}' zaten bir role sahip '{1}', User Cannot Create,Kullanıcı oluşturulamıyor, User Cannot Search,Kullanıcı aranamıyor, User Defaults,Kullanıcı Varsayılanları, @@ -2662,7 +2683,7 @@ User Social Login,Kullanıcı Sosyal Girişi, User Tags,Kullanıcı Etiketleri, User Type,Kullanıcı Türü, User can login using Email id or Mobile number,Kullanıcı e-posta kimliği veya Cep telefonu numarası kullanarak giriş yapabilir, -User can login using Email id or User Name,Kullanıcı e-posta kimliği veya Kullanıcı Adı'nı kullanarak giriş yapabilir, +User can login using Email id or User Name,Kullanıcı e-posta kimliği veya Kullanıcı Adı'nı kullanarak giriş yapabilir, User editable form on Website.,Kullanıcı odaklı website formu, User is mandatory for Share,Paylaşım için bir kullanıcı zorunludur, User not allowed to delete {0}: {1},Kullanıcıya silme izni verilmedi {0}: {1}, @@ -2688,7 +2709,7 @@ Value To Be Set,Ayarlanacak Değer, Value cannot be changed for {0},Değer için değiştirilemez {0}, Value for a check field can be either 0 or 1,"Bir kontrol alanı için değer 0 ya da 1 olabilir, ya da", Value for {0} cannot be a list,{0} bir liste olamaz değer, -Value missing for,Değer eksik, +Value missing for,Bunun için değer eksik, Value too big,çok büyük bir değer, Values Changed,Değerler Değişti, Verdana,Verdana, @@ -2729,20 +2750,20 @@ Webhook Data,Webhook Veri, Webhook Header,Webhook Başlığı, Webhook Headers,Webhook Başlıklar, Webhook Request,Webhook İsteği, -Webhook URL,Web sayfası URL'si, +Webhook URL,Web sayfası URL'si, Webhooks calling API requests into web apps,Web arşivleri API isteklerini web uygulamalarına çağırıyor, -Website Meta Tag,Web Sitesi Meta Etiketi, -Website Route Meta,Web Sitesi Rotası Meta, -Website Route Redirect,Web Sitesi Rotası Yönlendirme, +Website Meta Tag,Website Meta Etiketi, +Website Route Meta,Website Rotası Meta, +Website Route Redirect,Website Rotası Yönlendirme, Website Script,Website Script, -Website Sidebar,Web sitesi Kenar Çubuğu, -Website Sidebar Item,Web sitesi Kenar Çubuğu Öğe, -Website Slideshow,Web Sitesi Slayt, -Website Slideshow Item,Web Sitesi Slayt Ürün, -Website Theme,Web Sitesi Tema, -Website Theme Image,Web Sitesi Tema Görüntü, -Website Theme Image Link,Web Sitesi Tema Görüntü Bağlantısı, -Website User,Web Sitesi Kullanım, +Website Sidebar,Website Kenar Çubuğu, +Website Sidebar Item,Website Kenar Çubuğu Öğe, +Website Slideshow,Website Slayt, +Website Slideshow Item,Website Slayt Ürün, +Website Theme,Website Teması, +Website Theme Image,Website Tema Resmi, +Website Theme Image Link,Website Tema Resmi Bağlantısı, +Website User,Website Kullanıcısı, Welcome Message,Karşılama mesajı, "When you Amend a document after Cancel and save it, it will get a new number that is a version of the old number.","Eğer sonra iptal ve bunu kaydetmek Belgeyi Amend zaman, eski sayısının bir versiyonu yeni bir numara almak olacaktır.", Width,Genişlik, @@ -2750,19 +2771,19 @@ Widths can be set in px or %.,Genişlikleri px veya% ayarlanabilir., Will be used in url (usually first name).,Url (genellikle ilk adı) kullanılır., Will be your login ID,Oturum açma kimliğiniz olacak, Will only be shown if section headings are enabled,bölüm başlıkları etkinse yalnızca gösterilir, -With Letter head,Harf Beyninle, -With Letterhead,Antetli ile, -Workflow Action,İş Akışı Eylem, -Workflow Action Master,İş Akışı Eylem Usta, -Workflow Action Name,İş Akışı Eylem Adı, +With Letter head,Antetli, +With Letterhead,Antetli, +Workflow Action,Workflow İşlemi, +Workflow Action Master,Workflow İşlem Master, +Workflow Action Name,Workflow İşlem Adı, Workflow Document State,İş Akışı Belge Durumu, -Workflow Name,İş Akışı Adı, -Workflow State,İş Akışı Durumu, -Workflow State Field,İş Akışı Durumu Tarla, -Workflow State not set,İş Akışı Durumu ayarlanmadı, -Workflow Transition,İş Akışı Geçiş, +Workflow Name,Workflow Adı, +Workflow State,Workflow Durumu, +Workflow State Field,Workflow Durumu Tarla, +Workflow State not set,Workflow Durumu ayarlanmadı, +Workflow Transition,Workflow Geçiş, Workflow state represents the current state of a document.,İş Akışı devlet belgenin mevcut durumunu gösterir., -Write,Yazmak, +Write,Yazma, Wrong fieldname {0} in add_fetch configuration of custom script,Özel komut dosyasının add_fetch yapılandırmasında yanlış alan adı {0}, X Axis Field,X Eksen Alanı, XLSX,XLSX, @@ -2777,19 +2798,19 @@ You are not allowed to print this document,Bu belgeyi yazdırma izniniz yok, You are not allowed to print this report,Bu raporu yazdırmanıza izin verilmemiştir, You are not allowed to send emails related to this document,Bu belge ile ilgili e-posta göndermenize izin verilmemiştir, You are not allowed to update this Web Form Document,Bu Web Form Belgesini güncelleme izniniz yok, -You are not connected to Internet. Retry after sometime.,İnternet'e bağlı değilsiniz. Bir ara sonra tekrar deneyin., +You are not connected to Internet. Retry after sometime.,İnternet'e bağlı değilsiniz. Bir ara sonra tekrar deneyin., You are not permitted to access this page.,Bu sayfaya erişim izniniz yok., You are not permitted to view the newsletter.,Haber bültenini görüntüleme izniniz yok., You are now following this document. You will receive daily updates via email. You can change this in User Settings.,Şimdi bu belgeyi takip ediyorsunuz. Günlük güncellemeleri e-posta ile alacaksınız. Bunu Kullanıcı Ayarlarında değiştirebilirsiniz., You can add dynamic properties from the document by using Jinja templating.,Jinja şablonları kullanarak daha iyi sonuçlar alabilirsiniz., You can also copy-paste this ,Bunu kopyalayıp yapıştırabilirsiniz., "You can change Submitted documents by cancelling them and then, amending them.","Onları değiştiren, daha sonra bunları iptal ve Ekleyen belgeleri değiştirebilirsiniz.", -You can find things by asking 'find orange in customers',Sen müşterilerin turuncu bulmak 'sorarak şeyler bulabilirsiniz, +You can find things by asking 'find orange in customers',Sen müşterilerin turuncu bulmak 'sorarak şeyler bulabilirsiniz, You can only upload upto 5000 records in one go. (may be less in some cases),En fazla 5 bin '5000' kayıt ekleyebilirsiniz bu bazı durumlarda daha azdır, You can use Customize Form to set levels on fields.,Sen alanlarda düzeylerini ayarlamak için Özelleştirmek Formunu kullanabilirsiniz., You can use wildcard %,Joker% kullanabilirsiniz, -You can't set 'Options' for field {0},{0} alanına 'Seçenekler' ayarlayamazsınız, -You can't set 'Translatable' for field {0},{0} alanına 'Çevrilemez' ayarını yapamazsınız, +You can't set 'Options' for field {0},{0} alanına 'Seçenekler' ayarlayamazsınız, +You can't set 'Translatable' for field {0},{0} alanına 'Çevrilemez' ayarını yapamazsınız, You cannot give review points to yourself,Kendinize inceleme noktaları veremezsiniz, You cannot unset 'Read Only' for field {0},{0} için 'Salt Okunur' ayarını kaldıramazsınız, You do not have enough permissions to access this resource. Please contact your manager to get access.,Bu kaynağa erişmek için yeterli izinlere sahip değilsiniz. erişmek için yöneticinizle bağlantı kurun., @@ -2952,7 +2973,7 @@ pause,Duraklat, pencil,kalem, picture,resim, plane,düzlem, -play,oynamak, +play,play, play-circle,play-circle, plus,artı, plus-sign,plus-sign, @@ -2975,7 +2996,7 @@ sa-east-1,sa-doğu-1, screenshot,ekran görüntüsü, share-alt,share-alt, shopping-cart,shopping-cart, -show,göstermek, +show,göster, signal,sinyal, star,yıldız, star-empty,star-empty, @@ -3047,7 +3068,7 @@ zoom-out,Uzaklaştırın, {0} hours ago,{0} saat önce, {0} in row {1} cannot have both URL and child items,{0} üst üste {1} URL ve alt öğeleri hem de olamaz, {0} is a mandatory field,{0} zorunlu bir alandır, -{0} is an invalid email address in 'Recipients',"{0}, 'Alıcılar' bölümünde geçersiz bir e-posta adresidir", +{0} is an invalid email address in 'Recipients',"{0}, 'Alıcılar' bölümünde geçersiz bir e-posta adresidir", {0} is not a raw printing format.,{0} ham bir baskı formatı değil., {0} is not a valid Email Address,{0} geçerli bir e-posta adresi değil, {0} is not a valid Workflow State. Please update your Workflow and try again.,{0} geçerli bir İş Akışı Durumu değil. Lütfen iş akışınızı güncelleyin ve tekrar deneyin., @@ -3091,7 +3112,7 @@ zoom-out,Uzaklaştırın, {0} {1} not found,{0} {1} bulunamadı, {0} {1} to {2},{0} {1} ile {2} arasında, "{0}, Row {1}","{0}, {1} Satır", -"{0}: '{1}' ({3}) will get truncated, as max characters allowed is {2}","{0}: izin verilen azami karakter olarak '{1}' ({3}), kesilmiş alacak {2}", +"{0}: '{1}' ({3}) will get truncated, as max characters allowed is {2}","{0}: izin verilen azami karakter olarak '{1}' ({3}), kesilmiş alacak {2}", {0}: Cannot set Amend without Cancel,{0}: Öğesi tanzim edilmeden iptal edilemez, {0}: Cannot set Assign Amend if not Submittable,{0}: Ata Amend ayarlanamaz Submittable değilse, {0}: Cannot set Assign Submit if not Submittable,{0}: Gönderilebilir değilse gönderme ataması yapılamaz, @@ -3113,7 +3134,7 @@ Last Password Reset Date,Son Şifre Sıfırlama Tarihi, The password of your account has expired.,Hesabınızın şifresinin süresi doldu., Workflow State transition not allowed from {0} to {1},İş Akışı Durumu geçişine {0} - {1} arasında izin verilmiyor, {0} must be after {1},"{0}, {1} tarihinden sonra olmalı", -{0}: Field '{1}' cannot be set as Unique as it has non-unique values,{0}: '{1}' alanı benzersiz olmayan değerlere sahip olduğundan Benzersiz olarak ayarlanamaz, +{0}: Field '{1}' cannot be set as Unique as it has non-unique values,{0}: '{1}' alanı benzersiz olmayan değerlere sahip olduğundan Benzersiz olarak ayarlanamaz, {0}: Field {1} in row {2} cannot be hidden and mandatory without default,"{0}: {2} satırındaki {1} alanı, varsayılan olmadan gizlenemez ve zorunlu değildir", {0}: Field {1} of type {2} cannot be mandatory,{0}: {2} tipindeki {1} alanı zorunlu olamaz, {0}: Fieldname {1} appears multiple times in rows {2},"{0}: {1} alan adı, {2} satırlarında birden çok kez görünüyor", @@ -3131,7 +3152,7 @@ No values to show,Gösterilecek değer yok, View Ref,Ref görüntüle, Workflow Action is not created for optional states,İsteğe bağlı durumlar için İş Akışı Eylemi oluşturulmadı, {0} values selected,{0} değer seçildi, -"""amended_from"" field must be present to do an amendment.",Bir değişiklik yapmak için "değiştirilen_" den "alan" olmalı., +"""amended_from"" field must be present to do an amendment.",Bir değişiklik yapmak için 'değiştirilen_' den 'alan' olmalı., (Mandatory),(Zorunlu), 1 Google Calendar Event synced.,1 Google Takvim Etkinliği senkronize edildi., 1 record will be exported,1 kayıt dışa aktarılacak, @@ -3191,22 +3212,22 @@ Auto Repeat failed for {0},{0} için Otomatik Tekrarlama başarısız oldu, Automatic Linking can be activated only for one Email Account.,Otomatik Bağlama yalnızca bir E-posta Hesabı için etkinleştirilebilir., Automatic Linking can be activated only if Incoming is enabled.,Otomatik Bağlama yalnızca Gelen seçeneği etkinse etkinleştirilebilir., Automatically generates recurring documents.,Otomatik olarak yinelenen belgeler oluşturur., -Backing up to Google Drive.,Google Drive'a yedekleme., +Backing up to Google Drive.,Google Drive'a yedekleme., Backup Folder ID,Yedekleme Klasörü Kimliği, Backup Folder Name,Yedekleme Klasörü Adı, -Before Cancel,İptal Etmeden Önce, +Before Cancel,İptalden Önce, Before Delete,Silmeden Önce, -Before Insert,Yerleştirmeden Önce, +Before Insert,Eklemeden Önce, Before Save,Kaydetmeden Önce, Before Save (Submitted Document),Kaydetmeden Önce (Gönderilen Belge), Before Submit,Göndermeden Önce, -Blank Template,Boş şablon, -Callback URL,Geri arama URL'si, +Blank Template,Boş Şablon, +Callback URL,Geri arama URL'si, Cancel All Documents,Tüm Belgeleri İptal Et, Cancelling documents,Belgeleri iptal etme, Cannot match column {0} with any field,{0} sütunu herhangi bir alanla eşleştirilemiyor, -Change,Değişiklik, -Change User,Kullanıcı Değiştir, +Change,Değiştir, +Change User,Kullanıcıyı Değiştir, Check the Error Log for more information: {0},Daha fazla bilgi için Hata Günlüğünü kontrol edin: {0}, Clear Cache and Reload,Önbelleği ve Yeniden Yüklemeyi Temizle, Clear Filters,Filtreleri Temizle, @@ -3214,7 +3235,7 @@ Click on Authorize Google Drive Access to authorize Google Drive Access., Click on a file to select it.,Seçmek için bir dosyaya tıklayın., Click on the link below to approve the request,İsteği onaylamak için aşağıdaki linke tıklayın, Click on the lock icon to toggle public/private,Herkese açık / özel arasında geçiş yapmak için kilit simgesine tıklayın, -Click on {0} to generate Refresh Token.,Yenileme Tokenini oluşturmak için {0} 'a tıklayın., +Click on {0} to generate Refresh Token.,Yenileme Tokenini oluşturmak için {0} 'a tıklayın., Close Condition,Yakın Durumu, Column {0},{0} sütunu, Columns / Fields,Sütunlar / Alanlar, @@ -3228,24 +3249,24 @@ Contribute Translations,Çevirilere Katkıda Bulunun, Contributed,Katkıda, Controller method get_razorpay_order missing,Denetleyici yöntemi get_razorpay_order eksik, Copied to clipboard.,Panoya kopyalandı., -Core Modules {0} cannot be searched in Global Search.,Global Arama'da {0} Çekirdek Modülleri aranamıyor., +Core Modules {0} cannot be searched in Global Search.,Global Arama'da {0} Çekirdek Modülleri aranamıyor., Could not create Razorpay order. Please contact Administrator,Razorpay siparişi oluşturulamadı. Lütfen Yönetici ile iletişime geçin, Could not create razorpay order,Razorpay siparişi oluşturulamadı, -Create Log,Günlük Oluştur, -Create your first {0},İlk {0} ürününüzü oluşturun, +Create Log,Log Oluştur, +Create your first {0},İlk {0} kaydını oluşturun, Created {0} records successfully.,{0} kayıt başarıyla oluşturuldu., -Cron,cron, +Cron,Cron, Cron Format,Cron Biçimi, -Daily Events should finish on the Same Day.,Günlük Olaylar Aynı Gün'de Bitmelidir., +Daily Events should finish on the Same Day.,Günlük Olaylar Aynı Gün'de Bitmelidir., Daily Long,Günlük Uzun, -Default Role on Creation,Yaratılışta Varsayılan Rol, -Default Theme,Varsayılan tema, +Default Role on Creation,Oluşturmada Varsayılan Rol, +Default Theme,Varsayılan Tema, Default {0},Varsayılan {0}, -Delete All,Hepsini sil, +Delete All,Tümünü Sil, Do you want to cancel all linked documents?,Bağlantılı tüm belgeleri iptal etmek istiyor musunuz?, -DocType Action,DocType İşlemi, -DocType Event,DocType Etkinliği, -DocType Link,DocType Bağlantısı, +DocType Action,Belge Türü İşlemi, +DocType Event,Belge Türü Etkinliği, +DocType Link,Belge Türü Bağlantısı, Document Share,Belge Paylaşımı, Document Tag,Belge Etiketi, Document Title,Belge başlığı, @@ -3258,9 +3279,9 @@ Documentation Link,Doküman Bağlantısı, Don't Import,Alma, Don't Send Emails,E-posta Gönderme, "Drag and drop files, ","Dosyaları sürükleyip bırakın,", -Drop,Düşürmek, +Drop,Bırak, Drop Here,Buraya bırak, -Drop files here,dosyaları buraya bırak, +Drop files here,Dosyaları buraya bırak, Dynamic Template,Dinamik Şablon, ERPNext Role,ERPNext Rolü, Email / Notifications,E-posta Bildirimleri, @@ -3268,10 +3289,10 @@ Email Account setup please enter your password for: {0},E-posta Hesabı kurulumu Email Address whose Google Contacts are to be synced.,Google Kişileri senkronize edilecek e-posta adresi., "Email ID must be unique, Email Account already exists for {0}","E-posta kimliği benzersiz olmalıdır, {0} için E-posta Hesabı zaten var", Email IDs,E-posta Noları, -Enable Allow Auto Repeat for the doctype {0} in Customize Form,Özelleştir Formunda {0} doctype için Otomatik Tekrarlamaya İzin Ver'i etkinleştirin, +Enable Allow Auto Repeat for the doctype {0} in Customize Form,Formu Özelleştir'de {0} doküman türü için Otomatik Tekrara İzin Ver'i etkinleştirin, Enable Automatic Linking in Documents,Belgelerde Otomatik Bağlamayı Etkinleştirme, Enable Email Notifications,E-posta Bildirimlerini Etkinleştir, -Enable Google API in Google Settings.,Google Ayarlarında Google API'yi etkinleştirin., +Enable Google API in Google Settings.,Google Ayarlarında Google API'yi etkinleştirin., Enable Security,Güvenliği Etkinleştir, Energy Point,Enerji Noktası, Enter Client Id and Client Secret in Google Settings.,Google Ayarları’na Müşteri Kimliği ve Müşteri Sırrı girin., @@ -3295,13 +3316,13 @@ Export Type,İhracat Şekli, Export {0} records,{0} kayıtlarını dışa aktar, Failed to connect to the Event Producer site. Retry after some time.,Etkinlik Üreticisi sitesine bağlanılamadı. Bir süre sonra tekrar deneyin., Failed to create an Event Consumer or an Event Consumer for the current site is already registered.,Mevcut site için Etkinlik Tüketicisi veya Etkinlik Tüketicisi oluşturulamadı zaten kayıtlı., -Failure,başarısızlık, +Failure,Başarısız, Fetching default Global Search documents.,Varsayılan Global Arama belgelerini alma., Fetching posts...,Yayınlar alınıyor ..., Field Mapping,Alan Eşleme, Field To Check,Kontrol Edilecek Alan, File Information,Dosya bilgisi, -Filter By,Tarafından filtre, +Filter By,Filtrele, Filtered Records,Filtrelenmiş Kayıtlar, Filters applied for {0},{0} için uygulanan filtreler, Finished,bitirdi, @@ -3312,13 +3333,13 @@ For Document Event,Belge Etkinliği İçin, "For performance, only the first 100 rows were processed.","Performans için, yalnızca ilk 100 satır işlendi.", Form URL-Encoded,Form URL Kodlu, Frequently Visited Links,Sık Ziyaret Edilen Bağlantılar, -From Date,Tarihinden itibaren, +From Date,Başlangıç Tarihi, From User,Kullanıcıdan, Global Search DocType,Genel Arama Doküman Türü, Global Search Document Types Reset.,Genel Arama Doküman Tipleri Sıfırlama., Global Search Settings,Global Arama Ayarları, Global Shortcuts,Global Kısayollar, -Go,Gitmek, +Go,Git, Go to next record,Bir sonraki kayda git, Go to previous record,Önceki kayda git, Google API Settings.,Google API Ayarları., @@ -3334,14 +3355,14 @@ Google Calendar Integration.,Google Takvim Entegrasyonu., Google Calendar has been configured.,Google Takvim yapılandırıldı., Google Contacts,Google Kişileri, "Google Contacts - Could not sync contacts from Google Contacts {0}, error code {1}.","Google Kişileri - {0} Google Rehberindeki kişiler senkronize edilemedi, hata kodu {1}.", -"Google Contacts - Could not update contact in Google Contacts {0}, error code {1}.","Google Kişileri - {0} Google Kişileri'nde kişi güncellenemedi, hata kodu {1}.", +"Google Contacts - Could not update contact in Google Contacts {0}, error code {1}.","Google Kişileri - {0} Google Kişileri'nde kişi güncellenemedi, hata kodu {1}.", Google Contacts Id,Google Kişiler Kimliği, Google Contacts Integration is disabled.,Google Rehber Entegrasyonu devre dışı., Google Contacts Integration.,Google Rehber Entegrasyonu., Google Contacts has been configured.,Google Kişileri yapılandırıldı., Google Drive,Google Drive, -Google Drive - Could not create folder in Google Drive - Error Code {0},Google Drive - Google Drive'da klasör oluşturulamadı - Hata Kodu {0}, -Google Drive - Could not find folder in Google Drive - Error Code {0},Google Drive - Google Drive'da klasör bulunamadı - Hata Kodu {0}, +Google Drive - Could not create folder in Google Drive - Error Code {0},Google Drive - Google Drive'da klasör oluşturulamadı - Hata Kodu {0}, +Google Drive - Could not find folder in Google Drive - Error Code {0},Google Drive - Google Drive'da klasör bulunamadı - Hata Kodu {0}, Google Drive Backup Successful.,Google Drive Yedekleme Başarılı., Google Drive Backup.,Google Drive Yedekleme., Google Drive Integration.,Google Drive Entegrasyonu., @@ -3359,7 +3380,7 @@ HTML Page,HTML Sayfası, Has Mapping,Haritalama Var, Hourly Long,Saatlik Uzun, "If non-standard port (e.g. POP3: 995/110, IMAP: 993/143)","Standart olmayan bağlantı noktası ise (örneğin, POP3: 995/110, IMAP: 993/143)", -If the document has different field names on the Producer and Consumer's end check this and set up the Mapping,Belgenin Üretici ve Tüketici tarafında farklı alan adları varsa bunu kontrol edin ve Eşleme'yi ayarlayın, +If the document has different field names on the Producer and Consumer's end check this and set up the Mapping,Belgenin Üretici ve Tüketici tarafında farklı alan adları varsa bunu kontrol edin ve Eşleme'yi ayarlayın, If this is checked the documents will have the same name as they have on the Event Producer's site,"Bu işaretlenirse, belgeler Etkinlik Üreticisinin sitesiyle aynı ada sahip olur", Illegal SQL Query,Geçersiz SQL Sorgusu, Import File,Önemli dosya, @@ -3377,18 +3398,29 @@ Incoming Change,Gelen Değişiklik, Invalid Filter Value,Geçersiz Filtre Değeri, Invalid URL,Geçersiz URL, Invalid field name: {0},Geçersiz alan adı: {0}, -Invalid file URL. Please contact System Administrator.,Geçersiz dosya URL'si. Lütfen Sistem Yöneticisi ile irtibata geçin., +Invalid file URL. Please contact System Administrator.,Geçersiz dosya URL'si. Lütfen Sistem Yöneticisi ile irtibata geçin., Invalid include path,Geçersiz yol ekle, Invalid username or password,Geçersiz kullanıcı adı veya şifre, Is Primary,Birincil mi, -Is Primary Mobile,Birincil Mobil mi, +Is Primary Mobile,Birincil Cep mi, Is Primary Phone,Birincil Telefon mu, Is Tree,Ağaç mı, JSON Request Body,JSON İstek Organı, Javascript is disabled on your browser,Tarayıcınızda Javascript devre dışı, Job,İş, Jump to field,Alana atla, -Keyboard Shortcuts,Klavye kısayolları, +Documentation,Dokümantasyon, +User Forum,Kullanıcı Forumu, +Report an Issue,Sorun Bildir, +About,Hakkında +Frappe Support,Frappe Desteği, +Keyboard Shortcuts,Klavye Kısayolları, +My Profile,Profilim, +My Settings,Ayarlarım, +Manage Subscriptions,Abonelikleri Yönet, +Toggle Full Width,Tam Genişliği Değiştir, +Toggle Theme,Temayı Değiştir, +Log out,Çıkış Yap, LDAP Group,LDAP Grubu, LDAP Group Field,LDAP Grup Alanı, LDAP Group Mapping,LDAP Grup Eşlemesi, @@ -3404,12 +3436,14 @@ Last Backup On,Son Yedekleme Açık, Last Execution,Son Yürütme, Last Sync On,Son Senkronizasyon Açık, Last Update,Son Güncelleme, -Last refreshed,Son yenilendi, -Link Document Type,Bağlantı Doküman Türü, -Link Fieldname,Bağlantı Alan Adı, +Last refreshed,Son Yenilenme, +Link Document Type,Belge Türü Bağlantısı, +Link Fieldname,Alan Adı Bağlantısı, Loading import file...,İçe aktarılan dosya yükleniyor ..., Local Document Type,Yerel Belge Türü, -Log Data,Günlük Verileri, +Log Data,Log Verisi, +There are no upcoming events for you.,Sizin için yaklaşan etkinlik yok., +Looks like you haven’t received any notifications.,Herhangi bir bildirim almadığınız anlaşılıyor., Main Section (HTML),Ana Bölüm (HTML), Main Section (Markdown),Ana Bölüm (Markdown), "Maintains a Log of all inserts, updates and deletions on Event Producer site for documents that have consumers.","Tüketici içeren belgeler için Event Producer sitesindeki tüm eklerin, güncellemelerin ve silme işlemlerinin bir kaydını tutar.", @@ -3448,24 +3482,26 @@ No filters found,Filtre bulunamadı, No more items to display,Görüntülenecek başka öğe yok, No more posts,Başka mesaj yok, No new Google Contacts synced.,Yeni Google Kişisi senkronize edilmedi., +No New notifications,Yeni bildirim yok, No pending or current jobs for this site,Bu site için beklemede veya mevcut iş yok, No posts yet,Henüz yayın yok, No records will be exported,Hiçbir kayıt dışa aktarılmayacak, -No results found for {0} in Global Search,Global Arama'da {0} için sonuç bulunamadı, +No results found for {0} in Global Search,Global Arama'da {0} için sonuç bulunamadı, No user found,Kullanıcı bulunamadı, +No function matches the given name and argument types. You might need to add explicit type casts.,Verilen ad ve bağımsız değişken türleriyle eşleşen işlev yok. Açık tür atamaları eklemeniz gerekebilir., Not Specified,Belirtilmemiş, Notification Log,Bildirim Günlüğü, -Notification Settings,Bildirim ayarları, +Notification Settings,Bildirim Ayarları, Notification Subscribed Document,Bildirim Abone Belgesi, Notifications Disabled,Bildirimler Devre Dışı, Number of Groups,Grup Sayısı, OAuth Client ID,OAuth Müşteri Kimliği, OTP setup using OTP App was not completed. Please contact Administrator.,OTP App kullanarak OTP kurulumu tamamlanmadı. Lütfen Yönetici ile iletişime geçin., Only one {0} can be set as primary.,Yalnızca bir {0} birincil olarak ayarlanabilir., -Open Awesomebar,Awesomebar'ı açın, +Open Awesomebar,Awesomebar'ı açın, Open Chat,Açık sohbet, Open Documents,Açık Belgeler, -Open Help,Yardım'ı aç, +Open Help,Yardım'ı aç, Open Settings,Ayarları aç, Open list item,Liste öğesini aç, Organizational Unit for Users,Kullanıcılar için Organizasyon Birimi, @@ -3480,16 +3516,16 @@ Please find attached {0}: {1},Lütfen ekte {0} bul: {1}, Please select applicable Doctypes,Lütfen geçerli Dokümanları seçin, Portrait,Portre, Press Alt Key to trigger additional shortcuts in Menu and Sidebar,Menü ve Kenar Çubuğundaki ek kısayolları tetiklemek için Alt Tuşuna basın., -Print Settings...,Yazdırma Ayarları ..., +Print Settings...,Baskı Ayarları ..., Producer Document Name,Üretici Doküman Adı, -Producer URL,Üretici URL'si, +Producer URL,Üretici URLsi, Property Depends On,Mülkiyet Bağlıdır, Pull from Google Calendar,Google Takvim’den çekin, -Pull from Google Contacts,Google Kişiler'den çekin, +Pull from Google Contacts,Google Kişiler'den çekin, Pulled from Google Calendar,Google Takvim’den Çekti, Pulled from Google Contacts,Google Kişilerden Alındı, Push to Google Calendar,Google Takvim’e git, -Push to Google Contacts,Google Kişileri'ne git, +Push to Google Contacts,Google Kişilerine git, Queue / Worker,Sıra / İşçi, RAW Information Log,RAW Bilgi Günlüğü, Raw Printing Settings...,Ham Baskı Ayarları ..., @@ -3502,7 +3538,7 @@ Remote Document Type,Uzak Belge Türü, Repeat on Last Day of the Month,Ayın Son Gününde Tekrarla, Repeats {0},{0} tekrarları, Report Information,Rapor Bilgisi, -Report with more than 10 columns looks better in Landscape mode.,"Manzara modunda, 10'dan fazla sütunlu rapor daha iyi görünür.", +Report with more than 10 columns looks better in Landscape mode.,"Manzara modunda, 10'dan fazla sütunlu rapor daha iyi görünür.", Request Structure,İstek Yapısı, Restricted,Kısıtlı, Restrictions,Kısıtlamalar, @@ -3526,10 +3562,10 @@ Select Date Range,Tarih Aralığı Seçin, Select Field,Alan Seç, Select Field...,Alan Seçiniz ..., Select Filters,Filtreleri Seç, -Select Google Calendar to which event should be synced.,Etkinliğin senkronize edilmesi gereken Google Takvim'i seçin., -Select Google Contacts to which contact should be synced.,Kişinin senkronize edileceği Google Rehber'i seçin., +Select Google Calendar to which event should be synced.,Etkinliğin senkronize edilmesi gereken Google Takvim'i seçin., +Select Google Contacts to which contact should be synced.,Kişinin senkronize edileceği Google Rehber'i seçin., Select Group By...,Grupla Seç ..., -Select Mandatory,zorunlu seçin, +Select Mandatory,Zorunlu Seç, Select atleast 2 actions,En az 2 eylem seç, Select list item,Liste öğesini seçin, Select multiple list items,Birden fazla liste öğesi seç, @@ -3549,15 +3585,15 @@ Show More Activity,Daha Fazla Etkinlik Göster, Show Traceback,Geri İzlemeyi Göster, Show Warnings,Uyarıları Göster, Showing only first {0} rows out of {1},{1} içinden yalnızca ilk {0} satır gösteriliyor, -"Simple Python Expression, Example: Status in (""Invalid"")","Basit Python İfadesi, Örnek: Durum ("Geçersiz")", +"Simple Python Expression, Example: Status in (""Invalid"")","Basit Python İfadesi, Örnek: Durum ('Geçersiz')", Skipping Untitled Column,Adsız Sütunu Atla, Skipping column {0},{0} sütunu atlanıyor, Social Home,Sosyal Ev, -Some columns might get cut off when printing to PDF. Try to keep number of columns under 10.,PDF'ye yazdırırken bazı sütunlar kesilebilir. Sütun sayısını 10'un altında tutmaya çalışın., -Something went wrong during the token generation. Click on {0} to generate a new one.,Jeton üretimi sırasında bir şeyler ters gitti. Yeni bir tane oluşturmak için {0} 'a tıklayın., +Some columns might get cut off when printing to PDF. Try to keep number of columns under 10.,PDF'ye yazdırırken bazı sütunlar kesilebilir. Sütun sayısını 10'un altında tutmaya çalışın., +Something went wrong during the token generation. Click on {0} to generate a new one.,Jeton üretimi sırasında bir şeyler ters gitti. Yeni bir tane oluşturmak için {0} 'a tıklayın., Submit After Import,İçe Aktardıktan Sonra Gönder, Submitting...,Gönderiliyor ..., -Success! You are good to go 👍,Başarı! Gitmek için iyi birisin 👍, +Success! You are good to go 👍,Başarı! İlerleme için iyi durumdasın 👍, Successful Transactions,Başarılı İşlemler, Successfully Submitted!,Başarıyla gönderildi!, Successfully imported {0} record.,{0} kaydı başarıyla içe aktarıldı., @@ -3569,7 +3605,7 @@ Sync Contacts,Kişileri Eşitle, Sync with Google Calendar,Google Takvim ile senkronize et, Sync with Google Contacts,Google Kişileri ile senkronize et, Synced,Senkronize edildi, -Syncing,Senkronizasyon, +Syncing,Senkronize ediliyor, Syncing {0} of {1},{1} üzerinden {0} senkronizasyonu, Tag Link,Etiket Bağlantısı, Take Backup,Yedekleme al, @@ -3591,20 +3627,20 @@ This cannot be undone,Bu geri alınamaz, Time Format,Zaman formatı, Time series based on is required to create a dashboard chart,Bir gösterge tablosu grafiği oluşturmak için zamana dayalı zaman serileri gerekir, Time {0} must be in format: {1},{0} süresi şu biçimde olmalıdır: {1}, -"To configure Auto Repeat, enable ""Allow Auto Repeat"" from {0}.",Otomatik Tekrarı yapılandırmak için {0} 'dan "Otomatik Tekrarlamaya İzin Ver" i etkinleştirin., +"To configure Auto Repeat, enable ""Allow Auto Repeat"" from {0}.",Otomatik Tekrarı yapılandırmak için {0} 'dan 'Otomatik Tekrarlamaya İzin Ver' i etkinleştirin., To enable it follow the instructions in the following link: {0},Etkinleştirmek için aşağıdaki bağlantıdaki talimatları izleyin: {0}, "To use Google Calendar, enable {0}.",Google Takvim’i kullanmak için {0} seçeneğini etkinleştirin., -"To use Google Contacts, enable {0}.",Google Kişileri'ni kullanmak için {0} seçeneğini etkinleştirin., -"To use Google Drive, enable {0}.",Google Drive'ı kullanmak için {0} seçeneğini etkinleştirin., +"To use Google Contacts, enable {0}.",Google Kişileri'ni kullanmak için {0} seçeneğini etkinleştirin., +"To use Google Drive, enable {0}.",Google Drive'ı kullanmak için {0} seçeneğini etkinleştirin., Today's Events,Bugünkü Etkinlikler, -Toggle Public/Private,Genel / Özel'e Geçiş Yap, +Toggle Public/Private,Genel / Özel'e Geçiş Yap, Tracks milestones on the lifecycle of a document if it undergoes multiple stages.,"Birden çok aşamadan geçerse, bir belgenin kullanım ömrünün kilometre taşlarını izler.", Tree structures are implemented using Nested Set,"Ağaç yapıları, Yuvalanmış Küme kullanılarak uygulanır", Trigger Primary Action,Birincil İşlemi Tetikle, URL for documentation or help,Dokümantasyon veya yardım için URL, -URL must start with 'http://' or 'https://',"URL, 'http: //' veya 'https: //' ile başlamalıdır.", -Unchanged,değişmemiş, -Unpin,sabitlemesini, +URL must start with 'http://' or 'https://',"URL, 'http: //' veya 'https: //' ile başlamalıdır.", +Unchanged,Değiştirilmedi, +Unpin,Sabitlemeyi kaldır, Untitled Column,Başlıksız Sütun, Untranslated,çevrilmemiş, Upcoming Events,Yaklaşan Etkinlikler, @@ -3612,21 +3648,21 @@ Update Existing Records,Mevcut Kayıtları Güncelle, Update Type,Güncelleme Türü, Updated To A New Version 🎉,Yeni Bir Sürüme Güncellenmiş 🎉, "Updating {0} of {1}, {2}","{1}, {2} ürününün {0} güncellenmesi", -Upload file,Dosya yükleme, -Upload {0} files,{0} dosya yükle, -Uploaded To Google Drive,Google Drive'a Yüklendi, +Upload file,Dosya yükle, +Upload {0} files,{0} dosyaları yükle, +Uploaded To Google Drive,Google Drive'a Yüklendi, Uploaded successfully,Başarıyla yüklendi, Uploading {0} of {1},{1} üzerinden {0} yüklüyor, Use SSL for Outgoing,Giden için SSL kullan, Use Same Name,Aynı Adı Kullan, Used For Google Maps Integration.,Google Haritalar Entegrasyonu İçin Kullanıldı., User ID Property,Kullanıcı Kimliği Özelliği, -User Profile,Kullanıcı profili, -User Settings,Kullanıcı ayarları, +User Profile,Kullanıcı Profili, +User Settings,Kullanıcı Ayarları, User does not exist,Kullanıcı yok, User {0} has requested for data deletion,{0} kullanıcısı veri silme talebinde bulundu, Users assigned to the reference document will get points.,Referans dokümana atanan kullanıcılar puan kazanacaktır., -Value must be one of {0},"Değer, {0} 'dan biri olmalı", +Value must be one of {0},"Değer, {0} 'dan biri olmalı", Value {0} missing for {1},{1} için {0} değeri eksik, Verification,Doğrulama, Verification Code,Doğrulama kodu, @@ -3647,7 +3683,7 @@ You are not allowed to export {} doctype,{} Doktipini dışa aktarmanıza izin v You can try changing the filters of your report.,Raporunuzun filtrelerini değiştirmeyi deneyebilirsiniz., You do not have permissions to cancel all linked documents.,Bağlı tüm belgeleri iptal etme izniniz yok., You need to create these first: ,Önce bunları oluşturmanız gerekir:, -You need to enable JavaScript for your app to work.,Uygulamanızın çalışması için JavaScript'i etkinleştirmeniz gerekir., +You need to enable JavaScript for your app to work.,Uygulamanızın çalışması için JavaScript'i etkinleştirmeniz gerekir., You need to install pycups to use this feature!,Bu özelliği kullanmak için pycups yüklemeniz gerekiyor!, Your Target,Senin hedefin, "browse,","Araştır,", @@ -3678,8 +3714,8 @@ via Data Import,Veri Alma yoluyla, {0} should not be same as {1},"{0}, {1} ile aynı olmamalıdır", {0} translations pending,{0} çeviri bekleniyor, {0} {1} is linked with the following submitted documents: {2},{0} {1} şu gönderilen belgelerle bağlantılıdır: {2}, -"{0}: Failed to attach new recurring document. To enable attaching document in the auto repeat notification email, enable {1} in Print Settings",{0}: Yinelenen yeni belge eklenemedi. Otomatik tekrar bildirim e-postasında belge eklemeyi etkinleştirmek için Yazdırma Ayarları'nda {1} seçeneğini etkinleştirin, -{0}: Fieldname cannot be one of {1},{0}: Alan adı {1} 'den biri olamaz, +"{0}: Failed to attach new recurring document. To enable attaching document in the auto repeat notification email, enable {1} in Print Settings",{0}: Yinelenen yeni belge eklenemedi. Otomatik tekrar bildirim e-postasında belge eklemeyi etkinleştirmek için Yazdırma Ayarları'nda {1} seçeneğini etkinleştirin, +{0}: Fieldname cannot be one of {1},{0}: Alan adı {1} 'den biri olamaz, {} Complete,{} Tamamlayınız, ← Back to upload files,← Dosya yüklemeye geri dön, Activity,Aktivite, @@ -3698,14 +3734,14 @@ Chart,Grafik, Close,Kapat, Communication,İletişim, Compact Item Print,Kompakt Öğe Yazdır, -Company,şirket, -Complete,Komple, +Company,Şirket, +Complete,Tamamla, Completed,Tamamlandı, -Continue,Devam etmek, -Country,ülke, -Creating {0},{0} oluşturma, -Currency,Para birimi, -Customize,Özelleştirme, +Continue,Devam et, +Country,Ülke, +Creating {0},{0} oluşturuluyor, +Currency,Para Birimi, +Customize,Özelleştir, Daily,Günlük, Date,Tarih, Dear,Sevgili, @@ -3714,19 +3750,20 @@ Delete,Sil, Description,Açıklama, Designation,Atama, Disabled,Devredışı, -Doctype,DOCTYPE, +Doctype,Belge Türü, Download Template,Şablonu İndir, -Dr,Dr, -Due Date,Bitiş tarihi, +Dr,Borç, +Due Date,Bitiş Tarihi, Duplicate,Kopyala, +Edit Full Form,Tam Formu Düzenle, Edit Profile,Profili Düzenle, -Email,EPosta, +Email,E-posta, End Time,Bitiş Zamanı, Enter Value,Değeri girin, Entity Type,Varlık Türü, Error,Hata, Expired,Süresi Doldu, -Export,Dışarı aktar, +Export,Dışarı Aktar, Export not allowed. You need {0} role to export.,İhracat izin verilmiyor. Vermek {0} rol gerekir., Fetching...,Getiriliyor ..., Field,Alan, @@ -3734,19 +3771,19 @@ File Manager,Dosya Yöneticisi, Filters,Filtreler, Get Items,Ürünleri alın, Goal,Hedef, -Group,grup, +Group,Grup, Group Node,Grup Düğüm, Help,Yardım, -Help Article,Yardım Madde, +Help Article,Yardım Maddesi, Home,Ana Sayfa, Import Data from CSV / Excel files.,CSV / Excel dosyalarından Veri Aktar., -In Progress,Devam etmekte, +In Progress,Devam ediyor, Intermediate,Orta düzey, -Invite as User,Kullanıcı olarak davet, +Invite as User,Kullanıcı olarak davet et, "It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Sunucunun şerit yapılandırmasında bir sorun var gibi görünüyor. Arıza durumunda, tutar hesabınıza iade edilir.", Loading...,Yükleniyor..., Location,Konum, -Looks like someone sent you to an incomplete URL. Please ask them to look into it.,Birisi eksik URL'ye gönderdi benziyor. içine bakmak için isteyin., +Looks like someone sent you to an incomplete URL. Please ask them to look into it.,Birisi eksik URL'ye gönderdi benziyor. içine bakmak için isteyin., Master,Ana Kaynak, Message,İleti, Missing Values Required,Gerekli Eksik Değerler, @@ -3756,16 +3793,16 @@ Name,İsim, Newsletter,Bülten, Not Allowed,İzin Değil, Note,Not, -Offline,Çevrimdışı, +Offline,Offline, Open,Açık, Page {0} of {1},{1} Sayfadan {0}., Pay,Ödeme, Pending,Bekliyor, Phone,Telefon, Please click on the following link to set your new password,Yeni şifrenizi ayarlamak için aşağıdaki linke tıklayınız, -Please select another payment method. Stripe does not support transactions in currency '{0}',"Lütfen başka bir ödeme yöntemi seçin. Şerit, '{0}' para birimi işlemlerini desteklemez", +Please select another payment method. Stripe does not support transactions in currency '{0}',"Lütfen başka bir ödeme yöntemi seçin. Şerit, '{0}' para birimi işlemlerini desteklemez", Please specify,Lütfen belirtiniz, -Printing,Baskı, +Printing,Yazdırma, Priority,Öncelik, Project,Proje, Quarterly,Üç ayda bir, @@ -3773,24 +3810,25 @@ Queued,Sıraya alınmış, Quick Entry,Hızlı Girişi, Reason,Nedeni, Refreshing,Güncelleniyor, -Rename,Yeniden adlandır, +Rename,Yeniden Adlandır, +Copy to Clipboard,Panoya Kopyala, Reset,Sıfırla, -Review,gözden geçirmek, -Room,oda, -Room Type,Oda tipi, +Review,Gözden geçir, +Room,Oda, +Room Type,Oda Tipi, Save,Kaydet, Search results for,için arama sonuçları, Select All,Tümünü Seç, Send,Gönder, -Sending,Gönderme, -Server Error,Server hatası, +Sending,Gönderiliyor, +Server Error,Sunucu Hatası, Set,Ayarla, Setup,Kurulum, Setup Wizard,Kurulum Sihirbazı, Size,Boyut, -Sr,Sr, +Sr,Kıdemli, Start,Başlangıç, -Start Time,Başlangıç Zamanı, +Start Time,Başlama Zamanı, Status,Durum, Submitted,Tanzim Edildi, Tag,Etiket, @@ -3801,7 +3839,7 @@ Total,Toplam, Totals,Toplamlar, Tuesday,Salı, Type,Türü, -Update,Güncelleme, +Update,Güncelle, User {0} is disabled,Kullanıcı {0} devre dışı, Users and Permissions,Kullanıcılar ve İzinler, Warehouse,Depo, @@ -3811,14 +3849,14 @@ Yearly,Yıllık, You,Siz, You can also copy-paste this link in your browser,Ayrıca bu linki kopyalayıp tarayıcınıza yapıştırabilirsiniz, and,ve, -{0} Name,{0} Ad, +{0} Name,{0} Adı, {0} is required,{0} gereklidir, ALL,Tümü, Attach File,Dosya Eki, Barcode,Barkod, Beginning with,İle başlayan, -Bold,cesur, -CANCELLED,İptal Edilmiş, +Bold,Kalın, +CANCELLED,İptal Edildi, Calendar,Takvim, Center,Merkez, Clear,Açık, @@ -3826,89 +3864,90 @@ Comment,Yorum Yap, Comments,Yorumlar, DRAFT,Taslak, Dashboard,Gösterge Paneli, -DocType,DocType, +DocType,BelgeTipi, Download,İndir, EMail,E-posta, Edit in Full Page,Tam Sayfada Düzenle, Email Inbox,E-posta Gelen Kutusu, File,Dosya, -Forward,ileri, +Forward,İlet, Icon,ikon, In,IN, Inbox,Gelen kutusu, Insert New Records,Yeni Kayıt Ekle, JavaScript,Javascript, LDAP Settings,LDAP Ayarları, -Left,Bırakmak, -Like,Sevmek, +Left,Bırak, +Like,Benzer, Link,bağlantı, -Logged in,Giriş, +Logged in,Giriş yapıldı, New,Yeni, Not Found,Bulunamadı, -Not Like,Gibi değil, +Not Like,Benzer değil, Notify by Email,E-postayla Bildir, -Now,şimdi, -Off,kapalı, +Now,Şimdi, +Off,Kapalı, One of,Biri, Page,Sayfa, Print,Yazdır, Reference Name,referans adı, Refresh,Yenile, -Repeat,tekrarlamak, +Repeat,Tekrarla, Right,Sağ, Roles HTML,Roller HTML, Scheduled To Send,göndermek için planlanmış, Search Results for ,İçin arama sonuçları, Send Notification To,Için Bildirim gönder, -Success,başarı, +Success,Başarılı, Tags,Etiketler, -Time,zaman, +Time,Zaman, Updated Successfully,başarıyla güncellendi, Upload,Karşıya Yükle, -User ,kullanıcı, -Value,değer, +User,Kullanıcı, +Value,Değer, +Settings,Ayarlar, Web Link,Web bağlantısı, Your Email Address,E-posta adresiniz, Desktop,Masaüstü, Usage Info,kullanım Bilgisi, Download Backups,Yedeklemeleri İndir, Recorder,Ses kayıt cihazı, -Role Permissions Manager,Rol İzinler Müdürü, +Role Permissions Manager,Rol İzin Yöneticisi, Translation Tool,Çeviri Aracı, Awaiting password,Şifre bekleniyor, Current status,Şu anki durum, Download template,Şablonu indir, -Edit in full page,tam sayfa düzenle, +Edit in full page,Tüm sayfada düzenle, Email Id,E-posta kimliği, Email address,E-posta Adresi, Ends on,Biteceği tarih, Half-yearly,Yarı yıllık, Hidden,Gizli, Javascript,JavaScript, -Ldap settings,Ldap ayarları, -Mobile number,Cep numarası, +Ldap settings,LDAP Ayarları, +Mobile number,Cep Numarası, Mx,mx, No,Hiç, Not found,Bulunamadı, Notes:,Notlar:, Notify by email,E-postayla bildir, -Permitted Documents For User,Kullanıcı için izin Belgeler, +Permitted Documents For User,Kullanıcı için İzin verilen Belgeler, Reference Docname,Referans DokümanAdı, -Reference Doctype,Referans DocType, +Reference Doctype,Referans Belge Türü, Reference name,Referans Adı, Roles Html,Roller Html, -Row #,Kürek çekmek #, -Scheduled to send,Gönderme Zamanı, -Select Doctype,DocType'ı seçin, +Row #,Satır No #, +Scheduled to send,Göndermek için planlandı, +Select Doctype,Belge türünü seçin, Send Email for Successful backup,Başarılı Yedekleme için E-posta Gönder, -Sign up,kaydol, +Sign up,Kaydol, Time format,Zaman formatı, Upload failed,Yükleme başarısız, -User Id,Kullanıcı kimliği, +User Id,Kullanıcı ID, Yes,Evet, -Your email address,e, -added,katma, -added {0},Eklenen {0}, +Your email address,Eposta adresiniz, +added,eklendi, +added {0},{0} eklendi, barcode,barkod, beginning with,ile başlayan, blue,mavi, @@ -3916,39 +3955,39 @@ bold,kalın, book,kitap, calendar,takvim, certificate,sertifika, -check,Kontrol, -clear,açık, -comment,Yorum yap, +check,kontrol et, +clear,temizle, +comment,yorum yap, comments,yorumlar, -created,Oluşturuldu, -danger,Tehlike, +created,oluşturuldu, +danger,tehlike, dashboard,gösterge paneli, download,indir, -edit,Düzenle, -email inbox,E-posta gelen kutusu, +edit,düzenle, +email inbox,email gelen kutusu, file,dosya, filter,filtre, flag,bayrak, -font,Yazı, -forward,ileri, +font,font, +forward,ilet, green,yeşil, -home,ev, +home,anasayfa icon,ikon, -inbox,Gelen Kutusu, -like,Beğen, -link,Bağlantı, +inbox,gelen kutusu, +like,benzer, +link,link, list,liste, -lock,kilitlemek, +lock,kilitle, logged in,Girildi, -message,Mesaj, -module,Modül, +message,mesaj, +module,modül, move,hareket, music,müzik, new,yeni, now,şimdi, off,kapalı, -one of,Bir, -orange,Portakal, +one of,biri, +orange,portakal, page,sayfa, print,Baskı, purple,mor, @@ -3958,19 +3997,19 @@ refresh,yenile, remove,Kaldır, response,tepki, search,arama, -share,Pay, -stop,durdurmak, -success,başarı, +share,paylaş, +stop,durdur, +success,başarılı, tag,etiket, tags,etiketler, tasks,görevler, time,Zaman, -trash,çöp, -upload,yükleme, -user,Kullanıcı, +trash,çöp kovası, +upload,yükle, +user,kullanıcı, value,değer, -web link,Web Link, -yellow,Sarı, +web link,web link, +yellow,sarı, Not permitted,İzin verilmedi, Add Chart to Dashboard,Gösterge Tablosuna Grafik Ekle, Add to Dashboard,Gösterge Tablosuna Ekle, @@ -3996,7 +4035,7 @@ Developer Mode Only,Yalnızca Geliştirici Modu, Disable User Customization,Kullanıcı Özelleştirmeyi Devre Dışı Bırak, For example: {} Open,Örneğin: {} Aç, Link Cards,Bağlantı Kartları, -Link To,Bağlamak, +Link To,Bağla, Onboarding,Onboarding, Percentage,Yüzde, Pie,Turta, @@ -4007,15 +4046,15 @@ Shortcuts,Kısayollar, X Field,X Alanı, Y Axis,Y Ekseni, workspace,çalışma alanı, -Setup > User,Kurulum> Kullanıcı, -Setup > Customize Form,Kurulum> Formu Özelleştir, -Setup > User Permissions,Kurulum> Kullanıcı İzinleri, +Setup > User,"Kurulum > Kullanıcı", +Setup > Customize Form,"Kurulum > Formu Özelleştir", +Setup > User Permissions,"Kurulum > Kullanıcı İzinleri", "Error connecting to QZ Tray Application...

You need to have QZ Tray application installed and running, to use the Raw Print feature.

Click here to Download and install QZ Tray.
Click here to learn more about Raw Printing.","QZ Tepsi Uygulamasına bağlanırken hata oluştu ...

Raw Print özelliğini kullanmak için QZ Tray uygulamasının kurulu ve çalışıyor olması gerekir.

QZ Tepsisini indirmek ve yüklemek için buraya tıklayın .
Ham Baskı hakkında daha fazla bilgi edinmek için buraya tıklayın .", -No email account associated with the User. Please add an account under User > Email Inbox.,Kullanıcı ile ilişkilendirilmiş e-posta hesabı yok. Lütfen Kullanıcı> E-posta Gelen Kutusu altına bir hesap ekleyin., +"No email account associated with the User. Please add an account under User > Email Inbox.","Kullanıcı ile ilişkilendirilmiş e-posta hesabı yok. Lütfen Kullanıcı> E-posta Gelen Kutusu altına bir hesap ekleyin.", "For comparison, use >5, <10 or =324. For ranges, use 5:10 (for values between 5 & 10).","Karşılaştırma için> 5, <10 veya = 324 kullanın. Aralıklar için 5:10 kullanın (5 ve 10 arasındaki değerler için).", -No default Address Template found. Please create a new one from Setup > Printing and Branding > Address Template.,Varsayılan Adres Şablonu bulunamadı. Lütfen Kurulum> Yazdırma ve Markalama> Adres Şablonu'ndan yeni bir tane oluşturun., -Please setup default Email Account from Setup > Email > Email Account,Lütfen Kurulum> E-posta> E-posta Hesabı'ndan varsayılan E-posta Hesabını ayarlayın, -Email Account not setup. Please create a new Email Account from Setup > Email > Email Account,E-posta Hesabı kurulmadı. Lütfen Kurulum> E-posta> E-posta Hesabı'ndan yeni bir E-posta Hesabı oluşturun, +No default Address Template found. Please create a new one from Setup > Printing and Branding > Address Template.,"Varsayılan Adres Şablonu bulunamadı. Lütfen Kurulum> Yazdırma ve Markalama> Adres Şablonu'ndan yeni bir tane oluşturun.", +Please setup default Email Account from Setup > Email > Email Account,"Lütfen Kurulum> E-posta> E-posta Hesabı'ndan varsayılan E-posta Hesabını ayarlayın", +Email Account not setup. Please create a new Email Account from Setup > Email > Email Account,"E-posta Hesabı kurulmadı. Lütfen Kurulum> E-posta> E-posta Hesabı'ndan yeni bir E-posta Hesabı oluşturun", Attach file,Dosya eki, Contribution Status,Katkı Durumu, Contribution Document Name,Katkı Doküman Adı, @@ -4026,13 +4065,14 @@ Select Language,Dil Seçin, Confirm Translations,Çevirileri Onaylayın, Contributed Translations,Katkıda Bulunan Çeviriler, Show Tags,Etiketleri Göster, +Edit Filters,Filtreleri Düzenle, Do not have permission to access {0} bucket.,{0} paketine erişim izniniz yok., Allow document creation via Email,E-posta yoluyla belge oluşturmaya izin ver, Sender Field,Gönderen Alanı, Logout All Sessions on Password Reset,Parola Sıfırlamayla Tüm Oturumları Kapat, Logout From All Devices After Changing Password,Parolayı Değiştirdikten Sonra Tüm Cihazlardan Çıkış Yapın, -Send Notifications For Documents Followed By Me,Takip Ettiğim Belgeler İçin Bildirimler Gönder, -Send Notifications For Email Threads,E-posta Konuları İçin Bildirimler Gönder, +Send Notifications For Documents Followed By Me,Takip ettiğim Belgeler için Bildirim Gönder, +Send Notifications For Email Threads,E-posta Konuları için Bildirim Gönder, Bypass Restricted IP Address Check If Two Factor Auth Enabled,Sınırlandırılmış IP Adresini Atla İki Faktörlü Kimlik Doğrulama Etkinse Kontrol Edin, Reset LDAP Password,LDAP Parolasını Sıfırla, Confirm New Password,Yeni şifreyi onayla, @@ -4051,7 +4091,7 @@ Value for field {0} is too long in {1}. Length should be lesser than {2} charact Data Too Long,Veri Çok Uzun, via Notification,Bildirim yoluyla, Log in to access this page.,Bu sayfaya erişmek için oturum açın., -Report Document Error,Belge Hatası Bildir, +Report Document Error,Belge Hatasını Bildir, {0} is an invalid Data field.,{0} geçersiz bir Veri alanı., Only Options allowed for Data field are:,Yalnızca Veri alanı için izin verilen Seçenekler şunlardır:, Select a valid Subject field for creating documents from Email,E-postadan belge oluşturmak için geçerli bir Konu alanı seçin, @@ -4066,10 +4106,10 @@ Prepared Report User,Hazırlanan Rapor Kullanıcısı, Scheduler Event,Zamanlayıcı Etkinliği, Select Event Type,Etkinlik Türünü Seçin, Schedule Script,Komut Dosyası Planla, -Duration,süre, +Duration,Süre, Donut,Tatlı çörek, Custom Options,Özel Seçenekler, -"Ex: ""colors"": [""#d1d8dd"", ""#ff5858""]","Ör: "renkler": ["# d1d8dd", "# ff5858"]", +"Ex: ""colors"": [""#d1d8dd"", ""#ff5858""]","Ör: 'renkler': ['# d1d8dd', '# ff5858']", Confirmation Email Template,Onay E-posta Şablonu, Welcome Email Template,Hoş Geldiniz E-posta Şablonu, Schedule Send,Göndermeyi Planla, @@ -4078,7 +4118,7 @@ Advanced Settings,Gelişmiş Ayarlar, Disable Comments,Yorumları Devre Dışı Bırak, Comments on this blog post will be disabled if checked.,Bu blog gönderisine yapılan yorumlar işaretlenirse devre dışı bırakılacaktır., CSS Class,CSS Sınıfı, -Full Width,Tam genişlik, +Full Width,Tam Genişlik, Page Builder,Sayfa Oluşturucu, Page Building Blocks,Sayfa Yapı Taşları, Header and Breadcrumbs,Üstbilgi ve İçerik Kırıntıları, @@ -4089,13 +4129,13 @@ Edit Values,Değerleri Düzenle, Web Template Values,Web Şablonu Değerleri, Add Container,Kapsayıcı Ekle, Web Page View,Web Sayfası Görünümü, -Path,yol, +Path,Yol, Referrer,Yönlendiren, Browser,Tarayıcı, Browser Version,Tarayıcı Sürümü, Web Template Field,Web Şablonu Alanı, Section,Bölüm, -Hide,Saklamak, +Hide,Gizle, Enable In App Website Tracking,Uygulama İçi Web Sitesi İzlemeyi Etkinleştirin, Enable Google Indexing,Google Endekslemeyi Etkinleştir, "To use Google Indexing, enable Google Settings.","Google İndekslemeyi kullanmak için Google Ayarlarını etkinleştirin.", @@ -4140,9 +4180,9 @@ Document is only editable by users with role,Belge yalnızca rolü olan kullanı {0} Page Views,{0} Sayfa Görüntülemeleri, Expand,Genişlet, Collapse,Çöküş, -"Invalid Bearer token, please provide a valid access token with prefix 'Bearer'.","Geçersiz Taşıyıcı belirteci, lütfen 'Taşıyıcı' ön ekiyle geçerli bir erişim belirteci sağlayın.", +"Invalid Bearer token, please provide a valid access token with prefix 'Bearer'.","Geçersiz Taşıyıcı belirteci, lütfen 'Taşıyıcı' ön ekiyle geçerli bir erişim belirteci sağlayın.", "Failed to decode token, please provide a valid base64-encoded token.","Jetonun kodu çözülemedi, lütfen geçerli bir base64 kodlu jeton sağlayın.", -"Invalid token, please provide a valid token with prefix 'Basic' or 'Token'.","Geçersiz simge, lütfen "Temel" veya "Belirteç" ön ekiyle geçerli bir simge sağlayın.", +"Invalid token, please provide a valid token with prefix 'Basic' or 'Token'.","Geçersiz simge, lütfen 'Temel' veya 'Belirteç' ön ekiyle geçerli bir simge sağlayın.", {0} is not a valid Name,"{0}, geçerli bir Ad değil", Your system is being updated. Please refresh again after a few moments.,Sisteminiz güncelleniyor. Lütfen birkaç dakika sonra tekrar yenileyin., {0} {1}: Submitted Record cannot be deleted. You must {2} Cancel {3} it first.,{0} {1}: Gönderilen Kayıt silinemez. Önce onu {2} İptal etmelisiniz {3}., @@ -4161,21 +4201,21 @@ Allow Google Indexing Access,Google Endeksleme Erişimine İzin Ver, Custom Documents,Özel Belgeler, Could not save customization,Özelleştirme kaydedilemedi, Transgender,Transseksüel, -Genderqueer,Cinsiyetçi, +Genderqueer,Cinsiyetsiz, Non-Conforming,Uygun Olmayan, -Prefer not to say,Söylememeyi tercih etmek, +Prefer not to say,Söylememeyi tercih et, Is Billing Contact,Faturalandırmayla İlgili Kişi, Address And Contacts,Adres ve Kişiler, -Lead Conversion Time,Kurşun Dönüş Süresi, +Lead Conversion Time,Aday Dönüş Süresi, Due Date Based On,Tarihli Vade Tarihi, -Phone Number,Telefon numarası, +Phone Number,Telefon Numarası, Linked Documents,Bağlantılı Belgeler, Account SID,Hesap SID, Steps,Adımlar, email,e-posta, Component,Bileşen, Subtitle,Alt yazı, -Global Defaults,Küresel Varsayılanlar, +Global Defaults,Genel Varsayılanlar, Prefix,Önek, Is Public,Herkese Açık, This chart will be available to all Users if this is set,Ayarlanırsa bu grafik tüm Kullanıcılar tarafından kullanılabilir olacaktır, @@ -4192,13 +4232,13 @@ Filters Section,Filtreler Bölümü, Number Card Link,Numara Kartı Bağlantısı, Card,Kart, API Access,API Erişimi, -Access Key Secret,Anahtar Sırrına Erişim, +Access Key Secret,Access Key Secret, S3 Bucket Details,S3 Bucket Ayrıntıları, -Bucket Name,Kova Adı, +Bucket Name,Bucket Adı, Backup Details,Yedekleme Ayrıntıları, Backup Files,Yedekleme dosyaları, Backup public and private files along with the database.,Veritabanıyla birlikte genel ve özel dosyaları yedekleyin., -Set to 0 for no limit on the number of backups taken,Alınan yedekleme sayısında sınır olmaması için 0'a ayarlayın, +Set to 0 for no limit on the number of backups taken,Alınan yedekleme sayısında sınır olmaması için 0'a ayarlayın, Meta Description,Meta Açıklaması, Meta Image,Meta Görüntü, Google Snippet Preview,Google Snippet Önizlemesi, @@ -4213,19 +4253,21 @@ All Time,Her zaman, Select From Date,Tarih Seçiniz, since yesterday,Dünden beri, since last week,Geçen haftadan beri, -since last month,geçen aydan beri, -since last year,geçen yıldan beri, -Show,Göstermek, +since last month,Geçen aydan beri, +since last year,Geçen yıldan beri, +Show,Göster, +Set all private,Tümünü özel olarak ayarla, New Number Card,Yeni Numara Kartı, -Your Shortcuts,Kısayollarınız, +Your Shortcuts,Kısayollar, +You haven't created a {0} yet,Henüz bir {0} oluşturmadınız, You haven't added any Dashboard Charts or Number Cards yet.,Henüz herhangi bir Gösterge Tablosu Grafiği veya Numara Kartı eklemediniz., -Click On Customize to add your first widget,İlk widget'ınızı eklemek için Özelleştir'e tıklayın, +Click On Customize to add your first widget,İlk widget'ınızı eklemek için Özelleştir'e tıklayın, Are you sure you want to reset all customizations?,Tüm özelleştirmeleri sıfırlamak istediğinizden emin misiniz?, "Couldn't save, please check the data you have entered","Kaydedilemedi, lütfen girdiğiniz verileri kontrol edin", Validation Error,Doğrulama Hatası, "You can only upload JPG, PNG, PDF, or Microsoft documents.","Yalnızca JPG, PNG, PDF veya Microsoft belgelerini yükleyebilirsiniz.", -Reverting length to {0} for '{1}' in '{2}'. Setting the length as {3} will cause truncation of data.,"{2}" içindeki "{1}" için uzunluk {0} olarak geri döndürülüyor. Uzunluğu {3} olarak ayarlamak verilerin kesilmesine neden olur., -'{0}' not allowed for type {1} in row {2},{2} satırındaki {1} türü için "{0}" öğesine izin verilmiyor, +Reverting length to {0} for '{1}' in '{2}'. Setting the length as {3} will cause truncation of data.,'{2}' içindeki '{1}' için uzunluk {0} olarak geri döndürülüyor. Uzunluğu {3} olarak ayarlamak verilerin kesilmesine neden olur., +'{0}' not allowed for type {1} in row {2},{2} satırındaki {1} türü için '{0}' öğesine izin verilmiyor, Option {0} for field {1} is not a child table,{1} alanı için {0} seçeneği bir alt tablo değil, Invalid Option,Geçersiz Seçenek, Request Body consists of an invalid JSON structure,İstek Gövdesi geçersiz bir JSON yapısından oluşuyor, @@ -4270,14 +4312,14 @@ Uttar Pradesh,Uttar Pradesh, Uttarakhand,Uttarkand, West Bengal,Batı Bengal, GST State Number,GST Eyalet Numarası, -Import from Google Sheets,Google E-Tablolar'dan içe aktarın, -Must be a publicly accessible Google Sheets URL,Herkes tarafından erişilebilen bir Google E-Tablolar URL'si olmalıdır, +Import from Google Sheets,Google E-Tablolar'dan içe aktarın, +Must be a publicly accessible Google Sheets URL,Herkes tarafından erişilebilen bir Google E-Tablolar URL'si olmalıdır, Refresh Google Sheet,Google Sayfasını Yenile, Import File Errors and Warnings,Dosya Hatalarını ve Uyarılarını İçe Aktar, -"Successfully imported {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.","{1} listeden {0} kayıt başarıyla içe aktarıldı. Hatalı Satırları Dışa Aktar'a tıklayın, hataları düzeltin ve tekrar içe aktarın.", -"Successfully imported {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.","{1} / {0} kaydı başarıyla içe aktarıldı. Hatalı Satırları Dışa Aktar'a tıklayın, hataları düzeltin ve tekrar içe aktarın.", -"Successfully updated {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.","{1} üzerinden {0} kayıt başarıyla güncellendi. Hatalı Satırları Dışa Aktar'a tıklayın, hataları düzeltin ve tekrar içe aktarın.", -"Successfully updated {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.","{1} üzerinden {0} kaydı başarıyla güncellendi. Hatalı Satırları Dışa Aktar'a tıklayın, hataları düzeltin ve tekrar içe aktarın.", +"Successfully imported {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.","{1} listeden {0} kayıt başarıyla içe aktarıldı. Hatalı Satırları Dışa Aktar'a tıklayın, hataları düzeltin ve tekrar içe aktarın.", +"Successfully imported {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.","{1} / {0} kaydı başarıyla içe aktarıldı. Hatalı Satırları Dışa Aktar'a tıklayın, hataları düzeltin ve tekrar içe aktarın.", +"Successfully updated {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.","{1} üzerinden {0} kayıt başarıyla güncellendi. Hatalı Satırları Dışa Aktar'a tıklayın, hataları düzeltin ve tekrar içe aktarın.", +"Successfully updated {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.","{1} üzerinden {0} kaydı başarıyla güncellendi. Hatalı Satırları Dışa Aktar'a tıklayın, hataları düzeltin ve tekrar içe aktarın.", Data Import Legacy,Eski Veri İçe Aktarma, Documents restored successfully,Belgeler başarıyla geri yüklendi, Documents that were already restored,Zaten geri yüklenmiş belgeler, @@ -4315,8 +4357,8 @@ Client Code,Müşteri kodu, Report Column,Rapor Sütunu, Report Filter,Rapor Filtresi, Wildcard Filter,Joker Karakter Filtresi, -"Will add ""%"" before and after the query",Sorgudan önce ve sonra "%" eklenir, -"Route: Example ""/desk""",Rota: Örnek "/ masa", +"Will add ""%"" before and after the query",Sorgudan önce ve sonra '%' eklenir, +"Route: Example ""/desk""",Rota: Örnek '/ masa', Enable Onboarding,İlk Katılımı Etkinleştir, Password Reset Link Generation Limit,Parola Sıfırlama Bağlantısı Oluşturma Sınırı, Hourly rate limit for generating password reset links,Şifre sıfırlama bağlantıları oluşturmak için saatlik oran sınırı, @@ -4328,13 +4370,13 @@ Package Document Type,Paket Belge Türü, Include Attachments,Ekleri Dahil Et, Overwrite,Üzerine yaz, Package Publish Target,Paket Yayınlama Hedefi, -Site URL,Site URL'si, +Site URL,Site URL'si, Package Publish Tool,Paket Yayınlama Aracı, Click on the row for accessing filters.,Filtrelere erişmek için sıraya tıklayın., Sites,Siteler, Last Deployed On,Son Dağıtılma Tarihi, Console Log,Konsol Günlüğü, -"Set Default Options for all charts on this Dashboard (Ex: ""colors"": [""#d1d8dd"", ""#ff5858""])","Bu Gösterge Panosundaki tüm grafikler için Varsayılan Seçenekleri ayarlayın (Ör: "renkler": ["# d1d8dd", "# ff5858"])", +"Set Default Options for all charts on this Dashboard (Ex: ""colors"": [""#d1d8dd"", ""#ff5858""])","Bu Gösterge Panosundaki tüm grafikler için Varsayılan Seçenekleri ayarlayın (Ör: 'renkler': ['# d1d8dd', '# ff5858'])", Use Report Chart,Rapor Grafiğini Kullan, Heatmap,Sıcaklık haritası, Dynamic Filters,Dinamik Filtreler, @@ -4343,15 +4385,15 @@ Set Dynamic Filters,Dinamik Filtreler Ayarlayın, Click to Set Dynamic Filters,Dinamik Filtreleri Ayarlamak İçin Tıklayın, Hide Custom DocTypes and Reports,Özel Belge Türlerini ve Raporları Gizle, Checking this will hide custom doctypes and reports cards in Links section,"Bunu işaretlemek, Bağlantılar bölümünde özel belge türlerini ve rapor kartlarını gizleyecektir.", -DocType View,DocType Görünümü, -Which view of the associated DocType should this shortcut take you to?,Bu kısayol sizi ilişkili DocType'ın hangi görünümüne götürmeli?, +DocType View,Belge Türü Görünümü, +Which view of the associated DocType should this shortcut take you to?,Bu kısayol sizi ilişkili DocType'ın hangi görünümüne götürmeli?, List View Settings,Liste Görünümü Ayarları, Maximum Number of Fields,Maksimum Alan Sayısı, Module Onboarding,Modül İlk Katılımı, System managers are allowed by default,Sistem yöneticilerine varsayılan olarak izin verilir, -Documentation URL,Dokümantasyon URL'si, +Documentation URL,Dokümantasyon URL'si, Is Complete,Tamamlandı, -Alert,Uyarmak, +Alert,Uyar, Document Link,Belge Bağlantısı, Attached File,Ekli dosya, Attachment Link,Ek Bağlantısı, @@ -4365,9 +4407,10 @@ Onboarding Step,İlk Katılım Adımı, Is Mandatory,Zorunludur, Is Skipped,Atlandı, Create Entry,Giriş Oluştur, +Create Workspace,Çalışma Alanı Oluştur, Update Settings,Ayarları güncelle, Show Form Tour,Form Turunu Göster, -View Report,Raporu görüntüle, +View Report,Raporu Görüntüle, Go to Page,Sayfaya git, Watch Video,Video izle, Show Full Form?,Tam Form Gösterilsin mi?, @@ -4398,12 +4441,12 @@ Schedule Sending,Göndermeyi Planla, Message (Markdown),Mesaj (Markdown), Message (HTML),Mesaj (HTML), Send Attachments,Ekleri Gönder, -Testing,Test yapmak, +Testing,Test yap, System Notification,Sistem Bildirimi, -WhatsApp,Naber, +WhatsApp,WhatsApp, Twilio Number,Twilio Numarası, -"To use WhatsApp for Business, initialize Twilio Settings.","WhatsApp for Business'ı kullanmak için Twilio Settings'i başlatın .", -"To use Slack Channel, add a Slack Webhook URL.","Slack Kanalını kullanmak için bir Slack Webhook URL'si ekleyin .", +"To use WhatsApp for Business, initialize Twilio Settings.","WhatsApp for Business'ı kullanmak için Twilio Settings'i başlatın .", +"To use Slack Channel, add a Slack Webhook URL.","Slack Kanalını kullanmak için bir Slack Webhook URL'si ekleyin .", Send System Notification,Sistem Bildirimi Gönder, "If enabled, the notification will show up in the notifications dropdown on the top right corner of the navigation bar.","Etkinleştirilirse, bildirim, gezinme çubuğunun sağ üst köşesindeki bildirimler açılır menüsünde görünecektir.", Send To All Assignees,Tüm Atananlara Gönder, @@ -4428,33 +4471,33 @@ Auth Token,Yetkilendirme Jetonu, Read Time,Okuma zamanı, in minutes,dakikalar içinde, Featured,Öne çıkan, -Hide CTA,CTA'yı gizle, +Hide CTA,CTA'yı gizle, "Description for listing page, in plain text, only a couple of lines. (max 200 characters)","Listeleme sayfası için açıklama, düz metin, yalnızca birkaç satır. (en fazla 200 karakter)", Meta Title,Meta Başlığı, Enable Social Sharing,Sosyal Paylaşımı Etkinleştir, -Show CTA in Blog,CTA'yı Blog'da Göster, +Show CTA in Blog,CTA'yı Blog'da Göster, CTA,CTA, CTA Label,CTA Etiketi, -CTA URL,CTA URL'si, +CTA URL,CTA URL'si, Default Portal Home,Varsayılan Portal Ana Sayfası, -"Example: ""/desk""",Örnek: "/ desk", +"Example: ""/desk""",Örnek: '/ desk', Social Link Settings,Sosyal Bağlantı Ayarları, Social Link Type,Sosyal Bağlantı Türü, -facebook,Facebook, -linkedin,Linkedin, -twitter,heyecan, +facebook,facebook, +linkedin,linkedin, +twitter,twitter, "If Icon is set, it will be shown instead of Label","Simge ayarlanmışsa, Etiket yerine gösterilecektir.", Apply Document Permissions,Belge İzinlerini Uygula, "For help see Client Script API and Examples","Yardım için Client Script API ve Örneklerine bakın", Dynamic Route,Dinamik Rota, -Map route parameters into form variables. Example /project/<name>,Rota parametrelerini form değişkenlerine eşleyin. Örnek /project/<name>, +"Map route parameters into form variables. Example /project/<name>","Rota parametrelerini form değişkenlerine eşleyin. Örnek /project/<name>", Context Script,Bağlam Komut Dosyası, -"

Set context before rendering a template. Example:

\n

\ncontext.project = frappe.get_doc(""Project"", frappe.form_dict.name)\n
","

Bir şablonu oluşturmadan önce bağlamı ayarlayın. Misal:

 context.project = frappe.get_doc("Project", frappe.form_dict.name)
", +"

Set context before rendering a template. Example:

\n

\ncontext.project = frappe.get_doc(""Project"", frappe.form_dict.name)\n
","

Bir şablonu oluşturmadan önce bağlamı ayarlayın. Misal:

 context.project = frappe.get_doc('Project', frappe.form_dict.name)
", Title of the page,Sayfanın başlığı, This title will be used as the title of the webpage as well as in meta tags,"Bu başlık, meta etiketlerinde olduğu gibi web sayfasının başlığı olarak kullanılacaktır.", Makes the page public,Sayfayı herkese açık hale getirir, Checking this will publish the page on your website and it'll be visible to everyone.,"Bunu işaretlemek, sayfayı web sitenizde yayınlayacak ve herkes tarafından görülebilecektir.", -URL of the page,Sayfanın URL'si, +URL of the page,Sayfanın URL'si, "This will be automatically generated when you publish the page, you can also enter a route yourself if you wish","Bu, sayfayı yayınladığınızda otomatik olarak oluşturulacaktır, isterseniz kendiniz de bir rota girebilirsiniz", Content type for building the page,Sayfayı oluşturmak için içerik türü, "You can select one from the following,","Aşağıdakilerden birini seçebilirsiniz,", @@ -4476,7 +4519,7 @@ Hide Login,Oturum Açmayı Gizle, Navbar Template,Navbar Şablonu, Navbar Template Values,Navbar Şablon Değerleri, Call To Action,Eylem çağrısı, -Call To Action URL,Harekete Geçirici Mesaj URL'si, +Call To Action URL,Harekete Geçirici Mesaj URL'si, Footer Logo,Altbilgi Logosu, Footer Template,Altbilgi Şablonu, Footer Template Values,Altbilgi Şablon Değerleri, @@ -4493,15 +4536,15 @@ Are you sure you want to save this document?,Bu belgeyi kaydetmek istediğinizde Refresh All,Hepsini yenile, "Level 0 is for document level permissions, higher levels for field level permissions.","Düzey 0, belge düzeyindeki izinler içindir, alan düzeyindeki izinler için daha yüksek düzeylerdir.", Website Analytics,Web Sitesi Analizi, -d,d,Days (Field: Duration) -h,h,Hours (Field: Duration) -m,m,Minutes (Field: Duration) -s,s,Seconds (Field: Duration) +d,Days (Field: Duration), +h,Hours (Field: Duration), +m,Minutes (Field: Duration), +s,Seconds (Field: Duration), Less,Az, Not a valid DocType view:,Geçerli bir DocType görünümü değil:, Unknown View,Bilinmeyen Görünüm, Go Back,Geri dön, -Let's take you back to onboarding,Sizi ilk katılıma geri götürelim, +Let's take you back to onboarding,Sizi işe alıma geri götürelim, Great Job,İyi iş, Looks Great,Harika görünüyor, Looks like you didn't change the value,Görünüşe göre değeri değiştirmemişsin, @@ -4520,7 +4563,7 @@ Reset Fields,Alanları Sıfırla, Select Fields,Alanları Seç, Warning: Unable to find {0} in any table related to {1},Uyarı: {1} ile ilgili herhangi bir tabloda {0} bulunamıyor, Tree view is not available for {0},Ağaç görünümü {0} için kullanılamaz, -Create Card,Kart Oluşturun, +Create Card,Kart Oluştur, Card Label,Kart Etiketi, Reports already in Queue,Zaten Kuyrukta olan raporlar, Proceed Anyway,Yine de Devam Et, @@ -4530,13 +4573,13 @@ Delete and Generate New,Sil ve Yeni Oluştur, Select Fields To Insert,Eklenecek Alanları Seçin, Select Fields To Update,Güncellenecek Alanları Seçin, "This document is already amended, you cannot ammend it again","Bu belge zaten değiştirildi, onu bir daha değiştiremezsiniz", -Add to ToDo,Yapılacaklar'a Ekle, +Add to ToDo,Yapılacaklar'a Ekle, {0} is currently {1},{0} şu anda {1}, {0} are currently {1},{0} şu anda {1}, Currently Replying,Şu anda Yanıtlanıyor, created {0},{0} oluşturuldu, Make a call,Arama yap, -Change,Değişiklik,Coins +Change,Değiştir, Too Many Requests,Çok fazla istek, "Invalid Authorization headers, add a token with a prefix from one of the following: {0}.","Geçersiz Yetkilendirme üstbilgileri, aşağıdakilerden birinden bir öneke sahip bir belirteç ekleyin: {0}.", "Invalid Authorization Type {0}, must be one of {1}.","Geçersiz Yetkilendirme Türü {0}, {1} değerlerinden biri olmalıdır.", @@ -4544,21 +4587,21 @@ Too Many Requests,Çok fazla istek, Invalid Date,Geçersiz tarih, Please select a valid date filter,Lütfen geçerli bir tarih filtresi seçin, Value {0} must be in the valid duration format: d h m s,"{0} değeri, geçerli süre biçiminde olmalıdır: dhms", -Google Sheets URL is invalid or not publicly accessible.,Google E-Tablolar URL'si geçersiz veya herkese açık değil., -"Google Sheets URL must end with ""gid={number}"". Copy and paste the URL from the browser address bar and try again.",Google E-Tablolar URL'si "gid = {sayı}" ile bitmelidir. URL'yi tarayıcının adres çubuğundan kopyalayıp yapıştırın ve tekrar deneyin., +Google Sheets URL is invalid or not publicly accessible.,Google E-Tablolar URL'si geçersiz veya herkese açık değil., +"Google Sheets URL must end with ""gid={number}"". Copy and paste the URL from the browser address bar and try again.",Google E-Tablolar URL'si 'gid = {sayı}' ile bitmelidir. URL'yi tarayıcının adres çubuğundan kopyalayıp yapıştırın ve tekrar deneyin., Incorrect URL,Yanlış URL, -"""{0}"" is not a valid Google Sheets URL",""{0}", geçerli bir Google E-Tablolar URL'si değil", +"""{0}"" is not a valid Google Sheets URL","'{0}', geçerli bir Google E-Tablolar URL'si değil", Duplicate Name,Yinelenen Ad, -"Please check the value of ""Fetch From"" set for field {0}",Lütfen {0} alanı için "Getir" ayarının değerini kontrol edin, +"Please check the value of ""Fetch From"" set for field {0}",Lütfen {0} alanı için 'Getir' ayarının değerini kontrol edin, Wrong Fetch From value,Değerden Yanlış Getirme, -A field with the name '{}' already exists in doctype {}.,{} Doküman türünde '{}' adında bir alan zaten var., +A field with the name '{}' already exists in doctype {}.,{} Doküman türünde '{}' adında bir alan zaten var., Custom Field {0} is created by the Administrator and can only be deleted through the Administrator account.,"Özel Alan {0}, Yönetici tarafından oluşturulur ve yalnızca Yönetici hesabı aracılığıyla silinebilir.", Failed to send {0} Auto Email Report,{0} Otomatik E-posta Raporu gönderilemedi, Test email sent to {0},{0} adresine test e-postası gönderildi, Email queued to {0} recipients,"E-posta, {0} alıcıyla sıraya alındı", Newsletter should have at least one recipient,Haber bülteninin en az bir alıcısı olmalıdır, Please enable Twilio settings to send WhatsApp messages,WhatsApp mesajları göndermek için lütfen Twilio ayarlarını etkinleştirin, -"Not allowed to attach {0} document, please enable Allow Print For {0} in Print Settings","{0} belgesinin eklenmesine izin verilmiyor, lütfen Yazdırma Ayarlarında {0} İçin Yazdırmaya İzin Ver'i etkinleştirin", +"Not allowed to attach {0} document, please enable Allow Print For {0} in Print Settings","{0} belgesinin eklenmesine izin verilmiyor, lütfen Yazdırma Ayarlarında {0} İçin Yazdırmaya İzin Ver'i etkinleştirin", Signup Disabled,Kayıt Devre Dışı, Signups have been disabled for this website.,Bu web sitesi için kayıtlar devre dışı bırakıldı., Open Document,Belgeyi Aç, @@ -4577,9 +4620,9 @@ Skipping Duplicate Column {0},Yinelenen Sütun {0} Atlanıyor, 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.,{0} sütununda {1} farklı tarih biçimi var. {2} en yaygın biçim olarak varsayılan biçim olarak otomatik olarak ayarlanıyor. Lütfen bu sütundaki diğer değerleri bu biçime değiştirin., You have reached the hourly limit for generating password reset links. Please try again later.,Şifre sıfırlama bağlantıları oluşturmak için saatlik sınıra ulaştınız. Lütfen daha sonra tekrar deneyiniz., Please hide the standard navbar items instead of deleting them,Lütfen standart gezinme çubuğu öğelerini silmek yerine gizleyin, -DocType's name should not start or end with whitespace,DocType'ın adı boşlukla başlamamalı veya bitmemelidir, +DocType's name should not start or end with whitespace,Belge Türünün adı boşlukla başlamamalı veya bitmemelidir, File name cannot have {0},Dosya adı {0} olamaz, -{0} is not a valid file url,"{0}, geçerli bir dosya url'si değil", +{0} is not a valid file url,"{0}, geçerli bir dosya url'si değil", Error Attaching File,Dosya Ekleme Hatası, Please generate keys for the Event Subscriber User {0} first.,Lütfen önce Etkinlik Abone Kullanıcısı {0} için anahtarlar oluşturun., Please set API Key and Secret on the producer and consumer sites first.,Lütfen önce üretici ve tüketici sitelerinde API Anahtarını ve Sırrını ayarlayın., @@ -4593,8 +4636,8 @@ Paytm payment gateway settings,Paytm ödeme ağ geçidi ayarları, Razorpay Signature Verification Failed,Razorpay İmza Doğrulaması Başarısız, Google Drive - Could not locate - {0},Google Drive - Bulunamadı - {0}, "Sync token was invalid and has been resetted, Retry syncing.","Senkronizasyon jetonu geçersizdi ve sıfırlandı, Senkronizasyonu yeniden deneyin.", -Please select another payment method. Paytm does not support transactions in currency '{0}',"Lütfen başka bir ödeme yöntemi seçin. Paytm, '{0}' para birimindeki işlemleri desteklemiyor", -Invalid Account SID or Auth Token.,Geçersiz Hesap SID'si veya Kimlik Doğrulama Jetonu., +Please select another payment method. Paytm does not support transactions in currency '{0}',"Lütfen başka bir ödeme yöntemi seçin. Paytm, '{0}' para birimindeki işlemleri desteklemiyor", +Invalid Account SID or Auth Token.,Geçersiz Hesap SID'si veya Kimlik Doğrulama Jetonu., Please enable twilio settings before sending WhatsApp messages,Lütfen WhatsApp mesajlarını göndermeden önce twilio ayarlarını etkinleştirin, Delivery Failed,Teslimat Başarısız, Twilio WhatsApp Message Error,Twilio WhatsApp Mesaj Hatası, @@ -4620,7 +4663,7 @@ Invalid Credentials,Geçersiz kimlik bilgileri, Print UOM after Quantity,Miktardan Sonra UOM Yazdır, Uncaught Server Exception,Yakalanmamış Sunucu İstisnası, There was an error building this page,Bu sayfa oluşturulurken bir hata meydana geldi, -Hide Traceback,Traceback'i Gizle, +Hide Traceback,Traceback'i Gizle, Value from this field will be set as the due date in the ToDo,"Bu alandaki değer, Yapılacak İşte son tarih olarak ayarlanacaktır", New module created {0},Yeni modül oluşturuldu {0}, "Report has no numeric fields, please change the Report Name","Raporda sayısal alan yok, lütfen Rapor Adını değiştirin", @@ -4639,11 +4682,12 @@ Not permitted to view {0},{0} görüntülenmesine izin verilmiyor, Camera,Kamera, Invalid filter: {0},Geçersiz filtre: {0}, Let's Get Started,Başlayalım, -Reports & Masters,Raporlar ve Ustalar, +Masters & Reports,Ana Veriler & Raporlar, +Reports & Masters,Raporlar & Ana Veriler, New {0} {1} added to Dashboard {2},Gösterge Tablosuna yeni {0} {1} eklendi {2}, New {0} {1} created,Yeni {0} {1} oluşturuldu, New {0} Created,Yeni {0} Oluşturuldu, -"Invalid ""depends_on"" expression set in filter {0}",{0} filtresinde geçersiz "bağımlı_on" ifadesi ayarlandı, +"Invalid ""depends_on"" expression set in filter {0}",{0} filtresinde geçersiz 'bağımlı_on' ifadesi ayarlandı, {0} Reports,{0} Raporlar, There is {0} with the same filters already in the queue:,Sırada zaten aynı filtrelere sahip {0} var:, There are {0} with the same filters already in the queue:,Sırada zaten aynı filtrelere sahip {0} var:, @@ -4664,7 +4708,7 @@ Clear Error log After,Sonra Hata günlüğünü temizle, Clear Activity Log After,Etkinlik Günlüğünü Daha Sonra Temizle, Clear Email Queue After,E-posta Sırasını Sonra Sil, Please save to edit the template.,Lütfen şablonu düzenlemek için kaydedin., -Google Analytics Anonymize IP,Google Analytics IP'yi Anonimleştir, +Google Analytics Anonymize IP,Google Analytics IP'yi Anonimleştir, Incorrect email or password. Please check your login credentials.,Yanlış eposta adresi veya şifre. Lütfen giriş bilgilerinizi kontrol edin., Incorrect Configuration,Yanlış Yapılandırma, You are not allowed to delete Standard Report,Standart Raporu silmenize izin verilmiyor, @@ -4678,13 +4722,13 @@ Cannot delete standard link. You can hide it if you want,Standart bağlantı sil Cannot delete standard action. You can hide it if you want,Standart eylem silinemez. İstersen saklayabilirsin, Applied On,Üzerine uygulanmış, Row Name,Satır Adı, -For DocType Link / DocType Action,DocType Link / DocType Eylemi İçin, +For DocType Link / DocType Action,Belge Türü Link / Belge Türü Eylemi için, Cannot edit filters for standard charts,Standart grafikler için filtreler düzenlenemez, Event Producer Last Update,Etkinlik Yapımcısı Son Güncelleme, -Default for 'Check' type of field {0} must be either '0' or '1',{0} alanının "Kontrol" türü için varsayılan değer "0" veya "1" olmalıdır, +Default for 'Check' type of field {0} must be either '0' or '1',{0} alanının 'Kontrol' türü için varsayılan değer '0' veya '1' olmalıdır, Non Negative,Negatif olmayan, Rules with higher priority number will be applied first.,Önce öncelik numarası daha yüksek olan kurallar uygulanacaktır., -Open URL in a New Tab,URL'yi Yeni Bir Sekmede Aç, +Open URL in a New Tab,URL'yi Yeni Bir Sekmede Aç, Align Right,Sağa Hizala, Loading Filters...,Filtreler Yükleniyor ..., Count Customizations,Özelleştirmeleri Sayma, diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index d37e8c201f..5d1aed259a 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -346,7 +346,7 @@ def _get_traceback_sanitizer(): return Format( custom_var_printers=[ # redact variables - *[(variable_name, lambda: placeholder) for variable_name in blocklist], + *[(variable_name, lambda *a, **kw: placeholder) for variable_name in blocklist], # redact dictionary keys (["_secret", dict, lambda *a, **kw: False], dict_printer), ], diff --git a/frappe/utils/background_jobs.py b/frappe/utils/background_jobs.py index 040a57cc11..fed822700c 100755 --- a/frappe/utils/background_jobs.py +++ b/frappe/utils/background_jobs.py @@ -153,6 +153,7 @@ def run_doc_method(doctype, name, doc_method, **kwargs): def execute_job(site, method, event, job_name, kwargs, user=None, is_async=True, retry=0): """Executes job in a worker, performs commit/rollback and logs if there is any error""" + retval = None if is_async: frappe.connect(site) if os.environ.get("CI"): @@ -167,9 +168,11 @@ def execute_job(site, method, event, job_name, kwargs, user=None, is_async=True, else: method_name = cstr(method.__name__) - frappe.monitor.start("job", method_name, kwargs) + for before_job_task in frappe.get_hooks("before_job"): + frappe.call(before_job_task, method=method_name, kwargs=kwargs, transaction_type="job") + try: - method(**kwargs) + retval = method(**kwargs) except (frappe.db.InternalError, frappe.RetryBackgroundJobError) as e: frappe.db.rollback() @@ -200,14 +203,12 @@ def execute_job(site, method, event, job_name, kwargs, user=None, is_async=True, else: frappe.db.commit() + return retval finally: - # background job hygiene: release file locks if unreleased - # if this breaks something, move it to failed jobs alone - gavin@frappe.io - for doc in frappe.local.locked_documents: - doc.unlock() + for after_job_task in frappe.get_hooks("after_job"): + frappe.call(after_job_task, method=method_name, kwargs=kwargs, result=retval) - frappe.monitor.stop() if is_async: frappe.destroy() diff --git a/frappe/utils/boilerplate.py b/frappe/utils/boilerplate.py index ee75c672a8..1cd57f4695 100644 --- a/frappe/utils/boilerplate.py +++ b/frappe/utils/boilerplate.py @@ -458,6 +458,15 @@ app_license = "{app_license}" # ignore_links_on_delete = ["Communication", "ToDo"] +# Request Events +# ---------------- +# before_request = ["{app_name}.utils.before_request"] +# after_request = ["{app_name}.utils.after_request"] + +# Job Events +# ---------- +# before_job = ["{app_name}.utils.before_job"] +# after_job = ["{app_name}.utils.after_job"] # User Data Protection # -------------------- diff --git a/frappe/utils/file_lock.py b/frappe/utils/file_lock.py index 5be89c42f6..60d8baec5d 100644 --- a/frappe/utils/file_lock.py +++ b/frappe/utils/file_lock.py @@ -11,7 +11,7 @@ Use `frappe.utils.synchroniztion.filelock` for process synchroniztion. import os from time import time -from frappe import _ +import frappe from frappe.utils import get_site_path, touch_file LOCKS_DIR = "locks" @@ -62,3 +62,9 @@ def get_lock_path(name): name = name.lower() lock_path = get_site_path(LOCKS_DIR, name + ".lock") return lock_path + + +def release_document_locks(): + """Unlocks all documents that were locked by the current context.""" + for doc in frappe.local.locked_documents: + doc.unlock() diff --git a/frappe/utils/html_utils.py b/frappe/utils/html_utils.py index c34c4fd188..7edf6556c9 100644 --- a/frappe/utils/html_utils.py +++ b/frappe/utils/html_utils.py @@ -4,6 +4,7 @@ import re from bleach_allowlist import bleach_allowlist import frappe +from frappe.utils.data import escape_html EMOJI_PATTERN = re.compile( "(\ud83d[\ude00-\ude4f])|" @@ -204,10 +205,12 @@ def get_icon_html(icon, small=False): if is_image(icon): return ( - f'' if small else f'' + f"" + if small + else f"" ) else: - return f"" + return f"" def unescape_html(value): diff --git a/frappe/utils/scheduler.py b/frappe/utils/scheduler.py index 03c1b37a43..8cda71ee9a 100755 --- a/frappe/utils/scheduler.py +++ b/frappe/utils/scheduler.py @@ -92,31 +92,35 @@ def enqueue_events(site: str) -> list[str] | None: return enqueued_jobs -def is_scheduler_inactive() -> bool: +def is_scheduler_inactive(verbose=True) -> bool: if frappe.local.conf.maintenance_mode: - cprint(f"{frappe.local.site}: Maintenance mode is ON") + if verbose: + cprint(f"{frappe.local.site}: Maintenance mode is ON") return True if frappe.local.conf.pause_scheduler: - cprint(f"{frappe.local.site}: frappe.conf.pause_scheduler is SET") + if verbose: + cprint(f"{frappe.local.site}: frappe.conf.pause_scheduler is SET") return True - if is_scheduler_disabled(): + if is_scheduler_disabled(verbose=verbose): return True return False -def is_scheduler_disabled() -> bool: +def is_scheduler_disabled(verbose=True) -> bool: if frappe.conf.disable_scheduler: - cprint(f"{frappe.local.site}: frappe.conf.disable_scheduler is SET") + if verbose: + cprint(f"{frappe.local.site}: frappe.conf.disable_scheduler is SET") return True scheduler_disabled = not frappe.utils.cint( frappe.db.get_single_value("System Settings", "enable_scheduler") ) if scheduler_disabled: - cprint(f"{frappe.local.site}: SystemSettings.enable_scheduler is UNSET") + if verbose: + cprint(f"{frappe.local.site}: SystemSettings.enable_scheduler is UNSET") return scheduler_disabled diff --git a/frappe/utils/subscription.py b/frappe/utils/subscription.py deleted file mode 100644 index a1ade0e8b3..0000000000 --- a/frappe/utils/subscription.py +++ /dev/null @@ -1,35 +0,0 @@ -import json - -import requests - -import frappe - - -@frappe.whitelist() -def remote_login(): - try: - login_url = frappe.conf.subscription["login_url"] - if login_url: - resp = requests.post(login_url) - - if resp.status_code != 200: - return - - return json.loads(resp.text)["message"] - except Exception: - return False - - return False - - -def enable_manage_subscription(): - if not frappe.db.exists("Navbar Item", {"item_label": "Manage Subscriptions"}): - return - - navbar_item, hidden = frappe.db.get_value( - "Navbar Item", {"item_label": "Manage Subscriptions"}, ["name", "hidden"] - ) - if navbar_item and hidden: - doc = frappe.get_cached_doc("Navbar Item", navbar_item) - doc.hidden = False - doc.save() diff --git a/frappe/website/doctype/blog_post/blog_post.js b/frappe/website/doctype/blog_post/blog_post.js index 0266587f2e..5f7268d074 100644 --- a/frappe/website/doctype/blog_post/blog_post.js +++ b/frappe/website/doctype/blog_post/blog_post.js @@ -7,6 +7,8 @@ frappe.ui.form.on("Blog Post", { frm.set_df_property("hide_cta", "hidden", !value); }); + frm.trigger("add_publish_button"); + generate_google_search_preview(frm); }, title: function (frm) { @@ -30,6 +32,12 @@ frappe.ui.form.on("Blog Post", { }); } }, + add_publish_button(frm) { + frm.add_custom_button(frm.doc.published ? __("Unpublish") : __("Publish"), () => { + frm.set_value("published", !frm.doc.published); + frm.save(); + }); + }, }); function generate_google_search_preview(frm) { diff --git a/frappe/website/doctype/blog_post/blog_post.json b/frappe/website/doctype/blog_post/blog_post.json index 8b5ab54ba8..d41b344464 100644 --- a/frappe/website/doctype/blog_post/blog_post.json +++ b/frappe/website/doctype/blog_post/blog_post.json @@ -53,6 +53,7 @@ "default": "0", "fieldname": "published", "fieldtype": "Check", + "hidden": 1, "label": "Published" }, { @@ -215,7 +216,7 @@ "is_published_field": "published", "links": [], "make_attachments_public": 1, - "modified": "2022-10-18 10:09:10.550734", + "modified": "2023-02-17 11:31:32.223524", "modified_by": "Administrator", "module": "Website", "name": "Blog Post", diff --git a/frappe/www/login.py b/frappe/www/login.py index 97ceb01c6e..8529b03bf6 100644 --- a/frappe/www/login.py +++ b/frappe/www/login.py @@ -6,9 +6,9 @@ import frappe.utils from frappe import _ from frappe.auth import LoginManager from frappe.integrations.doctype.ldap_settings.ldap_settings import LDAPSettings -from frappe.integrations.oauth2_logins import decoder_compat from frappe.rate_limiter import rate_limit from frappe.utils import cint, get_url +from frappe.utils.data import escape_html from frappe.utils.html_utils import get_icon_html from frappe.utils.jinja import guess_is_path from frappe.utils.oauth import get_oauth2_authorize_url, get_oauth_keys, redirect_post_login @@ -72,7 +72,7 @@ def get_context(context): if provider.provider_name == "Custom": icon = get_icon_html(provider.icon, small=True) else: - icon = f"{provider.provider_name}" + icon = f"{escape_html(provider.provider_name)!r}" if provider.client_id and provider.base_url and get_oauth_keys(provider.name): context.provider_logins.append( diff --git a/pyproject.toml b/pyproject.toml index 965990e028..95ef65c0a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,12 +31,12 @@ dependencies = [ "cairocffi==1.2.0", "chardet~=4.0.0", "croniter~=1.3.5", - "cryptography~=38.0.3", + "cryptography~=39.0.1", "email-reply-parser~=0.5.12", "git-url-parse~=1.2.2", "gunicorn~=20.1.0", "html5lib~=1.1", - "ipython~=8.4.0", + "ipython~=8.10.0", "ldap3~=2.9", "markdown2~=2.4.0", "MarkupSafe>=2.1.0,<3", @@ -50,7 +50,7 @@ dependencies = [ "premailer~=3.8.0", "psutil~=5.9.1", "psycopg2-binary~=2.9.1", - "pyOpenSSL~=22.1.0", + "pyOpenSSL~=23.0.0", "pycryptodome~=3.10.1", "pydantic~=1.10.2", "pyotp~=2.6.0",