Skip to content

Localize React Studio Preview and packaged modules - #8957

Merged
sfmskywalker merged 15 commits into
mainfrom
codex/8859-react-studio-localization
Oct 21, 2026
Merged

sfmskywalker merged 15 commits into
mainfrom
codex/8859-react-studio-localization

Conversation

@sfmskywalker

@sfmskywalker sfmskywalker commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

Adds live English/Dutch localization for React Studio Preview (#8855, part of #8859). This replaces hard-coded interface copy with 1,213 checked messages and a shared i18next instance rather than introducing another localization mechanism. Matching nonempty Blazor Dutch translations are reused; React-only messages are translated in the SDK catalog.

The header saves the selected culture per API URL and authenticated subject. Switching language updates interface copy, metadata, formatting and completion descriptions while preserving the open editor, selected activity, unsaved workflow names and expressions. Modules contribute transactional, isolated translation namespaces with English fallback; the generated module demonstrates both languages without resetting widget state.

The public SDK additions are optional and additive. A real development React StrictMode regression verifies that query caches survive effect replay and clear on true unmount, supplementing the existing production browser cases. Catalog validation rejects missing/empty messages, interpolation mismatches and raw JSX display strings.

Validation: 151 unit tests, 25 ASP.NET host tests, 44 hosted browser cases, lint, type checking, catalog and module boundaries, production asset build and .NET 8/9/10 builds. Packed npm consumer compile/SSR, TypeDoc, and a fresh generated module using four npm tarballs plus 18 locally packed 3.11.0-preview.8855 NuGet packages passed. The template check switches English/Dutch while retaining widget state, edits/saves activity settings, verifies read-only behavior and checks disabled assets return 404. Dependency audit reports zero known vulnerabilities. Local proof packages have not been published.

Stacked on #8954 and ready for independent Elsa 3 review. Merge requires approval at the current full head SHA. Runtime backend messages and user-authored data are preserved rather than translated by the client.

Live culture regression coverage includes both log-count selectors, task notices translated when a delayed response arrives, and BPMN client refusal explanations while preserving original user titles and server diagnostics.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 288 files, which is 138 over the limit of 150.

To get a review, reduce the PR to 150 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to Team to raise the limit.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 71f11684-56d2-437e-b14b-312f29d4bf49
📥 Commits

Reviewing files that changed from the base of the PR and between 0e67ac4 and 92d40bd.

⛔ Files ignored due to path filters: 1
  • studio/react/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing: 288
  • .github/workflows/studio-react-source-validation.yml
  • studio/docs/specs/react-studio-preview/plan.md
  • studio/react/README.md
  • studio/react/docs/configuration.md
  • studio/react/docs/expressions.md
  • studio/react/docs/getting-started.md
  • studio/react/docs/localization.md
  • studio/react/docs/module-authoring.md
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/activity-properties-panel.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/binding-picker.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/checkbox-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/checklist-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/code-editor-hint.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/datetime-picker-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/dictionary-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/dropdown-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/dynamic-outcomes-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/http-status-codes-editor.test.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/http-status-codes-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/input-picker-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/json-editor-hint.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/literal-control.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/multiline-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/multitext-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/outcome-picker-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/output-picker-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/radiolist-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/singleline-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/switch-cases-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/type-picker-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/variable-picker-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/editors/workflow-definition-picker-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/expression-code-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/expression-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/settings/activity-settings.ts
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/settings/settings-tabs.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.ActivityEditors/Client/type-completions.ts
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/api.ts
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/components/alter-instance-dialog.test.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/components/alter-instance-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/components/alteration-composer.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/components/alteration-dialog-host.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/components/alteration-results.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/components/plan-status-badge.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/components/retry-faulted-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/pages/plan-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Alterations/Client/pages/plans-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Appearance/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Appearance/Client/pages/appearance-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/components/bar-list.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/components/dashboard-zones.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/components/donut-chart.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/components/empty-dashboard.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/components/range-toggle.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/components/runtime-status-chip.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/components/stat-tile.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/components/trend-chart.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/components/widget-card.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/format.ts
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/pages/dashboard-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/widgets/activity-widget.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/widgets/findings-widget.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/widgets/hotspots-widget.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/widgets/metrics-widget.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/widgets/per-workflow-widget.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/widgets/status-breakdown-widget.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Dashboard/Client/widgets/trend-widget.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/activity-card.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/activity-icon.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/activity-node.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/activity-toolbox.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/connection-edge.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/context-box-node.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/context-call-edge.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/context-workflow-node.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/data-edge.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/designer-breadcrumb.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/designer-canvas.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/designer-surface.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/node-context-toolbar.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/quick-add-menu.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/sequence-designer.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/slot-chip.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/state-machine-canvas.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/state-node.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/state-panel.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/transition-edge.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Designer/Client/components/transition-panel.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Diagnostics.ConsoleLogs/Client/components/console-log-view.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Diagnostics.ConsoleLogs/Client/components/storage-widget.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Diagnostics.ConsoleLogs/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Diagnostics.ConsoleLogs/Client/pages/console-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Diagnostics.StructuredLogs/Client/components/level-badge.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Diagnostics.StructuredLogs/Client/components/log-table.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Diagnostics.StructuredLogs/Client/components/storage-widget.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Diagnostics.StructuredLogs/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Diagnostics.StructuredLogs/Client/pages/structured-logs-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Environments/Client/components/environment-picker.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Environments/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Labels/Client/components/label-badge.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Labels/Client/components/label-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Labels/Client/components/workflow-labels-tab.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Labels/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Labels/Client/pages/labels-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/__tests__/store-fields.test.ts
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/api.ts
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/components/create-secret-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/components/edit-secret-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/components/rotate-secret-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/components/secret-picker-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/components/secret-picker.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/components/secret-status-badge.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/components/secret-value-field.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/components/store-fields.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/pages/secret-detail-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/pages/secrets-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Security/Client/components/deletion-blocked-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Security/Client/components/generated-password-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Security/Client/components/permission-editor.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Security/Client/components/role-checklist.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Security/Client/components/role-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Security/Client/components/user-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Security/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Security/Client/pages/roles-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Security/Client/pages/users-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Settings/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Settings/Client/pages/settings-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/app-shell.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/application.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/auth-callback.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/brand-mark.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/culture-picker.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/login-illustration.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/login-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/status-pages.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/studio-router.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/studio-sidebar.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/tenant-picker.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/theme-menu.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.Shell/Client/user-menu.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.UserTasks/Client/components/assign-task-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.UserTasks/Client/components/cancel-task-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.UserTasks/Client/components/complete-task-dialog.test.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.UserTasks/Client/components/complete-task-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.UserTasks/Client/components/user-task-status-badge.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.UserTasks/Client/components/user-tasks-gate.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.UserTasks/Client/hooks.ts
  • studio/react/dotnet/modules/Elsa.ReactStudio.UserTasks/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.UserTasks/Client/pages/detail-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.UserTasks/Client/pages/list-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/call-graph/call-graph-service.ts
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/call-graph/types.ts
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/bpmn-definition-view.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/bpmn-dialogs.test.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/bpmn-dialogs.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/call-context/call-context-status.test.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/call-context/call-context-status.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/call-context/use-call-context.ts
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/code-view.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/create-workflow-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/data-usage.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/editor-header.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/editor-side-pane.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/inputs-outputs-tab.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/issues-popover.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/run-workflow-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/shortcuts-dialog.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/variables-tab.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/versions-tab.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/components/workflow-properties-pane.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/pages/editor-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowDefinitions/Client/pages/list-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/activity-details-pane.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/activity-executions-list.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/date-filter-popover.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/executions-table.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/incidents-panel.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/input-output-panel.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/instance-details.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/instance-filters.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/instance-row-actions.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/journal-tree.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/multi-select.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/retries-panel.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/running-count-badge.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/components/variables-panel.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/index.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/pages/list-page.tsx
  • studio/react/dotnet/modules/Elsa.ReactStudio.WorkflowInstances/Client/pages/viewer-page.tsx
  • studio/react/package.json
  • studio/react/packages/api-client/src/react.test.tsx
  • studio/react/packages/auth/src/provider.tsx
  • studio/react/packages/auth/src/strategies/api-key.ts
  • studio/react/packages/auth/src/strategies/elsa-external.ts
  • studio/react/packages/auth/src/strategies/elsa-identity.ts
  • studio/react/packages/auth/src/strategies/oidc.ts
  • studio/react/packages/sdk/README.md
  • studio/react/packages/sdk/package.json
  • studio/react/packages/sdk/src/components.tsx
  • studio/react/packages/sdk/src/config-provider.tsx
  • studio/react/packages/sdk/src/config.ts
  • studio/react/packages/sdk/src/designer/context.tsx
  • studio/react/packages/sdk/src/designer/model/data-flow.ts
  • studio/react/packages/sdk/src/designer/model/flow-types.ts
  • studio/react/packages/sdk/src/designer/model/validation.ts
  • studio/react/packages/sdk/src/host.test.ts
  • studio/react/packages/sdk/src/host.ts
  • studio/react/packages/sdk/src/locales/en.json
  • studio/react/packages/sdk/src/locales/nl.json
  • studio/react/packages/sdk/src/localization.test.ts
  • studio/react/packages/sdk/src/localization.ts
  • studio/react/packages/sdk/src/module-boundary.tsx
  • studio/react/packages/sdk/src/modules.ts
  • studio/react/packages/sdk/src/navigation/link.tsx
  • studio/react/packages/sdk/src/register.ts
  • studio/react/packages/sdk/src/slots.ts
  • studio/react/packages/sdk/src/tenancy.ts
  • studio/react/packages/sdk/src/theme/elsa-theme-provider.tsx
  • studio/react/packages/sdk/src/theme/elsa-theme.ts
  • studio/react/packages/sdk/src/workflow-editor.tsx
  • studio/react/packages/sdk/tsconfig.json
  • studio/react/packages/ui/src/alert-dialog.tsx
  • studio/react/packages/ui/src/alert.tsx
  • studio/react/packages/ui/src/avatar.tsx
  • studio/react/packages/ui/src/badge.tsx
  • studio/react/packages/ui/src/breadcrumb.tsx
  • studio/react/packages/ui/src/button.tsx
  • studio/react/packages/ui/src/card.tsx
  • studio/react/packages/ui/src/checkbox.tsx
  • studio/react/packages/ui/src/collapsible.tsx
  • studio/react/packages/ui/src/command.tsx
  • studio/react/packages/ui/src/common/code-editor.tsx
  • studio/react/packages/ui/src/common/confirm-dialog.tsx
  • studio/react/packages/ui/src/common/copy-button.tsx
  • studio/react/packages/ui/src/common/data-table.tsx
  • studio/react/packages/ui/src/common/empty-state.tsx
  • studio/react/packages/ui/src/common/error-alert.tsx
  • studio/react/packages/ui/src/common/field.tsx
  • studio/react/packages/ui/src/common/filter-chips.tsx
  • studio/react/packages/ui/src/common/json-viewer.tsx
  • studio/react/packages/ui/src/common/key-value-table.tsx
  • studio/react/packages/ui/src/common/page-header.tsx
  • studio/react/packages/ui/src/common/search-input.tsx
  • studio/react/packages/ui/src/common/simple-select.tsx
  • studio/react/packages/ui/src/common/status-badge.tsx
  • studio/react/packages/ui/src/common/timestamp.tsx
  • studio/react/packages/ui/src/dialog.tsx
  • studio/react/packages/ui/src/dropdown-menu.tsx
  • studio/react/packages/ui/src/full-page-spinner.tsx
  • studio/react/packages/ui/src/icon-button.tsx
  • studio/react/packages/ui/src/input-group.tsx
  • studio/react/packages/ui/src/input.tsx
  • studio/react/packages/ui/src/label.tsx
  • studio/react/packages/ui/src/pagination.tsx
  • studio/react/packages/ui/src/popover.tsx
  • studio/react/packages/ui/src/radio-group.tsx
  • studio/react/packages/ui/src/resizable.tsx
  • studio/react/packages/ui/src/runtime/localize-module.ts
  • studio/react/packages/ui/src/runtime/module-registry.tsx
  • studio/react/packages/ui/src/runtime/settings.ts
  • studio/react/packages/ui/src/scroll-area.tsx
  • studio/react/packages/ui/src/select.tsx
  • studio/react/packages/ui/src/separator.tsx
  • studio/react/packages/ui/src/sheet.tsx
  • studio/react/packages/ui/src/sidebar.tsx
  • studio/react/packages/ui/src/skeleton.tsx
  • studio/react/packages/ui/src/sonner.tsx
  • studio/react/packages/ui/src/switch.tsx
  • studio/react/packages/ui/src/table.tsx
  • studio/react/packages/ui/src/tabs.tsx
  • studio/react/packages/ui/src/textarea.tsx
  • studio/react/packages/ui/src/tooltip.tsx
  • studio/react/samples/module-template/Module/Client/entry.tsx.template
  • studio/react/samples/weather-module/entry.tsx
  • studio/react/scripts/localization-catalog.mjs
  • studio/react/scripts/test-module-template.mjs
  • studio/react/src/lib/api/provider.tsx
  • studio/react/src/lib/auth/provider.tsx
  • studio/react/src/localization-provider.tsx
  • studio/react/src/main.tsx
  • studio/react/src/preference-validation.test.tsx
  • studio/react/src/providers.tsx
  • studio/react/src/tenancy-provider.tsx
  • studio/react/tests/localization.spec.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Review on demand using usage pricing
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Member Author

@greptileai

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Review skipped: 280 files exceed the limit of 150.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@greptile-apps

greptile-apps Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] No outstanding findings block merging the reviewed head.

