Observed live on a Bulgarian-localized generated app: the per-record action buttons stay English while everything around them is translated - the transition buttons (Void), the create-from buttons (Save as Template, Record Reminder), and the built-in Duplicate (plus a set of chat/upload strings).
Two independent gaps:
- The generated catalog template misses nine
defaults.* keys the views reference (duplicate, send, status, system, internal, internalNote, writeMessage, upload, uploading) - T() silently falls back to the English default and downstream language catalogs never see the keys.
- The transition/generates action descriptors carry no translation key: the renderer already supports
T(action.translation.key, action.label), but the generated descriptors emit only the raw label, so it renders verbatim.
Fix.
- The nine keys land in the catalog template.
- The descriptors carry
translation: { key: "<project>:<model>-model.actions.<name>" }; EdmIntentGenerator puts a customActionLabels map on the .model root (one label derivation shared with the descriptors - authored label: else humanized name), and the template engine's translate action folds it into the generated en catalog's actions section - so downstream language catalogs cover the buttons like any other label.
The BPM task form's own labels (Approve) are a separate untranslated surface - #6522.
Observed live on a Bulgarian-localized generated app: the per-record action buttons stay English while everything around them is translated - the transition buttons (Void), the create-from buttons (Save as Template, Record Reminder), and the built-in Duplicate (plus a set of chat/upload strings).
Two independent gaps:
defaults.*keys the views reference (duplicate,send,status,system,internal,internalNote,writeMessage,upload,uploading) -T()silently falls back to the English default and downstream language catalogs never see the keys.T(action.translation.key, action.label), but the generated descriptors emit only the raw label, so it renders verbatim.Fix.
translation: { key: "<project>:<model>-model.actions.<name>" };EdmIntentGeneratorputs acustomActionLabelsmap on the.modelroot (one label derivation shared with the descriptors - authoredlabel:else humanized name), and the template engine's translate action folds it into the generated en catalog'sactionssection - so downstream language catalogs cover the buttons like any other label.The BPM task form's own labels (Approve) are a separate untranslated surface - #6522.