From 6b41dc2fed0340ade26b6df4b50845d17f4dde1b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 22:36:48 +0200 Subject: [PATCH] fix: make labels in error message translatable (backport #48327) (#48436) Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com> fix: make labels in error message translatable (#48327) --- .../accounts_settings/accounts_settings.py | 4 +-- .../doctype/payment_entry/payment_entry.py | 2 +- .../payment_reconciliation.py | 2 +- .../doctype/pricing_rule/pricing_rule.py | 2 +- erpnext/accounts/utils.py | 2 +- erpnext/manufacturing/doctype/bom/bom.py | 2 +- .../doctype/work_order/work_order.py | 4 +-- .../doctype/email_digest/email_digest.py | 30 +++++++++---------- erpnext/stock/doctype/item/item.py | 4 +-- .../stock_ledger_entry/stock_ledger_entry.py | 2 +- .../stock_reservation_entry.py | 2 +- 11 files changed, 28 insertions(+), 28 deletions(-) diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py index d03ebed353e..7959f163871 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py @@ -147,8 +147,8 @@ 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"))), + frappe.bold(_(self.meta.get_label("add_taxes_from_taxes_and_charges_template"))), ), title=_("Auto Tax Settings Error"), ) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index f96145b65d1..5c2dc7747bb 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -568,7 +568,7 @@ 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)))) def validate_reference_documents(self): valid_reference_doctypes = self.get_valid_reference_doctypes() diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py index 27001e9ab14..c77870d0886 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py @@ -589,7 +589,7 @@ 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)))) 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 f0481ad63f6..21e5ad18d9b 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -169,7 +169,7 @@ 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))), frappe.MandatoryError) if self.apply_rule_on_other: o_field = "other_" + frappe.scrub(self.apply_rule_on_other) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 6fa0e3e9802..56133c036d3 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -169,7 +169,7 @@ def validate_fiscal_year(date, fiscal_year, company, label="Date", doc=None): if doc: doc.fiscal_year = years[0] else: - throw(_("{0} '{1}' not in Fiscal Year {2}").format(label, formatdate(date), fiscal_year)) + throw(_("{0} '{1}' not in Fiscal Year {2}").format(_(label), formatdate(date), fiscal_year)) @frappe.whitelist() diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index 5a6edb703fa..bf6bf2530ce 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -987,7 +987,7 @@ class BOM(WebsiteGenerator): self.transfer_material_against = "Work Order" if not self.transfer_material_against and not self.is_new(): frappe.throw( - _("Setting {} is required").format(self.meta.get_label("transfer_material_against")), + _("Setting {0} is required").format(_(self.meta.get_label("transfer_material_against"))), title=_("Missing value"), ) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index 176e955ee72..9b1bf28f997 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -390,7 +390,7 @@ class WorkOrder(Document): if qty > completed_qty: frappe.throw( _("{0} ({1}) cannot be greater than planned quantity ({2}) in Work Order {3}").format( - self.meta.get_label(fieldname), qty, completed_qty, self.name + _(self.meta.get_label(fieldname)), qty, completed_qty, self.name ), StockOverProductionError, ) @@ -1077,7 +1077,7 @@ class WorkOrder(Document): self.transfer_material_against = "Work Order" if not self.transfer_material_against: frappe.throw( - _("Setting {} is required").format(self.meta.get_label("transfer_material_against")), + _("Setting {0} is required").format(_(self.meta.get_label("transfer_material_against"))), title=_("Missing value"), ) diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py index 610ef6205ee..c00b947b295 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.py +++ b/erpnext/setup/doctype/email_digest/email_digest.py @@ -395,7 +395,7 @@ class EmailDigest(Document): label = get_link_to_report( "General Ledger", - self.meta.get_label("income"), + _(self.meta.get_label("income")), filters={ "from_date": self.future_from_date, "to_date": self.future_to_date, @@ -427,7 +427,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")), filters=filters, ) @@ -435,7 +435,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")), filters=filters, ) @@ -466,7 +466,7 @@ class EmailDigest(Document): label = get_link_to_report( "General Ledger", - self.meta.get_label("expenses_booked"), + _(self.meta.get_label("expenses_booked")), filters={ "company": self.company, "from_date": self.future_from_date, @@ -500,7 +500,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")), report_type="Report Builder", doctype="Sales Order", filters={ @@ -526,7 +526,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")), report_type="Report Builder", doctype="Sales Order", filters={ @@ -552,7 +552,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")), report_type="Report Builder", doctype="Purchase Order", filters={ @@ -578,7 +578,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")), report_type="Report Builder", doctype="Purchase Order", filters={ @@ -630,7 +630,7 @@ 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)), filters=filters ) else: filters = { @@ -640,7 +640,7 @@ 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)), filters=filters ) return {"label": label, "value": balance, "last_value": prev_balance} @@ -648,17 +648,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)), 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)), filters={"report_date": self.future_to_date, "company": self.company}, ) else: - label = self.meta.get_label(fieldname) + label = _(self.meta.get_label(fieldname)) return {"label": label, "value": balance, "last_value": prev_balance, "count": count} @@ -748,7 +748,7 @@ class EmailDigest(Document): label = get_link_to_report( "Quotation", - label=self.meta.get_label(fieldname), + label=_(self.meta.get_label(fieldname)), report_type="Report Builder", doctype="Quotation", filters={ @@ -779,7 +779,7 @@ class EmailDigest(Document): label = get_link_to_report( doc_type, - label=self.meta.get_label(fieldname), + label=_(self.meta.get_label(fieldname)), report_type="Report Builder", filters=filters, doctype=doc_type, diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 0536caf61a1..3409e9a559a 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -634,7 +634,7 @@ 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)) 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): @@ -981,7 +981,7 @@ 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))) 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/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index 11426aea51a..ddef027d0b8 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -192,7 +192,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)))) 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 a66214c0aa7..5d6aa9f68f8 100644 --- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py +++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py @@ -115,7 +115,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))) frappe.throw(msg) def validate_group_warehouse(self) -> None: