# Working Group dashboard translations

The live route is /pswg/dashboard/working-group. It renders WorkingGroupScreen,
which reuses CdcGpsfDashboardScreen and Ministry charts. Labels are owned by the
route module, never by the shared component's directory.

## Admin pages

| Module | Translation page |
| --- | --- |
| PSWG, CDC, CEFP | dashboard_working_group |
| Ministry, CDC G-PSF | dashboard |

The existing title key names the sidebar item. page_title independently names
the page heading. The other 51 UI keys cover subtitle, filters, status cards,
charts/legends/tooltips, export/New menus, last updated and error/empty notices.
English and Khmer defaults are provided; frontend kh is requested as API km.

The screen provider requests /translations/dictionary with module, page and
language. Queries are isolated per module/page/language and refresh on mount
and window focus. Missing/inactive/blank keys fall back locally, never to
another module's dictionary. Return to the page after editing labels in Admin.

## Seed

From backend: npm run prisma:seed:working-group-translations

dashboard-labels.seed.ts is included by all five module seed files, including
pswg.translation.seed.ts, so the full seed also includes these keys.
The scoped runner creates missing keys and required parents without overwriting
Admin edits.

## Shared UI audit

- Header, filters, actions and last-updated consume the dashboard context.
- IssueMatrixStatusCards receives dashboard labels explicitly; it does not
  request the CDC G-PSF issue_matrix dictionary.
- Ministry charts receive titles/status labels as props. Their nested export
  menus use a neutral ExportLabelsProvider scoped to this dashboard.
- FilterPanelGrouped receives all translated control labels as props.
- Working group/agency/category names are business data from their APIs, not
  static page labels; IDs and filter behavior are unchanged.
- Add Issue navigates to /pswg/wg-issues?view=create; Request Meeting navigates
  to /pswg/meeting-requests?view=create. Those pages retain their own dictionaries.
- The old working-group header/summary/chart mock components and
  add-working-group-issue-dialog are not imported by the live screen. Their
  unused mock strings were not added as misleading Admin controls.

Tests: backend prisma/seeds/translations/working-group.test.ts and frontend
features/cdc-gpsf/dashboard/dashboard-translations.spec.tsx.
