Problem/Motivation
A status keeps its English label on a French site, and there is no way to translate it by clicking. The same holds for a workflow and a tenant.
The translation itself is not broken. Everything underneath works:
- The schema types the label as
label, so it is a translatable string. config_translationbuilds a mapper for each of these entity types.- The overview route exists for each: for a status it is
/admin/config/workflow/orchestra/statuses/{orchestra_status}/translate. - Saving a French override makes the entity answer in French: with
labelset onlanguage.fr.orchestra.status.under_review,$status->label()returns the French under the French config override language.
What is missing is the tab. Asking the local task manager what tabs exist on a status edit form returns an empty list, while a core config entity such as a view returns its own tabs plus config_translation.local_tasks:entity.view.config_translation_overview.
Why
Core derives one local task per mapper, with base_route set to the entity's edit form (ConfigTranslationLocalTasks::getDerivativeDefinitions()). That derivative does exist here: the definition list contains config_translation.local_tasks:entity.orchestra_status.config_translation_overview.
But a tab bar is only rendered when the base route itself also has a local task, the one that becomes the default tab. Core entity types declare one, which is why entity.view.edit_form appears in its own tab list. This project declares none, so the derived Translate tab has nowhere to appear and the route is reachable only by typing the URL.
The existing orchestra.links.task.yml only declares the per-workflow override tabs, which hang off the workflow canonical route that a modeler provides, not off any edit form.
Scope
Three config entity types, the ones whose labels are read by people who did not author them:
orchestra_status, shown on the task rows and status tags a requester sees;orchestra_workflow, shown in the task lists, the instances list and the workflow filter;orchestra_tenant, shown wherever a tenant is named or chosen.
orchestra_remote is deliberately left out. It is the fourth config entity in the project and it has the same missing tab, but its label is an operator's name for a server they configured: it is read in the remote form itself, in two status messages and in the remote list, all under /admin/config/workflow/orchestra/remote. Translating it would mean translating a name for the same administrator who typed it, so the tab would carry no value there.
Proposed resolution
Declare the default tab for those three config entity edit forms in orchestra.links.task.yml, so the tab bar exists and the Translate tab joins it. Nothing else is needed: the edit route, the overview route and the mapper are already there.
Remaining tasks
The labels themselves still have to be translated per site, since these entities are created by the site rather than shipped, so there is no catalogue entry to carry them. This issue is about making that possible by clicking.
AI-Generated: Yes (Claude Code was used to diagnose this against a running site and to draft this issue summary and the change. The diagnosis was confirmed by reading the derived local task definitions, the mapper routes, and by saving a French override and reading the label back.)
Issue fork orchestra-3624957
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #2
mably commentedComment #3
mably commentedComment #5
mably commentedComment #7
mably commented