Skip to content

fix(ui): make UI language change consistent (#2185) - #2194

Open
rrewll wants to merge 2 commits into
Zoo-Code-Org:mainfrom
rrewll:fix/2185-make-language-switch-consistent
Open

rrewll wants to merge 2 commits into
Zoo-Code-Org:mainfrom
rrewll:fix/2185-make-language-switch-consistent

Conversation

@rrewll

@rrewll rrewll commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Related GitHub Issue

Closes: #2185

Description

Before this PR, the webview had three ways to get translations: useAppTranslation, useTranslation, and a direct import of import {t} from "i18next". Some of them did not follow a language change, so text could keep the previous language. This PR fixes the UI language change problem and makes the webview use one approach with react-i18next. Then it removes the custom translation layer.

The PR makes four changes:

  1. Load translations at startup. setup.ts calls loadTranslations() when the module loads. Before, a mount effect in TranslationProvider loaded them, so the first render could show raw keys.

  2. Apply the language directly. The new helper applyLanguage() (webview-ui/src/i18n/language.ts) changes the i18next language. It does nothing if the language is already active. The "state" message handler in ExtensionStateContext calls it before the state is rendered. Thus components show the correct language from their first render.

  3. Use common rules for react-i18next. These rules prevent stale cached output:

    • Get t and i18n from useTranslation. Do not import t from i18next and do not call i18next.t.
    • Pass t to each <Trans> (<Trans t={t} ... />).
    • Pass t as an argument to helpers. formatLargeNumber, formatTimeAgo, and validateApiConfiguration now take t.

    New ESLint rules in webview-ui/eslint.config.mjs enforce these rules. The translation guides (.roo/rules-translate/001-general-rules.md and .roo/skills/roo-translation/SKILL.md) describe them.

  4. Use one hook. All components use useTranslation from react-i18next. useAppTranslation is no longer used.

These changes make the translation harness simpler:

  • TranslationContext, its mock, and its test are deleted.
  • The Playwright TranslationContext stub and its Vite alias are deleted.
  • The visual fixtures use the new createFixtureI18n() helper with I18nextProvider.
  • Test mocks only mock react-i18next.

For reviewers, please check these items with care:

  • The applyLanguage() call in the "state" handler of ExtensionStateContext.tsx. This is now the only place where the language changes.
  • The new t argument in utils/format.ts and utils/validate.ts.
  • Most of the diff is a mechanical change from useAppTranslation to useTranslation, import { t } from "react-i18next" and direct usage of t to const { t } = useTranslation(), adding t property to every <Trans> component.

Test Procedure

New unit tests:

  • webview-ui/src/i18n/__tests__/languageSwitch.spec.tsx: It changes the language from en to es without a remount. Plain useTranslation, namespaced useTranslation, and Trans consumers all show the new language. The test consumers cache output on t, as React Compiler does. The test also checks that t is stable while the language does not change. It also checks that a namespaced t accepts fully qualified keys.
  • webview-ui/src/i18n/__tests__/hydrationLanguage.spec.tsx: Under StrictMode, components that hydration mounts show the hydrated language. It also tests applyLanguage(). The helper changes to a different language. It does not emit languageChanged again for the active language or for a missing language.
  • format.spec.ts and validate.spec.ts now pass t to the helpers.

To run the tests:

    cd webview-ui
    npx vitest run src/i18n src/utils
    npx vitest run
    pnpm lint

Manual test:

  1. Build and start the extension. Open the Zoo Code panel.
  2. If your language is not English by default, make sure that all visible text is language-consistent.
  3. Open Settings and change the language (for example, from English to Español). Click Save.
  4. Make sure that all visible text changes at the same time. Check the chat view, the task header, the Welcome page, and the Settings view. Do not reload the webview.
  5. Close and open the extension again. Make sure that the first render shows the saved language and no raw translation keys.

Pre-Submission Checklist

  • Issue Linked: This PR is linked to an approved GitHub Issue (see "Related GitHub Issue" above).
  • Scope: My changes are focused on the linked issue (one major feature/fix per PR).
  • Self-Review: I reviewed my own code with care.
  • Writing Style: The PR title and description use Simplified Technical English (ASD-STE100): short sentences, plain words, active voice, one idea per sentence, no contractions.
  • Testing: New and/or updated tests have been added to cover my changes (if applicable).
  • Visual Snapshot (UI changes only): If a user would notice this change at a glance (layout, theme tokens, brand elements, empty/error states), I added or updated a *.visual.tsx snapshot in webview-ui/. See webview-ui/AGENTS.md → "When a UI change needs a snapshot".
  • Documentation Impact: I checked if my changes need documentation updates (see "Documentation Updates" section below).
  • Contribution Guidelines: I read and agree to the Contributor Guidelines.

Videos (interaction / animation only)

Screen.Recording.2026-10-26.at.00.48.54.mov

Documentation Updates

  • No documentation updates are required.

Additional Notes

Get in Touch

GitHub: @rrewll
Discord: rorewillo

@coderabbitai

coderabbitai Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

Run configuration
Commits

Reviewing files that changed from the base of the PR and between 5cc5a37 and b1bf987.

Files ignored due to path filters: 5
  • webview-ui/src/components/history/__tests__/__screenshots__/history-rename-editor-dark.png is excluded by !**/*.png, !webview-ui/**/__screenshots__/**
  • webview-ui/src/components/history/__tests__/__screenshots__/history-rename-editor-high-contrast-light.png is excluded by !**/*.png, !webview-ui/**/__screenshots__/**
  • webview-ui/src/components/history/__tests__/__screenshots__/history-rename-editor-high-contrast.png is excluded by !**/*.png, !webview-ui/**/__screenshots__/**
  • webview-ui/src/components/history/__tests__/__screenshots__/history-rename-editor-light.png is excluded by !**/*.png, !webview-ui/**/__screenshots__/**
  • webview-ui/src/components/settings/__tests__/__screenshots__/opencode-go-temperature.png is excluded by !**/*.png, !webview-ui/**/__screenshots__/**
Files selected for processing: 238
  • .roo/rules-translate/001-general-rules.md
  • .roo/skills/roo-translation/SKILL.md
  • webview-ui/eslint.config.mjs
  • webview-ui/playwright/AppProviders.tsx
  • webview-ui/playwright/TranslationContext.ts
  • webview-ui/playwright/vite.config.ts
  • webview-ui/src/App.tsx
  • webview-ui/src/__tests__/App.spec.tsx
  • webview-ui/src/__tests__/FileChangesPanel.spec.tsx
  • webview-ui/src/components/chat/Announcement.tsx
  • webview-ui/src/components/chat/ApiConfigSelector.tsx
  • webview-ui/src/components/chat/AutoApproveDropdown.tsx
  • webview-ui/src/components/chat/AutoApprovedRequestLimitWarning.tsx
  • webview-ui/src/components/chat/ChatRow.tsx
  • webview-ui/src/components/chat/ChatTextArea.tsx
  • webview-ui/src/components/chat/ChatView.tsx
  • webview-ui/src/components/chat/CheckpointRestoreDialog.tsx
  • webview-ui/src/components/chat/CheckpointWarning.tsx
  • webview-ui/src/components/chat/CodeIndexPopover.tsx
  • webview-ui/src/components/chat/CodebaseSearchResultsDisplay.tsx
  • webview-ui/src/components/chat/CommandExecution.tsx
  • webview-ui/src/components/chat/CommandExecutionError.tsx
  • webview-ui/src/components/chat/ContextMenu.tsx
  • webview-ui/src/components/chat/ContextWindowProgress.tsx
  • webview-ui/src/components/chat/FollowUpSuggest.tsx
  • webview-ui/src/components/chat/IndexingStatusBadge.tsx
  • webview-ui/src/components/chat/MessageModificationConfirmationDialog.tsx
  • webview-ui/src/components/chat/ModeSelector.tsx
  • webview-ui/src/components/chat/ModelSelector.tsx
  • webview-ui/src/components/chat/ProfileViolationWarning.tsx
  • webview-ui/src/components/chat/TaskHeader.tsx
  • webview-ui/src/components/chat/TodoChangeDisplay.tsx
  • webview-ui/src/components/chat/TodoListDisplay.tsx
  • webview-ui/src/components/chat/WarningRow.tsx
  • webview-ui/src/components/chat/WorktreeSelector.tsx
  • webview-ui/src/components/chat/__tests__/Announcement.spec.tsx
  • webview-ui/src/components/chat/__tests__/ApiConfigSelector.spec.tsx
  • webview-ui/src/components/chat/__tests__/AutoApproveDropdown.spec.tsx
  • webview-ui/src/components/chat/__tests__/BatchFilePermission.spec.tsx
  • webview-ui/src/components/chat/__tests__/CheckpointRestoreDialog.spec.tsx
  • webview-ui/src/components/chat/__tests__/CommandExecution.spec.tsx
  • webview-ui/src/components/chat/__tests__/FollowUpSuggest.spec.tsx
  • webview-ui/src/components/chat/__tests__/IndexingStatusBadge.spec.tsx
  • webview-ui/src/components/chat/__tests__/ModeSelector.spec.tsx
  • webview-ui/src/components/chat/__tests__/ModelSelector.spec.tsx
  • webview-ui/src/components/chat/__tests__/ThemeSensitiveStatus.visual.fixture.tsx
  • webview-ui/src/components/chat/__tests__/WarningRow.spec.tsx
  • webview-ui/src/components/chat/__tests__/WorktreeSelector.spec.tsx
  • webview-ui/src/components/common/CodeBlock.tsx
  • webview-ui/src/components/common/ImageViewer.tsx
  • webview-ui/src/components/common/MermaidActionButtons.tsx
  • webview-ui/src/components/common/MermaidBlock.tsx
  • webview-ui/src/components/common/MermaidButton.tsx
  • webview-ui/src/components/common/TelemetryBanner.tsx
  • webview-ui/src/components/common/__tests__/CodeBlock.spec.tsx
  • webview-ui/src/components/common/__tests__/MermaidBlock.spec.tsx
  • webview-ui/src/components/common/__tests__/TelemetryBanner.spec.tsx
  • webview-ui/src/components/common/__tests__/TelemetryBanner.visual.fixture.tsx
  • webview-ui/src/components/common/__tests__/TelemetryBanner.visual.i18n.ts
  • webview-ui/src/components/history/BatchDeleteTaskDialog.tsx
  • webview-ui/src/components/history/CopyButton.tsx
  • webview-ui/src/components/history/DeleteButton.tsx
  • webview-ui/src/components/history/DeleteTaskDialog.tsx
  • webview-ui/src/components/history/ExportButton.tsx
  • webview-ui/src/components/history/HistoryPreview.tsx
  • webview-ui/src/components/history/HistoryView.tsx
  • webview-ui/src/components/history/RenameButton.tsx
  • webview-ui/src/components/history/SubtaskCollapsibleRow.tsx
  • webview-ui/src/components/history/TaskItemFooter.tsx
  • webview-ui/src/components/history/TaskStatusBadge.tsx
  • webview-ui/src/components/history/TaskTitleEditor.tsx
  • webview-ui/src/components/history/__tests__/BatchDeleteTaskDialog.spec.tsx
  • webview-ui/src/components/history/__tests__/CopyButton.spec.tsx
  • webview-ui/src/components/history/__tests__/DeleteButton.spec.tsx
  • webview-ui/src/components/history/__tests__/DeleteTaskDialog.spec.tsx
  • webview-ui/src/components/history/__tests__/ExportButton.spec.tsx
  • webview-ui/src/components/history/__tests__/HistoryView.spec.tsx
  • webview-ui/src/components/history/__tests__/RenameButton.spec.tsx
  • webview-ui/src/components/history/__tests__/SubtaskRow.spec.tsx
  • webview-ui/src/components/history/__tests__/TaskGroupItem.spec.tsx
  • webview-ui/src/components/history/__tests__/TaskItem.spec.tsx
  • webview-ui/src/components/history/__tests__/TaskItemFooter.spec.tsx
  • webview-ui/src/components/history/__tests__/TaskTitleEditor.spec.tsx
  • webview-ui/src/components/marketplace/IssueFooter.tsx
  • webview-ui/src/components/marketplace/MarketplaceListView.tsx
  • webview-ui/src/components/marketplace/MarketplaceView.tsx
  • webview-ui/src/components/marketplace/__tests__/IssueFooter.spec.tsx
  • webview-ui/src/components/marketplace/__tests__/MarketplaceListView.spec.tsx
  • webview-ui/src/components/marketplace/__tests__/MarketplaceView.spec.tsx
  • webview-ui/src/components/marketplace/components/MarketplaceInstallModal.tsx
  • webview-ui/src/components/marketplace/components/MarketplaceItemCard.tsx
  • webview-ui/src/components/marketplace/components/__tests__/MarketplaceInstallModal-optional-params.spec.tsx
  • webview-ui/src/components/marketplace/components/__tests__/MarketplaceInstallModal.spec.tsx
  • webview-ui/src/components/marketplace/components/__tests__/MarketplaceItemCard.spec.tsx
  • webview-ui/src/components/mcp/McpEnabledToggle.tsx
  • webview-ui/src/components/mcp/McpToolRow.tsx
  • webview-ui/src/components/mcp/McpView.tsx
  • webview-ui/src/components/mcp/__tests__/McpEnabledToggle.spec.tsx
  • webview-ui/src/components/mcp/__tests__/McpToolRow.spec.tsx
  • webview-ui/src/components/mcp/__tests__/McpView.spec.tsx
  • webview-ui/src/components/modes/DeleteModeDialog.tsx
  • webview-ui/src/components/modes/ModesView.tsx
  • webview-ui/src/components/settings/About.tsx
  • webview-ui/src/components/settings/ApiConfigManager.tsx
  • webview-ui/src/components/settings/ApiOptions.tsx
  • webview-ui/src/components/settings/AutoApproveSettings.tsx
  • webview-ui/src/components/settings/AutoApproveToggle.tsx
  • webview-ui/src/components/settings/CheckpointSettings.tsx
  • webview-ui/src/components/settings/ConsecutiveMistakeLimitControl.tsx
  • webview-ui/src/components/settings/ContextManagementSettings.tsx
  • webview-ui/src/components/settings/CreateRuleDialog.tsx
  • webview-ui/src/components/settings/CreateSkillDialog.tsx
  • webview-ui/src/components/settings/CreateSlashCommandDialog.tsx
  • webview-ui/src/components/settings/CustomToolsSettings.tsx
  • webview-ui/src/components/settings/ExperimentalFeature.tsx
  • webview-ui/src/components/settings/ExperimentalSettings.tsx
  • webview-ui/src/components/settings/FilePatternAllowlist.tsx
  • webview-ui/src/components/settings/ImageGenerationSettings.tsx
  • webview-ui/src/components/settings/LanguageSettings.tsx
  • webview-ui/src/components/settings/ModelInfoView.tsx
  • webview-ui/src/components/settings/ModelPicker.tsx
  • webview-ui/src/components/settings/NotificationSettings.tsx
  • webview-ui/src/components/settings/PromptsSettings.tsx
  • webview-ui/src/components/settings/R1FormatSetting.tsx
  • webview-ui/src/components/settings/RateLimitSecondsControl.tsx
  • webview-ui/src/components/settings/RulesSettings.tsx
  • webview-ui/src/components/settings/SettingsSearchInput.tsx
  • webview-ui/src/components/settings/SettingsSearchResults.tsx
  • webview-ui/src/components/settings/SettingsView.tsx
  • webview-ui/src/components/settings/SkillsSettings.tsx
  • webview-ui/src/components/settings/SlashCommandsSettings.tsx
  • webview-ui/src/components/settings/TemperatureControl.tsx
  • webview-ui/src/components/settings/TerminalSettings.tsx
  • webview-ui/src/components/settings/ThinkingBudget.tsx
  • webview-ui/src/components/settings/TodoListSettingsControl.tsx
  • webview-ui/src/components/settings/ToolRepetitionLimitControl.tsx
  • webview-ui/src/components/settings/UISettings.tsx
  • webview-ui/src/components/settings/Verbosity.tsx
  • webview-ui/src/components/settings/__tests__/About.spec.tsx
  • webview-ui/src/components/settings/__tests__/ApiOptions.provider-filtering.spec.tsx
  • webview-ui/src/components/settings/__tests__/AutoApproveSettings.spec.tsx
  • webview-ui/src/components/settings/__tests__/AutoApproveToggle.spec.tsx
  • webview-ui/src/components/settings/__tests__/ContextManagementSettings.spec.tsx
  • webview-ui/src/components/settings/__tests__/CreateRuleDialog.spec.tsx
  • webview-ui/src/components/settings/__tests__/CreateSkillDialog.spec.tsx
  • webview-ui/src/components/settings/__tests__/ExperimentalSettings.spec.tsx
  • webview-ui/src/components/settings/__tests__/ImageGenerationSettings.spec.tsx
  • webview-ui/src/components/settings/__tests__/ModelInfoView.spec.tsx
  • webview-ui/src/components/settings/__tests__/ModelInfoView.visual.fixture.tsx
  • webview-ui/src/components/settings/__tests__/ModelPicker.deprecated.spec.tsx
  • webview-ui/src/components/settings/__tests__/PromptsSettings.spec.tsx
  • webview-ui/src/components/settings/__tests__/RulesSettings.spec.tsx
  • webview-ui/src/components/settings/__tests__/SettingsView.change-detection.spec.tsx
  • webview-ui/src/components/settings/__tests__/SettingsView.unsaved-changes.spec.tsx
  • webview-ui/src/components/settings/__tests__/SkillsSettings.spec.tsx
  • webview-ui/src/components/settings/__tests__/SlashCommandsSettings.spec.tsx
  • webview-ui/src/components/settings/__tests__/TerminalSettings.profile.spec.tsx
  • webview-ui/src/components/settings/__tests__/TodoListSettingsControl.spec.tsx
  • webview-ui/src/components/settings/__tests__/ToolRepetitionLimitControl.spec.tsx
  • webview-ui/src/components/settings/providers/Anthropic.tsx
  • webview-ui/src/components/settings/providers/Baseten.tsx
  • webview-ui/src/components/settings/providers/Bedrock.tsx
  • webview-ui/src/components/settings/providers/BedrockCustomArn.tsx
  • webview-ui/src/components/settings/providers/DeepSeek.tsx
  • webview-ui/src/components/settings/providers/Fireworks.tsx
  • webview-ui/src/components/settings/providers/Friendli.tsx
  • webview-ui/src/components/settings/providers/Gemini.tsx
  • webview-ui/src/components/settings/providers/IOIntelligence.tsx
  • webview-ui/src/components/settings/providers/Kenari.tsx
  • webview-ui/src/components/settings/providers/KimiCode.tsx
  • webview-ui/src/components/settings/providers/LMStudio.tsx
  • webview-ui/src/components/settings/providers/LiteLLM.tsx
  • webview-ui/src/components/settings/providers/Mimo.tsx
  • webview-ui/src/components/settings/providers/MiniMax.tsx
  • webview-ui/src/components/settings/providers/Mistral.tsx
  • webview-ui/src/components/settings/providers/Moonshot.tsx
  • webview-ui/src/components/settings/providers/NanoGPT.tsx
  • webview-ui/src/components/settings/providers/Ollama.tsx
  • webview-ui/src/components/settings/providers/OpenAI.tsx
  • webview-ui/src/components/settings/providers/OpenAICodex.tsx
  • webview-ui/src/components/settings/providers/OpenAICodexRateLimitDashboard.tsx
  • webview-ui/src/components/settings/providers/OpenAICodexSpeedSelector.tsx
  • webview-ui/src/components/settings/providers/OpenAICompatible.tsx
  • webview-ui/src/components/settings/providers/OpenCodeGo.tsx
  • webview-ui/src/components/settings/providers/OpenRouter.tsx
  • webview-ui/src/components/settings/providers/Poe.tsx
  • webview-ui/src/components/settings/providers/Requesty.tsx
  • webview-ui/src/components/settings/providers/SambaNova.tsx
  • webview-ui/src/components/settings/providers/Unbound.tsx
  • webview-ui/src/components/settings/providers/VSCodeLM.tsx
  • webview-ui/src/components/settings/providers/VercelAiGateway.tsx
  • webview-ui/src/components/settings/providers/Vertex.tsx
  • webview-ui/src/components/settings/providers/XAI.tsx
  • webview-ui/src/components/settings/providers/ZAi.tsx
  • webview-ui/src/components/settings/providers/ZooGateway.tsx
  • webview-ui/src/components/settings/providers/__tests__/Bedrock.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/Friendli.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/Gemini.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/IOIntelligence.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/Kenari.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/LiteLLM.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/Moonshot.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/NanoGPT.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/Ollama.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/Ollama.visual.fixture.tsx
  • webview-ui/src/components/settings/providers/__tests__/OpenAI.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/OpenAICodex.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/OpenAICodex.visual.fixture.tsx
  • webview-ui/src/components/settings/providers/__tests__/OpenAICodexRateLimitDashboard.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.visual.fixture.tsx
  • webview-ui/src/components/settings/providers/__tests__/OpenCodeGo.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/Poe.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/ProviderRouting.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/Requesty.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/Vertex.spec.tsx
  • webview-ui/src/components/settings/providers/__tests__/ZooGateway.spec.tsx
  • webview-ui/src/components/welcome/RooTips.tsx
  • webview-ui/src/components/welcome/WelcomeLanding.tsx
  • webview-ui/src/components/welcome/WelcomeViewProvider.tsx
  • webview-ui/src/components/welcome/__tests__/WelcomeViewProvider.spec.tsx
  • webview-ui/src/components/worktrees/CreateWorktreeModal.tsx
  • webview-ui/src/components/worktrees/DeleteWorktreeModal.tsx
  • webview-ui/src/components/worktrees/WorktreesView.tsx
  • webview-ui/src/context/ExtensionStateContext.tsx
  • webview-ui/src/hooks/useTooManyTools.ts
  • webview-ui/src/i18n/TranslationContext.tsx
  • webview-ui/src/i18n/__mocks__/TranslationContext.tsx
  • webview-ui/src/i18n/__tests__/TranslationContext.spec.tsx
  • webview-ui/src/i18n/__tests__/createFixtureI18n.visual.i18n.ts
  • webview-ui/src/i18n/__tests__/hydrationLanguage.spec.tsx
  • webview-ui/src/i18n/__tests__/languageSwitch.spec.tsx
  • webview-ui/src/i18n/language.ts
  • webview-ui/src/i18n/setup.ts
  • webview-ui/src/utils/__tests__/format.spec.ts
  • webview-ui/src/utils/__tests__/validate.spec.ts
  • webview-ui/src/utils/format.ts
  • webview-ui/src/utils/validate.ts
+-----------------------------------------------+
| Don't count your bugs before they're patched. |
+-----------------------------------------------+
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions github-actions Bot added has-conflicts PR has merge conflicts with the base branch awaiting-author PR is waiting for the author to address requested changes labels Oct 25, 2026
@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Review status

Thanks for contributing. This comment tracks the review sequence and the next action.

Current step: Required CI passed. Waiting for automated review of the latest commit.

If automated review does not start, a maintainer must restart it.

Review-state labels are managed by this workflow; do not edit them manually. community-approved is managed the same way — do not add or remove it manually. It signals a fresh community code approval for the current head as an advisory priority only; maintainer review is still required.

@rrewll
rrewll force-pushed the fix/2185-make-language-switch-consistent branch 2 times, most recently from a92c348 to a3f60ad Compare October 26, 2026 06:20
@github-actions github-actions Bot removed has-conflicts PR has merge conflicts with the base branch awaiting-author PR is waiting for the author to address requested changes labels Oct 26, 2026
@rrewll
rrewll force-pushed the fix/2185-make-language-switch-consistent branch from bb168ef to 6f06052 Compare October 26, 2026 06:46
Zoo-Code-Org#2122 (task rename) and Zoo-Code-Org#2160 (OpenCode Go temperature) added these
baselines against the mocked toolkit; Zoo-Code-Org#2163 switched the gallery to the
real VS Code toolkit without regenerating them. Rendered in the CI
Playwright image (v1.62.1-noble).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rrewll
rrewll force-pushed the fix/2185-make-language-switch-consistent branch from f386404 to b1bf987 Compare October 26, 2026 10:09
@rrewll
rrewll marked this pull request as ready for review October 26, 2026 14:12
@github-actions github-actions Bot added coderabbit-review-active Required CI passed; CodeRabbit review is active awaiting-coderabbit Waiting for CodeRabbit to approve the latest commit labels Oct 26, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-coderabbit Waiting for CodeRabbit to approve the latest commit coderabbit-review-active Required CI passed; CodeRabbit review is active

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] UI text stays in the old language after a language switch

1 participant