mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-29 22:54:38 +02:00
#2505 (Squad MVP) merged with 29 hardcoded English strings in JSX text nodes — packages/views/squads/components/squads-page.tsx (4) and squad-detail-page.tsx (25). The package's eslint config enforces `i18next/no-literal-string` as ERROR for every .tsx file, so @multica/views#lint has been red on main, which Turbo cascades to @multica/web#build, @multica/desktop#build, and @multica/views#typecheck — effectively blocking every open PR's frontend CI (#2538, #2540, etc.). Rather than disabling the rule for the Squad files (which would just hide debt in a high-visibility surface), wire up a proper i18n namespace and replace every flagged literal. Namespace plumbing - New `packages/views/locales/en/squads.json` and `packages/views/locales/zh-Hans/squads.json` covering all 29 flagged strings, grouped by surface (page / inspector / name_editor / add_member_dialog / description_dialog / discard_changes_dialog / members_tab / instructions_tab). - Registered in `packages/views/locales/index.ts` and `packages/views/i18n/resources-types.ts` so `t($ => $.squads.*)` is type-safe. Component replacements - `squads-page.tsx`: add `useT("squads")`, replace 4 literals. - `squad-detail-page.tsx`: add `useT("squads")` to seven inner components that hold flagged text (`SquadDetailPage` / `InlineEdit Popover` / `AddMemberDialog` / `RoleEditor` / `SquadDescriptionEditor` / `SquadDescriptionEditorBody` / `SquadOverviewPane` / `SquadMembers Tab` / `SquadInstructionsTab` / `SquadDetailInspector`), replace all flagged literals. - Plural members count uses i18next's standard `_one` / `_other` suffixes via `t(..., { count })` — matches the convention already used in `runtimes/usage` and `agents`. Notes - A few unflagged user-facing strings remain (tab labels in squadDetailTabs array, ternary alternatives like `"Save"` inside `{x ? <Loader/> : "Save"}`, the inline `confirm()` archive prompt, the `toast.success("Leader updated")` message). The eslint rule uses `mode: "jsx-text-only"` so it only flags string children of JSX nodes; attribute strings, object-literal values, and ternary alternatives slip past. Those are real i18n gaps too but expanding scope here would gold-plate the CI-unblock fix. Verification - `pnpm --filter @multica/views lint`: 0 errors (was 29). Remaining 13 warnings are pre-existing in unrelated files and don't fail CI. - `pnpm typecheck`: 6/6 packages pass — namespace types resolve, all selector calls infer correctly.