diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py index 7d1848f45ef..928d621677d 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py @@ -204,8 +204,15 @@ class AccountsSettings(Document): if self.add_taxes_from_item_tax_template and self.add_taxes_from_taxes_and_charges_template: frappe.throw( _("You cannot enable both the settings '{0}' and '{1}'.").format( - frappe.bold(_(self.meta.get_label("add_taxes_from_item_tax_template"))), - frappe.bold(_(self.meta.get_label("add_taxes_from_taxes_and_charges_template"))), + frappe.bold( + _(self.meta.get_label("add_taxes_from_item_tax_template"), context=self.doctype) + ), + frappe.bold( + _( + self.meta.get_label("add_taxes_from_taxes_and_charges_template"), + context=self.doctype, + ) + ), ), title=_("Auto Tax Settings Error"), ) diff --git a/erpnext/accounts/doctype/financial_report_template/financial_report_validation.py b/erpnext/accounts/doctype/financial_report_template/financial_report_validation.py index 996d05b5658..850be343385 100644 --- a/erpnext/accounts/doctype/financial_report_template/financial_report_validation.py +++ b/erpnext/accounts/doctype/financial_report_template/financial_report_validation.py @@ -442,7 +442,11 @@ class AccountFilterValidator(Validator): if not isinstance(field, str) or not isinstance(operator, str): return "Field and operator must be strings" - display = (field if advanced_filtering else self.account_meta.get_label(field)) or field + display = ( + field + if advanced_filtering + else _(self.account_meta.get_label(field), context=self.account_meta.name) + ) or field if field not in account_fields: return f"Field '{display}' is not a valid Account field" diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py index de1db2cab82..7f4dae5f544 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.py +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py @@ -134,7 +134,7 @@ class GLEntry(Document): mandatory = ["account", "voucher_type", "voucher_no", "company"] for k in mandatory: if not self.get(k): - frappe.throw(_("{0} is required").format(_(self.meta.get_label(k)))) + frappe.throw(_("{0} is required").format(_(self.meta.get_label(k), context=self.doctype))) if not self.is_cancelled and not (self.party_type and self.party): account_type = frappe.get_cached_value("Account", self.account, "account_type") diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index fce55dc3e2c..7f96ae26210 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -278,7 +278,8 @@ class PaymentEntry(AccountsController): if not liability_account: throw( _("Please set default {0} in Company {1}").format( - frappe.bold(frappe.get_meta("Company").get_label(fieldname)), frappe.bold(self.company) + frappe.bold(_(frappe.get_meta("Company").get_label(fieldname), context="Company")), + frappe.bold(self.company), ) ) @@ -661,7 +662,9 @@ class PaymentEntry(AccountsController): def validate_mandatory(self): for field in ("paid_amount", "received_amount", "source_exchange_rate", "target_exchange_rate"): if not self.get(field): - frappe.throw(_("{0} is mandatory").format(_(self.meta.get_label(field)))) + frappe.throw( + _("{0} is mandatory").format(_(self.meta.get_label(field), context=self.doctype)) + ) def validate_reference_documents(self): valid_reference_doctypes = self.get_valid_reference_doctypes() @@ -1151,7 +1154,7 @@ class PaymentEntry(AccountsController): if value: continue - label = _(frappe.get_meta("Company").get_label(fieldname)) + label = _(frappe.get_meta("Company").get_label(fieldname), context="Company") return frappe.msgprint( _("Please set {0} in Company {1} to account for Exchange Gain / Loss").format( label, get_link_to_form("Company", self.company) diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py index 2554d4d653f..f3a33679871 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py @@ -647,7 +647,11 @@ class PaymentReconciliation(Document): def check_mandatory_to_fetch(self): for fieldname in ["company", "party_type", "party", "receivable_payable_account"]: if not self.get(fieldname): - frappe.throw(_("Please select {0} first").format(_(self.meta.get_label(fieldname)))) + frappe.throw( + _("Please select {0} first").format( + _(self.meta.get_label(fieldname), context=self.doctype) + ) + ) def validate_entries(self): if not self.get("invoices"): diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 8a344a7b9dc..33e5da70885 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -187,7 +187,10 @@ class PricingRule(Document): tocheck = frappe.scrub(self.get("applicable_for", "")) if tocheck and not self.get(tocheck): - throw(_("{0} is required").format(_(self.meta.get_label(tocheck))), frappe.MandatoryError) + throw( + _("{0} is required").format(_(self.meta.get_label(tocheck), context=self.doctype)), + frappe.MandatoryError, + ) if self.apply_rule_on_other: o_field = "other_" + frappe.scrub(self.apply_rule_on_other) diff --git a/erpnext/accounts/services/party_validation.py b/erpnext/accounts/services/party_validation.py index a6ec9716840..bf80ecc30db 100644 --- a/erpnext/accounts/services/party_validation.py +++ b/erpnext/accounts/services/party_validation.py @@ -183,7 +183,7 @@ class PartyValidator: ): frappe.throw( _("{0} does not belong to the Company {1}.").format( - _(doc.meta.get_label(field)), frappe.bold(doc.company) + _(doc.meta.get_label(field), context=doc.doctype), frappe.bold(doc.company) ) ) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 8e6197dd8b5..71eb4a92589 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -1168,7 +1168,7 @@ def get_company_default(company: str, fieldname: str, ignore_validation: bool = if not ignore_validation and not value: throw( _("Please set default {0} in Company {1}").format( - _(frappe.get_meta("Company").get_label(fieldname)), company + _(frappe.get_meta("Company").get_label(fieldname), context="Company"), company ) ) diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 1a85031c2fc..b5a65c2f9cb 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -304,8 +304,8 @@ class BuyingController(SubcontractingController): frappe.throw( _("Row #{idx}: {from_warehouse_field} and {to_warehouse_field} cannot be same.").format( idx=item.idx, - from_warehouse_field=_(item.meta.get_label("from_warehouse")), - to_warehouse_field=_(item.meta.get_label("warehouse")), + from_warehouse_field=_(item.meta.get_label("from_warehouse"), context=item.doctype), + to_warehouse_field=_(item.meta.get_label("warehouse"), context=item.doctype), ) ) @@ -710,7 +710,7 @@ class BuyingController(SubcontractingController): frappe.throw( _("Row #{idx}: {field_label} is mandatory.").format( idx=d.idx, - field_label=_(d.meta.get_label("conversion_factor")), + field_label=_(d.meta.get_label("conversion_factor"), context=d.doctype), ) ) d.stock_qty = flt(d.qty) * flt(d.conversion_factor) @@ -757,7 +757,9 @@ class BuyingController(SubcontractingController): frappe.throw( _("Row #{idx}: {field_label} can not be negative for item {item_code}.").format( idx=item_row["idx"], - field_label=_(frappe.get_meta(item_row.doctype).get_label(fieldname)), + field_label=_( + frappe.get_meta(item_row.doctype).get_label(fieldname), context=item_row.doctype + ), item_code=frappe.bold(item_row["item_code"]), ) ) @@ -1210,14 +1212,14 @@ class BuyingController(SubcontractingController): frappe.throw( _("Row #{idx}: {schedule_date} cannot be before {transaction_date}.").format( idx=d.idx, - schedule_date=_(self.meta.get_label("schedule_date")), - transaction_date=_(self.meta.get_label("transaction_date")), + schedule_date=_(self.meta.get_label("schedule_date"), context=self.doctype), + transaction_date=_(self.meta.get_label("transaction_date"), context=self.doctype), ) ) else: frappe.throw( _("Please enter the {schedule_date}.").format( - schedule_date=_(self.meta.get_label("schedule_date")) + schedule_date=_(self.meta.get_label("schedule_date"), context=self.doctype) ) ) diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index c43dce12202..d3798303c07 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -31,7 +31,11 @@ def validate_return(doc): def validate_return_against(doc): if not frappe.db.exists(doc.doctype, doc.return_against): - frappe.throw(_("Invalid {0}: {1}").format(doc.meta.get_label("return_against"), doc.return_against)) + frappe.throw( + _("Invalid {0}: {1}").format( + _(doc.meta.get_label("return_against"), context=doc.doctype), doc.return_against + ) + ) else: ref_doc = frappe.get_doc(doc.doctype, doc.return_against) @@ -40,7 +44,7 @@ def validate_return_against(doc): if ref_doc.get(party_type) != doc.get(party_type): frappe.throw( _("The {0} {1} does not match with the {0} {2} in the {3} {4}").format( - doc.meta.get_label(party_type), + _(doc.meta.get_label(party_type), context=doc.doctype), bold(doc.get(party_type)), bold(ref_doc.get(party_type)), ref_doc.doctype, diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 034256087e5..549fb12d0e6 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -215,7 +215,7 @@ class SellingController(StockController): if not (0 <= self.commission_rate <= 100.0): throw( "{} {}".format( - _(self.meta.get_label("commission_rate")), + _(self.meta.get_label("commission_rate"), context=self.doctype), _("must be between 0 and 100"), ) ) @@ -306,7 +306,12 @@ class SellingController(StockController): bold(ref_rate_field), bold("net rate"), bold(rate), - bold(frappe.get_meta("Selling Settings").get_label("validate_selling_price")), + bold( + _( + frappe.get_meta("Selling Settings").get_label("validate_selling_price"), + context="Selling Settings", + ) + ), get_link_to_form("Selling Settings"), ), title=_("Invalid Selling Price"), diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 190dba7ed02..583ea7dbb91 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -103,7 +103,7 @@ class StockController(AccountsController): _("Row #{0}: Item {1} has zero rate but '{2}' is not enabled.").format( item.idx, frappe.bold(item.item_code), - item.meta.get_label("allow_zero_valuation_rate"), + _(item.meta.get_label("allow_zero_valuation_rate"), context=item.doctype), ), indicator="orange", ) diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index a7943b8e80a..b2dd3adb202 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -157,7 +157,7 @@ class calculate_taxes_and_totals: validate_conversion_rate( self.doc.currency, self.doc.conversion_rate, - self.doc.meta.get_label("conversion_rate"), + _(self.doc.meta.get_label("conversion_rate"), context=self.doc.doctype), self.doc.company, ) diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index 5222dd796de..109a3d02876 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -1018,7 +1018,9 @@ class BOM(WebsiteGenerator): self.transfer_material_against = "Work Order" if not self.transfer_material_against and not self.track_semi_finished_goods and not self.is_new(): frappe.throw( - _("Setting {0} is required").format(_(self.meta.get_label("transfer_material_against"))), + _("Setting {0} is required").format( + _(self.meta.get_label("transfer_material_against"), context=self.doctype) + ), title=_("Missing value"), ) diff --git a/erpnext/manufacturing/doctype/work_order/services/status.py b/erpnext/manufacturing/doctype/work_order/services/status.py index 6c4163fae12..bac42b203a2 100644 --- a/erpnext/manufacturing/doctype/work_order/services/status.py +++ b/erpnext/manufacturing/doctype/work_order/services/status.py @@ -203,7 +203,10 @@ class StatusService: if qty > completed_qty: frappe.throw( _("{0} ({1}) cannot be greater than planned quantity ({2}) in Work Order {3}").format( - _(self.doc.meta.get_label(fieldname)), qty, completed_qty, self.doc.name + _(self.doc.meta.get_label(fieldname), context=self.doc.doctype), + qty, + completed_qty, + self.doc.name, ), StockOverProductionError, ) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index 3101c0dc30b..65dee07ddea 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -941,7 +941,9 @@ class WorkOrder(Document): self.transfer_material_against = "Work Order" if not self.transfer_material_against: frappe.throw( - _("Setting {0} is required").format(_(self.meta.get_label("transfer_material_against"))), + _("Setting {0} is required").format( + _(self.meta.get_label("transfer_material_against"), context=self.doctype) + ), title=_("Missing value"), ) diff --git a/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js b/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js index 753fb4e896d..dcca53c1016 100644 --- a/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js +++ b/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js @@ -95,7 +95,7 @@ erpnext.BOMComparisonTool = class BOMComparisonTool { let [fieldname, value1, value2] = change; return ` - ${frappe.meta.get_label(doctype, fieldname)} + ${__(frappe.meta.get_label(doctype, fieldname), null, doctype)} ${frappe.utils.escape_html(cstr(value1))} ${frappe.utils.escape_html(cstr(value2))} @@ -146,7 +146,7 @@ erpnext.BOMComparisonTool = class BOMComparisonTool { return ` ${th} - ${frappe.meta.get_label(child_doctype, fieldname)} + ${__(frappe.meta.get_label(child_doctype, fieldname), null, child_doctype)} ${frappe.utils.escape_html(cstr(value1))} ${frappe.utils.escape_html(cstr(value2))} diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index f8750bf2613..3502cca8275 100755 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -136,7 +136,7 @@ class Task(NestedSet): frappe.throw( _("{0}'s {1} cannot be after {2}'s Expected End Date.").format( get_link_to_form("Task", self.name), - _(self.meta.get_label(fieldname)), + _(self.meta.get_label(fieldname), context=self.doctype), get_link_to_form("Project", self.project), ), frappe.exceptions.InvalidDates, @@ -146,7 +146,7 @@ class Task(NestedSet): frappe.throw( _("{0}'s {1} cannot be before {2}'s Expected Start Date.").format( get_link_to_form("Task", self.name), - _(self.meta.get_label(fieldname)), + _(self.meta.get_label(fieldname), context=self.doctype), get_link_to_form("Project", self.project), ), frappe.exceptions.InvalidDates, diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index f34ff7ba36c..f5a9da2ad64 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -263,7 +263,7 @@ erpnext.buying = { frappe.msgprint( __("Row #{0}: {1} can not be negative for item {2}", [ item.idx, - __(frappe.meta.get_label(cdt, fieldnames[i], cdn)), + __(frappe.meta.get_label(cdt, fieldnames[i], cdn), null, cdt), item.item_code, ]) ); diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index 30dcfb0e83a..60aef4dbba7 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -122,10 +122,10 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { this.frm.doc.conversion_rate, cur_frm ? precision("conversion_rate") : 9 ); - var conversion_rate_label = frappe.meta.get_label( - this.frm.doc.doctype, - "conversion_rate", - this.frm.doc.name + var conversion_rate_label = __( + frappe.meta.get_label(this.frm.doc.doctype, "conversion_rate", this.frm.doc.name), + null, + this.frm.doc.doctype ); var company_currency = this.get_company_currency(); diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 015c76c269b..89877b5db17 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -1438,17 +1438,17 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe ) { const to_clear = []; if (doc.payment_terms_template) { - to_clear.push(__(frappe.meta.get_label(cdt, "payment_terms_template"))); + to_clear.push(__(frappe.meta.get_label(cdt, "payment_terms_template"), null, cdt)); } if (doc.payment_schedule?.length) { - to_clear.push(__(frappe.meta.get_label(cdt, "payment_schedule"))); + to_clear.push(__(frappe.meta.get_label(cdt, "payment_schedule"), null, cdt)); } frappe.confirm( __( "For the new {0} to take effect, would you like to clear the current {1}?", - [__(frappe.meta.get_label(cdt, "due_date")), frappe.utils.comma_and(to_clear)], + [__(frappe.meta.get_label(cdt, "due_date"), null, cdt), frappe.utils.comma_and(to_clear)], "Clear payment terms template and/or payment schedule when due date is changed" ), () => { @@ -2646,7 +2646,11 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe if (!me.frm.doc[fieldname]) { frappe.msgprint( __("Please specify {0}. It is needed to fetch Item Details.", [ - __(frappe.meta.get_label(me.frm.doc.doctype, fieldname, me.frm.doc.name)), + __( + frappe.meta.get_label(me.frm.doc.doctype, fieldname, me.frm.doc.name), + null, + me.frm.doc.doctype + ), ]) ); valid = false; diff --git a/erpnext/public/js/queries.js b/erpnext/public/js/queries.js index a329f20615e..f374d4a6817 100644 --- a/erpnext/public/js/queries.js +++ b/erpnext/public/js/queries.js @@ -46,7 +46,7 @@ $.extend(erpnext.queries, { cur_frm.scroll_to_field("customer"); frappe.show_alert({ message: __("Please set {0} first.", [ - __(frappe.meta.get_label(doc.doctype, "customer", doc.name)), + __(frappe.meta.get_label(doc.doctype, "customer", doc.name), null, doc.doctype), ]), indicator: "orange", }); @@ -61,7 +61,11 @@ $.extend(erpnext.queries, { cur_frm.scroll_to_field(frappe.dynamic_link.fieldname); frappe.show_alert({ message: __("Please set {0} first.", [ - __(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name)), + __( + frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name), + null, + doc.doctype + ), ]), indicator: "orange", }); @@ -79,7 +83,11 @@ $.extend(erpnext.queries, { company_contact_query: function (doc) { if (!doc.company) { - frappe.throw(__("Please set {0}", [__(frappe.meta.get_label(doc.doctype, "company", doc.name))])); + frappe.throw( + __("Please set {0}", [ + __(frappe.meta.get_label(doc.doctype, "company", doc.name), null, doc.doctype), + ]) + ); } return { @@ -94,7 +102,11 @@ $.extend(erpnext.queries, { cur_frm.scroll_to_field(frappe.dynamic_link.fieldname); frappe.show_alert({ message: __("Please set {0} first.", [ - __(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name)), + __( + frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name), + null, + doc.doctype + ), ]), indicator: "orange", }); @@ -115,7 +127,7 @@ $.extend(erpnext.queries, { cur_frm.scroll_to_field("company"); frappe.show_alert({ message: __("Please set {0} first.", [ - __(frappe.meta.get_label(doc.doctype, "company", doc.name)), + __(frappe.meta.get_label(doc.doctype, "company", doc.name), null, doc.doctype), ]), indicator: "orange", }); @@ -146,7 +158,7 @@ $.extend(erpnext.queries, { cur_frm.scroll_to_field("supplier"); frappe.show_alert({ message: __("Please set {0} first.", [ - __(frappe.meta.get_label(doc.doctype, "supplier", doc.name)), + __(frappe.meta.get_label(doc.doctype, "supplier", doc.name), null, doc.doctype), ]), indicator: "orange", }); @@ -160,7 +172,7 @@ $.extend(erpnext.queries, { cur_frm.scroll_to_field("lead"); frappe.show_alert({ message: __("Please specify a {0} first.", [ - __(frappe.meta.get_label(doc.doctype, "lead", doc.name)), + __(frappe.meta.get_label(doc.doctype, "lead", doc.name), null, doc.doctype), ]), indicator: "orange", }); diff --git a/erpnext/public/js/utils/barcode_scanner.js b/erpnext/public/js/utils/barcode_scanner.js index 318722cb798..8f0c618cf97 100644 --- a/erpnext/public/js/utils/barcode_scanner.js +++ b/erpnext/public/js/utils/barcode_scanner.js @@ -529,7 +529,7 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { this.show_alert( __("{0} will be set as the {1} in subsequently scanned items", [ __(warehouse).bold(), - __(warehouse_field_label).bold(), + __(warehouse_field_label, null, cur_grid.doctype).bold(), ]), "green", 6 diff --git a/erpnext/public/js/utils/sales_common.js b/erpnext/public/js/utils/sales_common.js index bbce4b2024f..68a6bc8de0b 100644 --- a/erpnext/public/js/utils/sales_common.js +++ b/erpnext/public/js/utils/sales_common.js @@ -358,7 +358,9 @@ erpnext.sales_common = { this.frm.doc.doctype, "commission_rate", this.frm.doc.name - ) + ), + null, + this.frm.doc.doctype ), ]) ); diff --git a/erpnext/selling/doctype/quotation/mapper.py b/erpnext/selling/doctype/quotation/mapper.py index 014e76af956..732cb475792 100644 --- a/erpnext/selling/doctype/quotation/mapper.py +++ b/erpnext/selling/doctype/quotation/mapper.py @@ -257,7 +257,9 @@ def handle_mandatory_error(e, customer, lead_name): from frappe.utils import get_link_to_form mandatory_fields = e.args[0].split(":")[1].split(",") - mandatory_fields = [_(customer.meta.get_label(field.strip())) for field in mandatory_fields] + mandatory_fields = [ + _(customer.meta.get_label(field.strip()), context=customer.doctype) for field in mandatory_fields + ] frappe.local.message_log = [] message = _("Could not auto create Customer due to the following missing mandatory field(s):") + "
" diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.py b/erpnext/selling/doctype/selling_settings/selling_settings.py index 3ad49c8c9ca..daf185a9e0d 100644 --- a/erpnext/selling/doctype/selling_settings/selling_settings.py +++ b/erpnext/selling/doctype/selling_settings/selling_settings.py @@ -118,8 +118,15 @@ class SellingSettings(Document): _( "You have enabled {0} and {1} in {2}. This can lead to prices from the default price list being inserted into the transaction price list." ).format( - "{}".format(_(self.meta.get_label("fallback_to_default_price_list"))), - "{}".format(_(stock_meta.get_label("auto_insert_price_list_rate_if_missing"))), + "{}".format( + _(self.meta.get_label("fallback_to_default_price_list"), context=self.doctype) + ), + "{}".format( + _( + stock_meta.get_label("auto_insert_price_list_rate_if_missing"), + context=stock_meta.name, + ) + ), frappe.bold(_("Stock Settings")), ) ) diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py index 5dfc1f03b21..3b28ed93d36 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.py +++ b/erpnext/setup/doctype/email_digest/email_digest.py @@ -393,7 +393,7 @@ class EmailDigest(Document): label = get_link_to_report( "General Ledger", - _(self.meta.get_label("income")), + _(self.meta.get_label("income"), context=self.doctype), filters={ "from_date": self.future_from_date, "to_date": self.future_to_date, @@ -425,7 +425,7 @@ class EmailDigest(Document): filters = {"currency": self.currency} label = get_link_to_report( "Profit and Loss Statement", - label=_(self.meta.get_label(root_type + "_year_to_date")), + label=_(self.meta.get_label(root_type + "_year_to_date"), context=self.doctype), filters=filters, ) @@ -433,7 +433,7 @@ class EmailDigest(Document): filters = {"currency": self.currency} label = get_link_to_report( "Profit and Loss Statement", - label=_(self.meta.get_label(root_type + "_year_to_date")), + label=_(self.meta.get_label(root_type + "_year_to_date"), context=self.doctype), filters=filters, ) @@ -464,7 +464,7 @@ class EmailDigest(Document): label = get_link_to_report( "General Ledger", - _(self.meta.get_label("expenses_booked")), + _(self.meta.get_label("expenses_booked"), context=self.doctype), filters={ "company": self.company, "from_date": self.future_from_date, @@ -506,7 +506,7 @@ class EmailDigest(Document): label = get_link_to_report( "Sales Order", - label=_(self.meta.get_label("sales_orders_to_bill")), + label=_(self.meta.get_label("sales_orders_to_bill"), context=self.doctype), report_type="Report Builder", doctype="Sales Order", filters={ @@ -540,7 +540,7 @@ class EmailDigest(Document): label = get_link_to_report( "Sales Order", - label=_(self.meta.get_label("sales_orders_to_deliver")), + label=_(self.meta.get_label("sales_orders_to_deliver"), context=self.doctype), report_type="Report Builder", doctype="Sales Order", filters={ @@ -574,7 +574,7 @@ class EmailDigest(Document): label = get_link_to_report( "Purchase Order", - label=_(self.meta.get_label("purchase_orders_to_receive")), + label=_(self.meta.get_label("purchase_orders_to_receive"), context=self.doctype), report_type="Report Builder", doctype="Purchase Order", filters={ @@ -608,7 +608,7 @@ class EmailDigest(Document): label = get_link_to_report( "Purchase Order", - label=_(self.meta.get_label("purchase_orders_to_bill")), + label=_(self.meta.get_label("purchase_orders_to_bill"), context=self.doctype), report_type="Report Builder", doctype="Purchase Order", filters={ @@ -660,7 +660,9 @@ class EmailDigest(Document): "company": self.company, } label = get_link_to_report( - "Account Balance", label=_(self.meta.get_label(fieldname)), filters=filters + "Account Balance", + label=_(self.meta.get_label(fieldname), context=self.doctype), + filters=filters, ) else: filters = { @@ -670,7 +672,9 @@ class EmailDigest(Document): "company": self.company, } label = get_link_to_report( - "Account Balance", label=_(self.meta.get_label(fieldname)), filters=filters + "Account Balance", + label=_(self.meta.get_label(fieldname), context=self.doctype), + filters=filters, ) return {"label": label, "value": balance, "last_value": prev_balance} @@ -678,17 +682,17 @@ class EmailDigest(Document): if account_type == "Payable": label = get_link_to_report( "Accounts Payable", - label=_(self.meta.get_label(fieldname)), + label=_(self.meta.get_label(fieldname), context=self.doctype), filters={"report_date": self.future_to_date, "company": self.company}, ) elif account_type == "Receivable": label = get_link_to_report( "Accounts Receivable", - label=_(self.meta.get_label(fieldname)), + label=_(self.meta.get_label(fieldname), context=self.doctype), filters={"report_date": self.future_to_date, "company": self.company}, ) else: - label = _(self.meta.get_label(fieldname)) + label = _(self.meta.get_label(fieldname), context=self.doctype) return {"label": label, "value": balance, "last_value": prev_balance, "count": count} @@ -760,7 +764,7 @@ class EmailDigest(Document): )[0] return { - "label": self.meta.get_label(fieldname), + "label": _(self.meta.get_label(fieldname), context=self.doctype), "value": value, "billed_value": billed_value, "delivered_value": delivered_value, @@ -793,7 +797,7 @@ class EmailDigest(Document): label = get_link_to_report( "Quotation", - label=_(self.meta.get_label(fieldname)), + label=_(self.meta.get_label(fieldname), context=self.doctype), report_type="Report Builder", doctype="Quotation", filters={ @@ -824,7 +828,7 @@ class EmailDigest(Document): label = get_link_to_report( doc_type, - label=_(self.meta.get_label(fieldname)), + label=_(self.meta.get_label(fieldname), context=self.doctype), report_type="Report Builder", filters=filters, doctype=doc_type, diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py index c2842c02c49..1a1608b7750 100644 --- a/erpnext/setup/install.py +++ b/erpnext/setup/install.py @@ -5,11 +5,11 @@ import os import frappe +from frappe import N_ as _ from frappe.custom.doctype.custom_field.custom_field import create_custom_fields from frappe.desk.page.setup_wizard.setup_wizard import add_all_roles_to from erpnext.setup.doctype.incoterm.incoterm import create_incoterms -from erpnext.setup.utils import identity as _ from .default_success_action import get_default_success_action diff --git a/erpnext/setup/setup_wizard/operations/install_fixtures.py b/erpnext/setup/setup_wizard/operations/install_fixtures.py index 42821707035..9e1875b2c9c 100644 --- a/erpnext/setup/setup_wizard/operations/install_fixtures.py +++ b/erpnext/setup/setup_wizard/operations/install_fixtures.py @@ -7,6 +7,7 @@ import os from pathlib import Path import frappe +from frappe import N_ as _ from frappe.desk.doctype.global_search_settings.global_search_settings import ( update_global_search_doctypes, ) @@ -16,7 +17,6 @@ from frappe.utils.nestedset import get_root_of from erpnext.accounts.doctype.account.account import RootNotEditable from erpnext.regional.address_template.setup import set_up_address_templates -from erpnext.setup.utils import identity as _ def read_lines(filename: str) -> list[str]: diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py index 3e0decd8f16..cf0def31d19 100644 --- a/erpnext/setup/utils.py +++ b/erpnext/setup/utils.py @@ -210,15 +210,3 @@ def welcome_email(): site_name = get_default_company() or "ERPNext" title = _("Welcome to {0}").format(site_name) return title - - -def identity(x, *args, **kwargs): - """Used for redefining the translation function to return the string as is. - - We want to create english records but still mark the strings as translatable. - E.g. when the respective DocTypes have 'Translate Link Fields' enabled or - we're creating custom fields. - - Use like this: `from erpnext.setup.utils import identity as _` - """ - return x diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 4f4ac843a27..4f53d00a453 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -370,7 +370,7 @@ class DeliveryNote(SellingController): if missing_label and missing_label != "No Label": errors.append( _("The field {0} in row {1} is not set").format( - frappe.bold(_(missing_label)), frappe.bold(item.idx) + frappe.bold(_(missing_label, context=item.doctype)), frappe.bold(item.idx) ) ) diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 3dfdb9c0221..00f67f5e7d2 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -272,7 +272,10 @@ class Item(Document): _( 'Image in the description has been removed. To disable this behavior, uncheck "{0}" in {1}.' ).format( - frappe.get_meta("Stock Settings").get_label("clean_description_html"), + _( + frappe.get_meta("Stock Settings").get_label("clean_description_html"), + context="Stock Settings", + ), get_link_to_form("Stock Settings"), ), alert=True, @@ -424,8 +427,8 @@ class Item(Document): frappe.throw( _("Taxes row #{0}: {1} cannot be smaller than {2}").format( tax.idx, - bold(_(tax.meta.get_label("maximum_net_rate"))), - bold(_(tax.meta.get_label("minimum_net_rate"))), + bold(_(tax.meta.get_label("maximum_net_rate"), context=tax.doctype)), + bold(_(tax.meta.get_label("minimum_net_rate"), context=tax.doctype)), ) ) @@ -702,7 +705,9 @@ class Item(Document): if new_properties != [cstr(self.get(field)) for field in field_list]: msg = _("To merge, following properties must be same for both items") - msg += ": \n" + ", ".join([_(self.meta.get_label(fld)) for fld in field_list]) + msg += ": \n" + ", ".join( + [_(self.meta.get_label(fld), context=self.doctype) for fld in field_list] + ) frappe.throw(msg, title=_("Cannot Merge"), exc=DataValidationError) def validate_duplicate_product_bundles_before_merge(self, old_name, new_name): @@ -1134,7 +1139,9 @@ class Item(Document): return if linked_doc := self._get_linked_submitted_documents(changed_fields): - changed_field_labels = [frappe.bold(_(self.meta.get_label(f))) for f in changed_fields] + changed_field_labels = [ + frappe.bold(_(self.meta.get_label(f), context=self.doctype)) for f in changed_fields + ] msg = _( "As there are existing submitted transactions against item {0}, you can not change the value of {1}." ).format(self.name, ", ".join(changed_field_labels)) diff --git a/erpnext/stock/doctype/item_alternative/item_alternative.py b/erpnext/stock/doctype/item_alternative/item_alternative.py index ae536ab2a25..8d8fce14dcc 100644 --- a/erpnext/stock/doctype/item_alternative/item_alternative.py +++ b/erpnext/stock/doctype/item_alternative/item_alternative.py @@ -56,7 +56,7 @@ class ItemAlternative(Document): frappe.msgprint( _("The value of {0} differs between Items {1} and {2}").format( - frappe.bold(item_meta.get_label(field)), + frappe.bold(_(item_meta.get_label(field), context="Item")), frappe.bold(self.alternative_item_code), frappe.bold(self.item_code), ), diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 386f49b36ed..207f2c4804e 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -805,7 +805,10 @@ class StockEntry(StockController, SubcontractingInwardController): def _validate_no_raw_materials_in_manufacture_entry(self, settings): for item in self.items: if not item.is_finished_item and not item.secondary_item_type and not item.is_legacy_scrap_item: - label = frappe.get_meta(settings.doctype).get_label("get_rm_cost_from_consumption_entry") + label = _( + frappe.get_meta(settings.doctype).get_label("get_rm_cost_from_consumption_entry"), + context=settings.doctype, + ) frappe.throw( _( "Row {0}: As {1} is enabled, raw materials cannot be added to {2} entry. Use {3} entry to consume raw materials." diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index f20f078f0f3..ae346a313dd 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -195,7 +195,7 @@ class StockLedgerEntry(Document): mandatory = ["warehouse", "posting_date", "voucher_type", "voucher_no", "company"] for k in mandatory: if not self.get(k): - frappe.throw(_("{0} is required").format(_(self.meta.get_label(k)))) + frappe.throw(_("{0} is required").format(_(self.meta.get_label(k), context=self.doctype))) if self.voucher_type != "Stock Reconciliation" and not self.actual_qty: frappe.throw(_("Actual Qty is mandatory")) diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py index e7abb0be3ea..2e88a83127a 100644 --- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py +++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py @@ -245,7 +245,7 @@ class StockReservationEntry(Document): ] for d in mandatory: if not self.get(d): - msg = _("{0} is required").format(_(self.meta.get_label(d))) + msg = _("{0} is required").format(_(self.meta.get_label(d), context=self.doctype)) frappe.throw(msg) def validate_group_warehouse(self) -> None: diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py index c986a4fa115..c6f1ccfa358 100644 --- a/erpnext/stock/doctype/stock_settings/stock_settings.py +++ b/erpnext/stock/doctype/stock_settings/stock_settings.py @@ -264,8 +264,15 @@ class StockSettings(Document): _( "You have enabled {0} and {1} in {2}. This can lead to prices from the default price list being inserted in the transaction price list." ).format( - "{}".format(_(self.meta.get_label("auto_insert_price_list_rate_if_missing"))), - "{}".format(_(selling_meta.get_label("fallback_to_default_price_list"))), + "{}".format( + _(self.meta.get_label("auto_insert_price_list_rate_if_missing"), context=self.doctype) + ), + "{}".format( + _( + selling_meta.get_label("fallback_to_default_price_list"), + context=selling_meta.name, + ) + ), frappe.bold(_("Selling Settings")), ) ) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 5c5a35bd29a..4c48bbea0cd 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -1440,7 +1440,10 @@ def validate_conversion_rate(ctx: frappe._dict, meta): # validate currency conversion rate validate_conversion_rate( - ctx.currency, ctx.conversion_rate, meta.get_label("conversion_rate"), ctx.company + ctx.currency, + ctx.conversion_rate, + _(meta.get_label("conversion_rate"), context=meta.name), + ctx.company, ) ctx.conversion_rate = flt( @@ -1461,7 +1464,7 @@ def validate_conversion_rate(ctx: frappe._dict, meta): validate_conversion_rate( ctx.price_list_currency, ctx.plc_conversion_rate, - meta.get_label("plc_conversion_rate"), + _(meta.get_label("plc_conversion_rate"), context=meta.name), ctx.company, ) diff --git a/erpnext/templates/print_formats/includes/item_table_description.html b/erpnext/templates/print_formats/includes/item_table_description.html index 4ad3d6dd1d1..5fabddbc40e 100644 --- a/erpnext/templates/print_formats/includes/item_table_description.html +++ b/erpnext/templates/print_formats/includes/item_table_description.html @@ -38,7 +38,7 @@ {%- for fieldname in columns -%} {% if doc.get(fieldname) and doc.in_format_data(fieldname) -%}

- {{ _(doc.meta.get_label(fieldname)) }}: + {{ _(doc.meta.get_label(fieldname), context=doc.doctype) }}: {{ doc.get_formatted(fieldname, translated=True) }}

{% endif %} diff --git a/erpnext/templates/print_formats/includes/taxes.html b/erpnext/templates/print_formats/includes/taxes.html index 1935542e366..27397fc7ee8 100644 --- a/erpnext/templates/print_formats/includes/taxes.html +++ b/erpnext/templates/print_formats/includes/taxes.html @@ -2,7 +2,7 @@ {%- if doc.discount_amount -%}
-
+
- {{ doc.get_formatted("discount_amount", doc) }}
diff --git a/erpnext/templates/print_formats/includes/taxes_and_charges.html b/erpnext/templates/print_formats/includes/taxes_and_charges.html index 0d8e3834d81..da076d5daf5 100644 --- a/erpnext/templates/print_formats/includes/taxes_and_charges.html +++ b/erpnext/templates/print_formats/includes/taxes_and_charges.html @@ -11,7 +11,7 @@ {%- macro render_discount_amount(doc) -%} {%- if doc.discount_amount -%} - {{ render_row(_(doc.meta.get_label('discount_amount')), '- ' + doc.get_formatted("discount_amount", doc)) }} + {{ render_row(_(doc.meta.get_label('discount_amount'), context=doc.doctype), '- ' + doc.get_formatted("discount_amount", doc)) }} {%- endif -%} {%- endmacro -%}