Skip to content

fix(i18n): custom per-record action buttons localize — translation keys + catalog labels (#6523) - #6524

Merged
delchev merged 1 commit into
masterfrom
fix/custom-action-i18n
Aug 4, 2026
Merged

fix(i18n): custom per-record action buttons localize — translation keys + catalog labels (#6523)#6524
delchev merged 1 commit into
masterfrom
fix/custom-action-i18n

Conversation

@delchev

@delchev delchev commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Closes #6523.

On a Bulgarian-localized app the per-record action buttons stayed English — transitions (Void), create-from actions (Save as Template, Record Reminder), the built-in Duplicate, and a set of chat/upload strings. Two independent gaps, both fixed:

  • Nine defaults.* keys the views reference were missing from the generated catalog template (duplicate, send, status, system, internal, internalNote, writeMessage, upload, uploading) — T() silently fell back to English and downstream language catalogs never saw the keys. Added with the views' exact default texts.
  • Transition/generates descriptors carried no translation key. The custom-action renderer already supports T(action.translation.key, action.label); the descriptors now emit translation: { key: "<project>:<model>-model.actions.<name>" }. EdmIntentGenerator puts a customActionLabels map on the .model root — one label derivation shared with the descriptors (IntentNaming.customActionLabel: authored label:, else the humanized name) so the catalog entry always matches the button's fallback — and the template engine's model translate action folds it into the generated en catalog's actions section, where downstream language tooling picks it up like any other label.

Tests: IntentEngineIT locks both halves on the generates fixture — the descriptor carries the model-catalog key, and the generated i18n/en-US/<model>.json contains the actions section (targeted IT green locally). engine-intent 300/300 unit tests.

The BPM task form's own labels (Approve, field labels) are a separate untranslated surface — filed as #6522.

Template/generator-only — reaches deployed apps on regeneration (+ downstream bg catalogs on their next sync).

🤖 Generated with Claude Code

…rry translation keys, labels land in the catalog (#6521)

On a localized generated app the per-record action buttons stayed
English: the transition buttons (Void), the create-from buttons (Save
as Template, Record Reminder) and the built-in Duplicate, plus the
chat/upload strings. Two gaps: the catalog template missed nine
defaults.* keys the views reference (T() fell back silently and
downstream language catalogs never saw them), and the generated
transition/generates descriptors emitted only a raw label although the
renderer already supports T(action.translation.key, label).

The nine keys are added to the catalog template. The descriptors now
carry translation: {key: "<project>:<model>-model.actions.<name>"};
EdmIntentGenerator puts a customActionLabels map on the .model root
(label derivation shared with the descriptors via
IntentNaming.customActionLabel - authored label: else humanized name),
and the template engine's model translate action folds it into the
generated en catalog's actions section.

IntentEngineIT locks both halves: the generate-action descriptor
carries the model-catalog key and the en catalog carries the actions
section (green locally); engine-intent 300/300 unit tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@delchev delchev changed the title fix(i18n): custom per-record action buttons localize — translation keys + catalog labels (#6521) fix(i18n): custom per-record action buttons localize — translation keys + catalog labels (#6523) Aug 4, 2026
@delchev
delchev merged commit 1d05fa7 into master Aug 4, 2026
10 checks passed
@delchev
delchev deleted the fix/custom-action-i18n branch August 4, 2026 17:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Custom per-record action buttons stay English on a localized app (transitions, generates, Duplicate & co.)

1 participant