Summary

Adds shared English/Dutch translations to React Studio Preview and packaged modules.

  • React Studio lets each user choose a language for each server.
  • Packaged modules can show their own translated interface text.
  • Built-in Studio screens show translated labels and messages.
  • Localization catalogs get checks and guidance for maintainers.

The six earlier localization threads remain addressed, as established in the prior review; none is repeated here. sfmskywalker acknowledged that arbitrary callback and message-dictionary data-flow analysis remains outside the catalog check’s documented scope; the reported visible strings were translated, and direct JSX, heading, and toast checks were added.

No new actionable issue was found. No additional tests were run for this review.

Reviews (9) · Last reviewed commit: "Merge branch 'codex/8859-react-studio-te..." · Reviewed by Greptile

Comment thread studio/react/packages/sdk/src/locales/nl.json Outdated
Comment thread studio/react/scripts/localization-catalog.mjs Outdated

Copy link
Copy Markdown
Member Author

@greptileai

@sfmskywalker
sfmskywalker marked this pull request as ready for review October 21, 2026 04:20

Copy link
Copy Markdown
Member Author

@greptileai Please review integrated head f86122d after the current-main merge.

Comment thread studio/react/dotnet/modules/Elsa.ReactStudio.Secrets/Client/api.ts Outdated

Copy link
Copy Markdown
Member Author

