Skip to content

fix: translate remaining untranslated UI strings (empty states, Kanban) - #2432

Open
palamars wants to merge 4 commits into
frappe:developfrom
palamars:i18n-fixes-v2
Open

fix: translate remaining untranslated UI strings (empty states, Kanban)#2432
palamars wants to merge 4 commits into
frappe:developfrom
palamars:i18n-fixes-v2

Conversation

@palamars

@palamars palamars commented Jul 9, 2026

Copy link
Copy Markdown

Summary

  • EmptyState.vue's computedTitle/computedDescription returned an explicitly-passed title/description prop raw, without __() — only the name-based fallback text was translated. This silently broke translation for every call site that passes an explicit title/description instead of relying on the name fallback (Activities empty states, Notifications, SLA Policies, Lead Sources, Email Templates, Assignment Rules). Fixed by wrapping both props in __().
  • IconPicker.vue: search placeholder and "Random" button text were unwrapped literals.
  • AssignmentRules/AssigneeRules.vue: the routing-option dropdown (option.label) was rendered raw in two places — the "currently selected" display and the list items in the open dropdown.
  • Settings/Profile/UserEmailSettings.vue: email signature editor placeholder was unwrapped.
  • Kanban/KanbanView.vue: column headers (column.column.name, i.e. the lead/deal status name) were rendered raw — fixes Kanban column headers not translated (missing __() in KanbanView.vue) #2428.
  • Kanban/KanbanSettings.vue: the Kanban Settings dialog (Column Field / Title Field / Fields Order / Add Field) rendered raw DocType field labels straight from field metadata, never through __().

All fixes are the same shape: wrap an existing value in __(); no behavior change for English, no new strings introduced. Verified against a live ru/uk-localized deployment — Kanban columns, Kanban Settings dialog, and the empty-state messages listed above all rendered as English before this fix and localized correctly after.

(Re-opened against develop — the original PR targeted main and was auto-closed by Mergify. Also folds in a fix for a second AssigneeRules.vue occurrence caught by the greptile-apps review on that PR.)

Test plan

  • Confirmed each affected string was previously bypassing __() (either passed as a static title/description prop to EmptyState.vue, or interpolated raw in a template)
  • Built and deployed to a live CRM instance with custom ru/uk Translation records; visually confirmed each string now renders translated
  • No new strings added, no logic/behavior changes — pure __() wrapping

Fixes #2428

palamars added 3 commits July 9, 2026 09:28
Fixes empty-state titles/descriptions passed as static props to
EmptyState.vue not being translated (Activities, Notifications, SLA
policies, lead sync sources, email templates, assignment rules),
plus IconPicker's search placeholder/Random button, the assignment
rule routing option labels, and the email signature editor
placeholder.
Kanban board column names (deal/lead statuses) and the field labels
in Kanban Settings (Column Field / Title Field / Fields Order) were
rendered from raw field metadata without __(), so they stayed in
English even though the same statuses/field labels are translated
elsewhere in the app.
…ed-value display

AssigneeRules.vue's routing-option dropdown has two render sites for
option.label - the currently-selected value display (already fixed)
and the list items in the open dropdown (missed). Caught by
greptile-apps review on the original PR.
@mergify

mergify Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Tick the box to add this pull request to the merge queue (same as @mergifyio queue).

  • Queue this pull request

@greptile-apps

greptile-apps Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Confidence Score: 5/5

All changes are additive __() wrappers with no logic impact on English deployments — safe to merge.

Every change is a mechanical __() wrap on a static or metadata-sourced string; no control flow, data mutation, or API calls are touched. The || '' fallback in AssigneeRules.vue correctly handles the undefined case from find().

No files require special attention.

Reviews (2): Last reviewed commit: "fix: explicit '' fallback before __() wh..." | Re-trigger Greptile

Comment thread frontend/src/components/Settings/AssignmentRules/AssigneeRules.vue
palamars added a commit to palamars/crm that referenced this pull request Jul 9, 2026
- parseBgColor(): the !bg-* tint uses !important, which permanently
  overrode hover:bg-surface-gray-2 even during hover - not just for
  a rare no-color edge case as the first fix assumed, but for every
  column with a color (i.e. almost always, since columns get an
  auto-assigned color by default). Fixed by giving every branch its
  own hover:!bg-* variant instead of relying on a separate
  non-important class that could never win against !important.
- AssigneeRules.vue: explicit '' fallback before __() when .find()
  returns no match, for clarity (was already safe - __(undefined)
  returns undefined without throwing - just not obviously so).

Both caught by greptile-apps on the re-opened frappe#2432/frappe#2433.
…finds no match

Was already safe (__(undefined) returns undefined without throwing)
but greptile-apps flagged the intent as unclear. Caught on the
re-opened PR.
@mergify

mergify Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

@palamars this pull request has merge conflicts. Please resolve them so it can be reviewed and merged.

@mergify mergify Bot added the conflicts label Jul 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Kanban column headers not translated (missing __() in KanbanView.vue)

1 participant