Add UOM Category to the translated-doctype pipeline so its values (shown
as the `category` column of UOM Conversion Factor) render in az/ru:
- force translated_doctype=1 on the DocType JSON (update_doctype.py)
- list-view subject formatter (translate_listview_subjects.js + hooks)
- 11 missing category names + override of two upstream mistranslations:
"Force" (was a verb) and "Area" (was "region") in extras.po (az, ru)
Fix _merge_extras: babel's Catalog.__setitem__ only merges metadata for an
existing key and never overwrites the translation string, so extras could
add new msgids but never correct an existing upstream one. Force the string
so "extras wins on conflict" actually holds (this is what made the "Area"
override take effect).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Master PO files for the setup wizard, mirrored into apps/jey_wizard/locale
and compiled to .mo by setup_locale() on bench migrate.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace per-doctype scorecard list scripts with one shared
translate_listview_subjects.js covering Activity Type, Market Segment,
Role, Role Profile, UOM, Territory, Price List, and the supplier
scorecards. Add missing az/ru translations for Communication and
Azerbaijan.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Frappe's gettext extractor misses two categories of translatable strings:
bare literals in source code that get wrapped in __() only at render time
(e.g. "Save Current Filter" in list_filter.js:88), and labels stored as
data in DocType fixtures (e.g. Number Card / Dashboard Chart labels like
"Open Opportunity", "Incoming Leads"). These never make it into upstream
.pot files, so they cannot be translated via the standard cycle.
Adding such msgids directly to the main <lang>.po works but is fragile:
the next bench update-po-files run marks them obsolete because the .pot
doesn't contain them.
This change introduces extras.po sibling files in each translations_<lang>/
<app>/ directory. setup_locale() copies the main <lang>.po to the target
app's locale dir as before, then overlays extras.po on top via babel's
read_po/write_po. Obsolete (#~) entries are promoted back to active when
a matching extras msgid exists. Extras wins on conflict.
Seeded extras files cover currently-known gaps in frappe (Save Current
Filter) and erpnext (Open Opportunity plus 30 other CRM/dashboard labels).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Country DocType values (e.g. Country.name = "Azerbaijan") are kept as-is
to preserve ERPNext Link references.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>