@greptileai Please review final integrated head 7ebf114. The latest main is incorporated and the addressed findings are verified and resolved.

Copy link
Copy Markdown
Member Author

@greptileai Please review pushed head d65c9e8. All six latest findings have independently verified fixes and resolved threads, with208unit/28host/49browser checks passing locally.

Copy link
Copy Markdown
Member Author

@greptileai Please review pushed head 90cd534. Runtime-valid expression aliases/usage indexing and live-culture cached call-graph warnings are fixed with independently verified regressions; all three latest threads are resolved.

Copy link
Copy Markdown
Member Author

@greptileai Please review pushed head 2f0b69c. The only new change is the browser assertion using the valid getCustomer() accessor; product aliases, usage tracking and live-culture warning fixes are unchanged. All five hosted expression browser cases pass and global review threads are resolved.

Copy link
Copy Markdown
Member Author

@greptileai Please review pushed head 288bcc3. The assignment/read-usage finding is fixed per property occurrence with regressions preserving self-read RHS and equality. Its thread is independently verified/resolved;227unit and production build pass.

Copy link
Copy Markdown
Member Author

@greptileai Please review pushed head 9f38c35. Compound/update variable usage, serialized picker references, and emitted generic getter round-trips are fixed with regressions. Validation messages translate when rendered while drafts and server diagnostics are preserved. Both latest threads are verified/resolved; full294unit/lint/types/catalog/boundary checks pass. Inherited sibling-scope attribution is tracked separately in #8978.

Copy link
Copy Markdown
Member Author

@greptileai Please review pushed head 92d40bd. The only new change explicitly removes the single test cursor marker using slices rather than replace, preserving all expression content and avoiding the CodeQL false-positive escaping heuristic. Product code is unchanged from the reviewed operator/typed-reference/live-validation fixes. All review threads are verified and resolved.

@sfmskywalker sfmskywalker mentioned this pull request Oct 21, 2026
20 of 24 tasks
Base automatically changed from codex/8859-react-studio-tenants to main October 21, 2026 22:46

Copy link
Copy Markdown
Member Author

User-authorized self-review for #8859.

APPROVE + HIGH @ 92d40bd

Reviewed 1,217 English/Dutch messages, per-user persisted culture, live cached graph warning/count translation, live module-contributed translations and localization checks. Public SDK translation support and generated module consumption are included; no complete parity beyond the documented checklist is claimed.

The final adaptation passes 294 unit, 28 hosting and 49 browser tests, lint/types, module-boundary and localization checks, and builds for net8/net9/net10. The final six findings and subsequent expression-alias/index and cached-culture findings were fixed with regression coverage before this merge.

At merge time, current-head CI is green, Greptile is 5/5 on this exact head, and the exhaustive stack thread audit records zero unresolved findings. This is an author self-review under the task owner's explicit standing self-review/self-merge authority, not an independent approval. Use the standard head-matched merge into main without changing protection or using an admin bypass.

Final review corrections include compound reads/writes, typed variable/input payloads, escaped generated getter labels, and live client-validation translations with preserved unsaved state. Full unit suite: 294 passing; lint/types, 1,217-message catalogs and 257-file module boundary checks pass.

The final test-only correction makes artificial cursor-marker removal explicit for CodeQL without changing product bytes. Full 49 browser scenarios passed before it, and all five expression browser cases passed afterward. No security alert was suppressed.

@sfmskywalker
sfmskywalker merged commit a260324 into main Oct 21, 2026
10 checks passed
@sfmskywalker
sfmskywalker deleted the codex/8859-react-studio-localization branch October 21, 2026 22:46
@sfmskywalker sfmskywalker mentioned this pull request Oct 21, 2026
4 tasks
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.

1 participant