Add Traditional Chinese (zh-TW) localization for GUI, README, and docs (resync) - #1440
Conversation
Add a full Taiwan Traditional Chinese locale so Chinese users can pick Simplified or Traditional instead of a single generic "中文" option. - GUI: new zh-TW dictionary, locale wiring, uptime/token/status formatting - README: new README.zh-TW.md and language switcher links - Docs site: zh-tw locale, sidebar labels, landing/frontier copy - Tests: include zh-TW in locale coverage lists - Prefer 供應商 for provider wording in Traditional Chinese surfaces Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Point zh-tw docs links at /zh-tw, add missing grok-build and windows-memory pages, polish GUI/README/frontier copy, and align Cursor nativeLocalExec plus headless CLI docs with English. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Backfill Auth mode and Desktop sections, account selection, external provider managers, missing config fields, debug stream labels, and align the README sidecar bullet with English. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Align how-it-works sidecar steps with multi-backend selection, fix grok-build manual-recipe heading anchor, escape bare pipes in the headless CLI table, and use a host-only openai-responses baseUrl example so /v1 is not doubled. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Keep zh-TW sidebar translations while adding the new opencode guide entry from upstream, and bring the Traditional Chinese dictionary to full key parity with en after the dev merge. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Translate the EN-only guides/opencode page so the zh-TW sidebar entry resolves, addressing the post-merge CodeRabbit finding.
Merge origin/dev (c0ad57a) into feat/zh-tw-localization. Keep zh-TW README/astro assets, absorb security advisory + account-pause copy, and add the 13 new codexAuth pause/resume strings to zh-TW.
# Conflicts: # gui/tests/apikeys-layout.test.ts
# Conflicts: # docs-site/astro.config.mjs # docs-site/src/components/Header.astro # docs-site/src/components/Landing.astro # docs-site/src/data/README-frontier.md
Complete zh-TW docs parity with English source (33/33 pages): - reference/cli/agents, lifecycle, providers-accounts - reference/configuration/providers, server - reference/management-api, proxy-formats - guides/combos, image-bridge, pi, video-bridge - getting-started/for-agents - reference/configuration/agents, routing All pages render Traditional Chinese with lang="zh-TW"; docs-site build produces 247 pages; privacy:scan green.
# Conflicts: # README.md # docs-site/astro.config.mjs # gui/src/formatUptime.ts # gui/src/i18n/shared.ts # gui/src/status-codes.ts # readme/README.ja.md # readme/README.ko.md # readme/README.ru.md # readme/README.zh-CN.md
|
✅ Deterministic PR hygiene checks passed. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughChangesThe pull request adds Traditional Chinese ( Traditional Chinese localization
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
⏳ DRAFT
What to do
Review readiness checklist
0/4 boxes ticked. Automatic draft conversion failed. Please convert this pull request to a draft manually until every box above is ticked. |
There was a problem hiding this comment.
Actionable comments posted: 32
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
gui/src/status-codes.ts (1)
31-41: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUse Taiwan terminology for permission text.
Lines 31 and 41 use
許可權. This is not standard Taiwan terminology. Use權限in both descriptions. This keeps thezh-TWcatalog consistent with the PR localization objective.Proposed fix
- "zh-TW": { label: "需要付款", description: "上游供應商因帳單、額度或方案許可權不可用而拒絕了請求。請儲值、更新帳單資訊或切換供應商。" }, + "zh-TW": { label: "需要付款", description: "上游供應商因帳單、額度或方案權限不可用而拒絕了請求。請儲值、更新帳單資訊或切換供應商。" }, - "zh-TW": { label: "禁止存取", description: "帳號已認證,但無權使用此模型或操作。常見原因是方案/訂閱限制(例如 Ollama Cloud Pro)、組織策略或模型許可權——不一定是 API 金鑰無效。" }, + "zh-TW": { label: "禁止存取", description: "帳號已認證,但無權使用此模型或操作。常見原因是方案/訂閱限制(例如 Ollama Cloud Pro)、組織策略或模型權限——不一定是 API 金鑰無效。" },🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@gui/src/status-codes.ts` around lines 31 - 41, Replace `許可權` with the Taiwan-standard term `權限` in both affected `zh-TW` descriptions within the status-code entries, leaving all other translations unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs-site/src/content/docs/zh-tw/getting-started/installation.md`:
- Around line 35-36: Insert a blank line between the closing fenced code block
and the following ::: marker in the installation documentation, preserving the
existing block content and directive structure.
In `@docs-site/src/content/docs/zh-tw/guides/claude-code.md`:
- Line 29: Add a blank line before the explanatory paragraph beginning with
“你自行匯出的變數始終優先。” so the preceding Markdown table is terminated and the paragraph
is not parsed as a table row.
In `@docs-site/src/content/docs/zh-tw/guides/codex-app-models.md`:
- Around line 103-108: The mode table currently labels the canonical default
mode as “base,” although the CLI and API accept “default.” Rename the “base” row
in the mode table to “default” and keep its existing behavior description
unchanged, so the documented mode names match the accepted literals.
In `@docs-site/src/content/docs/zh-tw/guides/codex-integration.md`:
- Around line 39-43: 更新 OpenAI API key 說明,明確區分模式:沒有可用的 forward 憑證時使用 API key,包括
Direct caller 憑證缺失或不可用;Pool 憑證缺失、過期或無效造成的認證失敗則返回 Pool 錯誤,不得回退至付費 API
呼叫。對應調整「OpenAI API key」與「兩者都沒有」段落,保持與影像路由行為一致。
In `@docs-site/src/content/docs/zh-tw/guides/image-bridge.md`:
- Line 12: Update the configuration link in the image bridge guide’s
introductory text to target the generated fragment for the existing “設定”
heading, or add and use an explicit stable anchor supported by the docs
renderer; ensure the link resolves correctly.
In `@docs-site/src/content/docs/zh-tw/guides/model-routing.md`:
- Around line 6-14: Update the routing rules in model-routing.md to document
that the reserved combo/<id> namespace is resolved before ordinary provider
routing, adding it as the first rule. Preserve the existing provider/model rule
for non-combo model IDs.
In `@docs-site/src/content/docs/zh-tw/guides/pi.md`:
- Around line 50-57: 在「合併,絕不替換」的 caution 區塊中,將 JSON fenced code block 的結束標記與
`:::caution` 關閉標記分隔開;在結束反引號後加入一個空白行,保留現有指令與說明內容不變。
In `@docs-site/src/content/docs/zh-tw/guides/providers.md`:
- Around line 34-35: Update the `forward` entry in the providers guide to
describe forwarding only the allowlisted Codex authentication headers, rather
than forwarding them “as-is.” Preserve the provider ID, `authMode` values,
configuration keys, and all other technical identifiers exactly.
- Line 77: Update the Kiro row in the Providers guide so the shell pipe no
longer appears as a raw table delimiter; move the complete install command
outside the table or use a renderer-safe representation that displays the exact
command. Preserve the provider ID, URL, CLI commands, and all other localized
content exactly.
In `@docs-site/src/content/docs/zh-tw/guides/sidecars.md`:
- Line 116: Replace the internal TODO in the sidecars guide with user-facing
documentation describing the current Sidecar settings navigation and save
behavior, reusing the documented GUI and /api/sidecar-settings details from
web-dashboard.md; if GUI support is unavailable, clearly state that
configuration is supported only through config.json.
- Around line 77-79: Update the remote HTTPS image-fetching description in the
sidecars guide to say it is handled by the configured backend rather than
specifically by OpenAI, while preserving the existing scheme and data-size
constraints.
In `@docs-site/src/content/docs/zh-tw/guides/video-bridge.md`:
- Line 76: Update the 費用 note in the video bridge guide to remove the
unsupported 480p/720p pricing and use xAI’s model-based rates: $0.05/second for
grok-imagine-video and $0.08/second for grok-imagine-video-1.5. Link the current
xAI pricing documentation, or omit numeric estimates if linking is not
appropriate.
In `@docs-site/src/content/docs/zh-tw/guides/web-dashboard.md`:
- Around line 56-64: Update the caution text in the Sub-agent delegation section
to remove the claim that v2 never applies overrides or that all v2 subagents
inherit the parent model. Describe the scoped behavior documented by the
sub-agent interface: v2 guidance may override model and reasoning_effort for
fork_turns set to "none" or partial forks, while full-history forks inherit the
parent model; retain the clarification that this is not general agent-side
cross-model routing.
In `@docs-site/src/content/docs/zh-tw/reference/adapters.md`:
- Around line 85-87: Insert a blank line between the paragraph ending with「供
web-search loop 使用。」and the subsection heading「### 完成與原生 stop reason」to satisfy
the Markdown heading-spacing requirement.
- Line 2: Translate the visible frontmatter title in the zh-tw adapter reference
page from “Adapters” to the repository’s Taiwan term “轉接器”. Preserve all
technical literals, including ProviderAdapter, adapter IDs, endpoint paths, auth
modes, and model IDs.
In `@docs-site/src/content/docs/zh-tw/reference/architecture.md`:
- Line 12: Update the opening fenced code block in the architecture
documentation to specify the text language tag, using ```text for the module
tree diagram so it satisfies the markdown lint requirement.
In `@docs-site/src/content/docs/zh-tw/reference/cli.md`:
- Line 242: Update the `ocx account` command listings in `cli.md` and
`providers-accounts.md` to include all dispatcher-supported public commands: add
`login`, `reauth`, `code`, `cancel`, `reset-credits`, `alias`, `priority`,
`clear-cooldown`, `import`, and `main` where appropriate. Add corresponding
descriptions consistent with the command implementations in
`src/cli/account.ts`, and keep both documentation pages’ command lists aligned.
In `@docs-site/src/content/docs/zh-tw/reference/cli/agents.md`:
- Line 84: In the no-scope `ocx debug` description, replace `用量` with `用法` so it
matches the documented CLI behavior in the corresponding reference. Leave the
surrounding provider and usage-debug defaults unchanged.
- Around line 64-65: Escape the internal option separators in the inline command
examples for `ocx logs` and `ocx usage` by replacing each command-argument `|`
with `\|`, while preserving the table’s column separator and all command syntax.
In `@docs-site/src/content/docs/zh-tw/reference/configuration.md`:
- Around line 126-128: Add the text language identifier to the fenced code block
containing x-opencodex-api-key, changing the fence from an untyped block to a
text- or http-tagged block while preserving its contents.
- Around line 34-39: Align the configuration documentation across
configuration.md and agents.md by documenting syncCodexSubagentDefaults,
subagentModelFallback, and subagentModelFallbackPollMs, and add the fallback
placeholder to the injectionPrompt description. Update the role fallback
guidance in agents.md to use subagentModelFallbackByModel instead of
model_fallback, reflecting the supported key and its actual precedence from the
configuration and doctor logic. Keep both pages consistent and note that newer
Codex versions reject model_fallback in role files.
In `@docs-site/src/content/docs/zh-tw/reference/configuration/routing.md`:
- Around line 12-25: Synchronize both referenced sections of
docs-site/src/content/docs/zh-tw/reference/configuration/routing.md with the
current routing contract: add routingProfiles and document policy/<id>
resolution first, then exact <account-selector>/<native-openai-model> routes
before combo resolution; in the native alias section, document nativeAlias: true
as the exception for supported bare native aliases and require displayName for
that mode.
In `@docs-site/src/content/docs/zh-tw/troubleshooting/windows-memory.md`:
- Around line 24-26: Update the RSS watchdog, `ocx doctor`, and `GET
/api/system/memory` documentation to describe observed memory as the maximum of
RSS, external memory, and arrayBuffers, not RSS alone. Ensure both CLI and API
descriptions explain or expose this same calculation so users can correctly
identify native-memory retention when any counter is highest.
- Line 37: Update the Windows memory troubleshooting instructions to tell users
with an already installed service to run `ocx service repair` after setting
`OPENCODEX_BUN_PATH`; clarify that `ocx service install` only creates the
durable service definition and does not update an existing one, while keeping
the same-shell requirement.
In `@docs-site/src/data/frontier-i18n.ts`:
- Around line 398-414: Update the zh-TW sourceNote entries for
`frontier.board.aa-intelligence-index.sourceNote` and
`frontier.board.frontiercode.sourceNote` to preserve the English provenance
qualifications: headline totals only match where noted, chart segment splits are
approximate, and FrontierCode’s version, date, mergeability definition, and
Best/All reasoning-mode scope remain explicit. In
`frontier.board.program-bench.sourceNote`, replace `擴充套件排行榜` with `擴展排行榜` or
equivalent while preserving the rest of the meaning.
In `@gui/scripts/sync-locale-keys.mjs`:
- Line 11: Add "tr" to the locale lists used by sync-locale-keys.mjs
(gui/scripts/sync-locale-keys.mjs:11), locale-parity.test.ts
(gui/tests/locale-parity.test.ts:3), and en.ts (gui/src/i18n/en.ts:1) so Turkish
participates in synchronization, parity checks, and runtime locale selection.
In `@gui/tests/locale-parity.test.ts`:
- Line 3: Update the LOCALES constant in the locale parity test to include the
registered "tr" locale, ensuring the existing parity check validates Turkish
alongside every other runtime locale.
In `@gui/tests/zh-tw-language-switch.test.tsx`:
- Around line 49-95: Update the language-switch test around LanguageProvider and
Probe to mount one real localized application component, then trigger the locale
selector or provider locale-change action from the initial English state and
assert the same mounted surface updates to zh-TW labels. Remove reliance on
resetting navigator.language between independent server renders, and verify the
visible English labels are replaced after the in-place switch.
In `@readme/README.zh-TW.md`:
- Line 1: Update the README title from h3 to h1, and add the text language
identifier to the fenced code blocks beginning at lines 43 and 387, preserving
their contents.
- Line 28: Update the language navigation line in README.zh-TW.md to include a
link to README.tr.md, matching the placement and formatting used by README.md
and README.zh-CN.md while preserving the existing language links.
- Around line 2-3: Update the README title text in the centered introductory
paragraph to replace the translated prose phrase “provider 代理” with “供應商代理”,
while preserving any English “provider” usages that are identifiers or required
technical literals.
- Around line 384-385: In the remote-access installation instruction, remove the
duplicated “請在” by changing the second occurrence before `ocx service install`
to “在”, while preserving the rest of the sentence.
---
Outside diff comments:
In `@gui/src/status-codes.ts`:
- Around line 31-41: Replace `許可權` with the Taiwan-standard term `權限` in both
affected `zh-TW` descriptions within the status-code entries, leaving all other
translations unchanged.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 858614b7-b23f-4ef5-85ed-151fd3d0e593
📒 Files selected for processing (80)
README.mddocs-site/astro.config.mjsdocs-site/src/components/FrontierBoards.astrodocs-site/src/components/Header.astrodocs-site/src/components/Landing.astrodocs-site/src/components/SiteJsonLd.astrodocs-site/src/content/docs/zh-tw/benchmarks/coding.mdxdocs-site/src/content/docs/zh-tw/benchmarks/frontend.mdxdocs-site/src/content/docs/zh-tw/benchmarks/index.mdxdocs-site/src/content/docs/zh-tw/benchmarks/intelligence.mdxdocs-site/src/content/docs/zh-tw/benchmarks/security.mdxdocs-site/src/content/docs/zh-tw/benchmarks/terminal.mdxdocs-site/src/content/docs/zh-tw/contributing.mddocs-site/src/content/docs/zh-tw/contributing/pr-quality.mddocs-site/src/content/docs/zh-tw/getting-started/for-agents.mddocs-site/src/content/docs/zh-tw/getting-started/how-it-works.mdxdocs-site/src/content/docs/zh-tw/getting-started/installation.mddocs-site/src/content/docs/zh-tw/getting-started/quickstart.mddocs-site/src/content/docs/zh-tw/guides/claude-code.mddocs-site/src/content/docs/zh-tw/guides/codex-app-models.mddocs-site/src/content/docs/zh-tw/guides/codex-integration.mddocs-site/src/content/docs/zh-tw/guides/combos.mddocs-site/src/content/docs/zh-tw/guides/grok-build.mddocs-site/src/content/docs/zh-tw/guides/image-bridge.mddocs-site/src/content/docs/zh-tw/guides/integrations.mddocs-site/src/content/docs/zh-tw/guides/model-ordering.mddocs-site/src/content/docs/zh-tw/guides/model-routing.mddocs-site/src/content/docs/zh-tw/guides/opencode.mddocs-site/src/content/docs/zh-tw/guides/pi.mddocs-site/src/content/docs/zh-tw/guides/providers.mddocs-site/src/content/docs/zh-tw/guides/routing-profile-editor.mddocs-site/src/content/docs/zh-tw/guides/sidecars.mddocs-site/src/content/docs/zh-tw/guides/sub-agent-surface.mddocs-site/src/content/docs/zh-tw/guides/video-bridge.mddocs-site/src/content/docs/zh-tw/guides/web-dashboard.mddocs-site/src/content/docs/zh-tw/index.mdxdocs-site/src/content/docs/zh-tw/reference/adapters.mddocs-site/src/content/docs/zh-tw/reference/architecture.mddocs-site/src/content/docs/zh-tw/reference/cli.mddocs-site/src/content/docs/zh-tw/reference/cli/agents.mddocs-site/src/content/docs/zh-tw/reference/cli/lifecycle.mddocs-site/src/content/docs/zh-tw/reference/cli/providers-accounts.mddocs-site/src/content/docs/zh-tw/reference/configuration.mddocs-site/src/content/docs/zh-tw/reference/configuration/agents.mddocs-site/src/content/docs/zh-tw/reference/configuration/providers.mddocs-site/src/content/docs/zh-tw/reference/configuration/routing.mddocs-site/src/content/docs/zh-tw/reference/configuration/server.mddocs-site/src/content/docs/zh-tw/reference/management-api.mddocs-site/src/content/docs/zh-tw/reference/proxy-formats.mddocs-site/src/content/docs/zh-tw/troubleshooting/windows-memory.mddocs-site/src/data/README-frontier.mddocs-site/src/data/frontier-i18n.tsgui/scripts/sync-locale-keys.mjsgui/src/components/QuotaBars.tsxgui/src/format-tokens.tsgui/src/i18n/catalogs.tsgui/src/i18n/en.tsgui/src/i18n/lab-translations.tsgui/src/i18n/routing-compatibility-labels.tsgui/src/i18n/shared.tsgui/src/i18n/vision-reasoning-labels.tsgui/src/i18n/zh-TW.tsgui/src/status-codes.tsgui/tests/apikeys-layout.test.tsgui/tests/claude-auth-mode-badge.test.tsgui/tests/claude-desktop-locale.test.tsgui/tests/grok-page.test.tsgui/tests/locale-parity.test.tsgui/tests/subagents-classic.test.tsgui/tests/usage-grok-filter.test.tsgui/tests/usage-layout.test.tsgui/tests/zh-tw-language-switch.test.tsxreadme/README.ja.mdreadme/README.ko.mdreadme/README.ru.mdreadme/README.zh-CN.mdreadme/README.zh-TW.mdstructure/06_docs-and-release.mdtests/dashboard-uptime.test.tstests/oauth-tos-warning.test.ts
Captured the real dashboard surface (providers workspace) with the zh-TW locale active — nav shows 儀表板/供應商/模型/子代理/整合, language picker shows 繁體中文, and the providers copy is fully translated.
…aiwan terms, docs drift resync - sync-locale-keys.mjs / locale-parity / en.ts header now include tr - zh-tw-language-switch test mounts a real LanguageProvider surface and flips locale through the actual Select UI (same DOM, persistence, lang) - zh-TW.ts/README zh-TW term fixes: 獲取→取得, 請求頭→標頭, provider 代理→供應商代理 - README language rows gain Türkçe/繁體中文 cross-links - routing.md fully retranslated (policy profiles, exact account selectors, analytics, migration) - providers.md gains Cockpit import, OAuth reliability, Kiro import, A6API, pool capacity, rate limits; presets 50→79 - lifecycle.md gains ocx ready + ocx service repair
Deep content-sync pass found and fixed real drift beyond file parity: - configuration.md, cli.md: old full-text pages rewritten as index pages matching the reduced English source (4/4 sections each) - contributing.md: +Branches/Pull requests/Project maintainers/preset evidence - web-dashboard.md: +Sign-in/star-consent sections - server.md: +local clients that cannot receive the token - cli/providers-accounts.md: +ocx account priority/main - sub-agent-surface/combos/claude-code/grok-build/opencode/codex-integration: missing sections added - quickstart: 79 presets, current release wording - codex-app-models: desktop remote-allowlist limitation + current coverage Verified: docs build 265 pages, 34/35 files match en section count (sole delta is an empty en heading), no stale v2.7.1/50-preset strings, no bare internal links missing /zh-tw/.
There was a problem hiding this comment.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
readme/README.zh-TW.md (2)
139-139: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUse the localized GUI button label.
The zh-TW README instructs users to click
"Add Provider", but the localized GUI action is shown as新增供應商in the PR objective. Users following the Traditional Chinese interface will not see the English label.Proposed fix
-1. 點選 **"Add Provider"**。 +1. 點選 **「新增供應商」**(英文介面為 **"Add Provider"**)。🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@readme/README.zh-TW.md` at line 139, Update the instruction near the localized GUI action to replace the English label “Add Provider” with the Traditional Chinese label “新增供應商”, preserving the existing formatting and meaning.
116-116: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winTranslate remaining
providerprose to供應商.Lines 116, 125, 140, and 235 use English
providerin translated prose. Keepprovideronly for identifiers, adapter names, commands, URLs, or exact technical labels. Replace these prose occurrences with供應商.This is the same terminology issue previously raised for the title, but additional occurrences remain. The PR objective specifies Taiwan-style terminology such as
供應商.Also applies to: 125-125, 140-140, 235-235
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@readme/README.zh-TW.md` at line 116, Update the remaining translated prose occurrences of “provider” in the README, including the entries around lines 116, 125, 140, and 235, to use “供應商”. Preserve “provider” only where it is part of an identifier, adapter name, command, URL, or exact technical label.docs-site/src/content/docs/zh-tw/reference/cli/providers-accounts.md (1)
61-72: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winInclude the documented subcommands in the usage synopsis.
Line 62 omits
priorityandmain, although this page documentsocx account priorityat Lines 166-189 andocx account mainat Lines 191-235. Users who follow the synopsis will not discover these commands.Proposed fix
-Usage: ocx account <list|current|use|refresh|auto-switch|login|reauth|code|cancel|remove|add-key|reset-credits> ... +Usage: ocx account <list|current|use|refresh|auto-switch|priority|main|login|reauth|code|cancel|remove|add-key|reset-credits> ...As per path instructions: user-facing docs must stay in sync with actual CLI/API behavior.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs-site/src/content/docs/zh-tw/reference/cli/providers-accounts.md` around lines 61 - 72, Update the `ocx account` usage synopsis to include the documented `priority` and `main` subcommands alongside the existing command list, keeping the synopsis synchronized with the commands described later on the page.Source: Path instructions
docs-site/src/content/docs/zh-tw/getting-started/installation.md (1)
34-34: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winUse an npm-supported script approval command.
@bitkyc08/opencodex@2.12.0depends onbun@1.3.14, whosepostinstallscript isnode install.js. However, npm 11.12.1 reportsUnknown cli config "--allow-scripts"for lines 31 and 34, so these commands do not enable the Bun script. Document the supported npm version and command, or replace this fallback with the supported approval flow.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs-site/src/content/docs/zh-tw/getting-started/installation.md` at line 34, Update the installation command in the getting-started documentation to use npm’s supported script-approval flow instead of the unrecognized --allow-scripts option. Document the required npm version and supported command so Bun’s postinstall script is enabled, and update both affected installation examples consistently.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs-site/src/content/docs/zh-tw/guides/codex-app-models.md`:
- Line 115: Update the sentence in the Codex app models guide so the phrase
`只有未被遮蔽的原生列可以切換` uses natural passive wording, replacing it with
`只有未被遮蔽的原生列可供切換` or `只有未被遮蔽的原生列可以被切換`; leave the surrounding text unchanged.
In `@docs-site/src/content/docs/zh-tw/guides/opencode.md`:
- Around line 58-59: In the zh-TW OpenCode guide, add a blank line between the
closing fenced block and the admonition terminator `:::`. In the localized
Providers guide, revise the `authMode: "forward"` description to state that only
allowlisted Codex authentication headers are forwarded, while preserving the
`openai-responses` adapter. Complete the A6API failure sentence so it clearly
states that malformed, negative, or inconsistent totals produce no report rather
than a misleading quota entry.
In `@docs-site/src/content/docs/zh-tw/guides/providers.md`:
- Line 206: Update the A6API quota-probing sentence to complete the invalid
billing-total behavior, explicitly stating that malformed, negative, or
internally inconsistent totals produce no misleading entry or report. Preserve
the surrounding description of sending active keys only to the standard host and
rejecting redirects.
In `@docs-site/src/content/docs/zh-tw/reference/cli.md`:
- Line 15: Convert the four level-two headings in the CLI documentation,
including “命令家族” and the headings at the other reported locations, from ATX
syntax to the configured setext heading style. Preserve each heading’s text and
level, using the appropriate setext underline for level two.
- Around line 1-5: Remove the leading blank line before the YAML front matter in
the CLI reference document so the opening delimiter starts at line 1, preserving
the existing title and description metadata.
In `@docs-site/src/content/docs/zh-tw/reference/cli/lifecycle.md`:
- Line 169: Update both plain-text output code fences in the lifecycle
documentation to specify the text language tag, changing each opening fence to
```text to resolve MD040 while leaving the fenced content unchanged.
In `@docs-site/src/content/docs/zh-tw/reference/configuration.md`:
- Around line 1-5: Remove the leading blank line before the frontmatter in the
configuration documentation so the opening `---` delimiter is the first
character of the file, preserving the existing `title` and `description`
metadata.
In `@gui/tests/zh-tw-language-switch.test.tsx`:
- Around line 58-97: Update setupDom and teardownDom to snapshot each global in
domGlobals with Object.getOwnPropertyDescriptor(globalThis, key), then restore
the exact descriptor or delete the property when no descriptor existed. Remove
previousLanguage and the afterEach restoration of navigator.language; only
modify testWindow.navigator.language during setup.
---
Outside diff comments:
In `@docs-site/src/content/docs/zh-tw/getting-started/installation.md`:
- Line 34: Update the installation command in the getting-started documentation
to use npm’s supported script-approval flow instead of the unrecognized
--allow-scripts option. Document the required npm version and supported command
so Bun’s postinstall script is enabled, and update both affected installation
examples consistently.
In `@docs-site/src/content/docs/zh-tw/reference/cli/providers-accounts.md`:
- Around line 61-72: Update the `ocx account` usage synopsis to include the
documented `priority` and `main` subcommands alongside the existing command
list, keeping the synopsis synchronized with the commands described later on the
page.
In `@readme/README.zh-TW.md`:
- Line 139: Update the instruction near the localized GUI action to replace the
English label “Add Provider” with the Traditional Chinese label “新增供應商”,
preserving the existing formatting and meaning.
- Line 116: Update the remaining translated prose occurrences of “provider” in
the README, including the entries around lines 116, 125, 140, and 235, to use
“供應商”. Preserve “provider” only where it is part of an identifier, adapter name,
command, URL, or exact technical label.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 29d60639-93f9-4d7c-8f85-0a9dd26c05db
⛔ Files ignored due to path filters (1)
assets/zh-tw-providers.pngis excluded by!**/*.png
📒 Files selected for processing (33)
docs-site/src/content/docs/zh-tw/contributing.mddocs-site/src/content/docs/zh-tw/getting-started/how-it-works.mdxdocs-site/src/content/docs/zh-tw/getting-started/installation.mddocs-site/src/content/docs/zh-tw/getting-started/quickstart.mddocs-site/src/content/docs/zh-tw/guides/claude-code.mddocs-site/src/content/docs/zh-tw/guides/codex-app-models.mddocs-site/src/content/docs/zh-tw/guides/codex-integration.mddocs-site/src/content/docs/zh-tw/guides/combos.mddocs-site/src/content/docs/zh-tw/guides/grok-build.mddocs-site/src/content/docs/zh-tw/guides/model-ordering.mddocs-site/src/content/docs/zh-tw/guides/opencode.mddocs-site/src/content/docs/zh-tw/guides/pi.mddocs-site/src/content/docs/zh-tw/guides/providers.mddocs-site/src/content/docs/zh-tw/guides/sidecars.mddocs-site/src/content/docs/zh-tw/guides/sub-agent-surface.mddocs-site/src/content/docs/zh-tw/guides/web-dashboard.mddocs-site/src/content/docs/zh-tw/reference/adapters.mddocs-site/src/content/docs/zh-tw/reference/architecture.mddocs-site/src/content/docs/zh-tw/reference/cli.mddocs-site/src/content/docs/zh-tw/reference/cli/lifecycle.mddocs-site/src/content/docs/zh-tw/reference/cli/providers-accounts.mddocs-site/src/content/docs/zh-tw/reference/configuration.mddocs-site/src/content/docs/zh-tw/reference/configuration/routing.mddocs-site/src/content/docs/zh-tw/reference/configuration/server.mddocs-site/src/content/docs/zh-tw/reference/management-api.mddocs-site/src/content/docs/zh-tw/reference/proxy-formats.mdgui/scripts/sync-locale-keys.mjsgui/src/i18n/en.tsgui/src/i18n/zh-TW.tsgui/tests/locale-parity.test.tsgui/tests/zh-tw-language-switch.test.tsxreadme/README.tr.mdreadme/README.zh-TW.md
- installation.md: blank line after fenced block before admonition - image-bridge.md: fix #configuration anchor to the translated #設定 - pi.md: blank line between fence and admonition close - adapters.md: translate page title (Adapters → 轉接器); blank line before subsection heading - windows-memory.md: sync observed-memory (max of RSS/external/arrayBuffers) and use ocx service repair for existing services - codex-app-models.md: natural passive wording (可供切換) - README.zh-TW.md: drop duplicated 請在 Other CodeRabbit findings were reviewed and intentionally left aligned with the English source (table pipe escapes, v1/base/v2 labels, xAI pricing note, TODO comments, h3 README hero) or are obsolete since the pages were rewritten.
- providers.md: Nous Portal OAuth preset (8 OAuth presets), ocx login nous,
nous table row + refresh note
- sub-agent-surface.md: catalog-trust section (fresh/not_running/stale/unknown)
- claude-code.md: thinking disabled maps to reasoning:{effort:none}; tool_choice
hosted WebSearch entry
- reference/configuration/providers.md: noStructuredOutputModels field
- reference/proxy-formats.md: structured-output translation paragraph
Re-merge onto dev 0c17052 (was 38 commits behind; gate blocked readiness).
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs-site/src/content/docs/zh-tw/guides/sub-agent-surface.md`:
- Around line 194-197: 澄清 stale 與 unknown 狀態下的行為:更新鄰近表格說明與段落,明确指出 opencodex
不會新增或覆寫模型指引,但會保留既有的磁碟衍生宣稱,包括偏好模型、roster、fallback 與自訂指引。
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 6576b564-4491-4427-b3cf-d8a5c861b92d
📒 Files selected for processing (5)
docs-site/src/content/docs/zh-tw/guides/claude-code.mddocs-site/src/content/docs/zh-tw/guides/providers.mddocs-site/src/content/docs/zh-tw/guides/sub-agent-surface.mddocs-site/src/content/docs/zh-tw/reference/configuration/providers.mddocs-site/src/content/docs/zh-tw/reference/proxy-formats.md
stale/unknown states do not add or overwrite opencodex-authored guidance, consistent with the withholding paragraph below.
|
✅ Action performedReview finished.
|
|
Tip For best results, initiate chat on the files or code changes.
You are interacting with an AI system. |
|
Tip For best results, initiate chat on the files or code changes.
You are interacting with an AI system. |
Wibias
left a comment
There was a problem hiding this comment.
Requesting changes for one remaining test-isolation bug on the current head.
gui/tests/zh-tw-language-switch.test.tsx snapshots only the values of the globals it replaces, then recreates those globals with new Object.defineProperty descriptors during teardown. That does not restore the original property descriptors: omitted descriptor fields default to false, so writability/enumerability/accessor semantics can be changed for document, window, navigator, localStorage, and IS_REACT_ACT_ENVIRONMENT for later tests. The separate navigator.language restoration has the same problem.
Please capture the complete original PropertyDescriptor for each replaced global and for navigator.language, then restore those descriptors exactly (or delete the property when it was originally absent). Add/adjust the regression so teardown proves the original descriptors are restored, not only the original values.
The zh-TW production wiring itself looks sound. This request is specifically about leaving shared test globals in a mutated state after this new smoke test runs.
Also note that the PR is currently one commit behind dev, so the readiness claim that it is fully synced should be refreshed before merge.
| document: { configurable: true, value: testWindow.document }, | ||
| window: { configurable: true, value: testWindow }, | ||
| navigator: { configurable: true, value: testWindow.navigator }, | ||
| localStorage: { configurable: true, value: testWindow.localStorage }, |
There was a problem hiding this comment.
This saves only the current values, but teardown later reconstructs the globals with new descriptors. Object.defineProperty(..., { configurable: true, value }) defaults omitted descriptor fields such as writable and enumerable to false, and it cannot restore an accessor descriptor. Please snapshot Object.getOwnPropertyDescriptor(globalThis, k) for every replaced global and restore the exact original descriptor (or delete when originally absent). Do the same for navigator.language, which is currently restored by value only.
|
Tip For best results, initiate chat on the files or code changes.
You are interacting with an AI system. |
Wibias
left a comment
There was a problem hiding this comment.
Approving. zh-TW is re-hosted on the current i18n architecture with key parity, placeholder guards, docs content parity, and the language-switch teardown now restores original browser global descriptors. The macOS CI red is an unrelated Cursor blob-ID ceiling timeout flake, not localization.
|
Thanks @letr1n1ty — this was useful because it brings Traditional Chinese back as a first-class locale after the i18n architecture migration, instead of leaving Taiwan/zh-Hant users stuck on Simplified or stale July translations. The resync (1972-key GUI catalog, Merging now. |
Summary
Adds full Traditional Chinese (zh-TW) support for the dashboard language picker, the README, and the docs site — resynced onto the latest
dev. This PR supersedes the closed #581.Traditional Chinese dashboard (real rendered surface, zh-TW locale active):
/zh-twStarlight locale with full source parity (36/36 localized page inventory), all pages resynced against current English content.README.zh-TW.mdand language links across every README variant.What changed relative to the closed #581
The prior PR was closed on 2026-08-10, landing on
devfrom July48d59a8a.devadvanced 2100+ commits since then, including an i18n architecture migration (catalogs.tsregistry +LabLocale+ a newtrlocale). This PR re-hosts zh-TW on the new architecture, resyncs the whole catalog, and brings the docs back to content parity:catalogs.ts/lab-translations.ts/status-codes.ts/routing-compatibility-labels.ts/vision-reasoning-labels.ts, withtrwired in everywhere.integrations.*,routing.*,lab.*,pws.*,accountPool.*,uptime.*,pws.connectionNotApplicable, …) translated to Traditional Chinese; 5 keys retired bydevremoved. 1972 ⇔ 1972.tr—sync-locale-keys.mjs, the key-set parity guard, anden.ts's header comment all cover Turkish now; everyRecord<Locale,…>surface has zh-TW and tr.reference/configuration.mdandreference/cli.mdrewritten as index pages matching the reduced English source;guides/providers.mdupdated to 79 presets with Cockpit Tools Antigravity import, OAuth reliability, Kiro credential import, A6API credit meter, pool-capacity and rate-limit sections;reference/configuration/routing.mdfully retranslated (policy profiles, exact Codex account selectors, request-history analytics, migration);reference/cli/lifecycle.mdgainedocx readyandocx service repair; plus missing sections added acrosscontributing,web-dashboard,server,cli/providers-accounts,sub-agent-surface,combos,claude-code,grok-build,opencode,codex-integration,quickstart, andcodex-app-models. 34 of 35 pages now match the English section count exactly (the sole delta is an empty English heading with no content).Addressing the changes-requested review items
1. Translate the revived API / Subagents / Usage vocabulary — done; the revived workspaces plus the new
integrations.*,routing.*,lab.*,pws.*,accountPool.*surfaces are in Traditional Chinese. Nothing was deleted in favor of the branch.2. Automated locale key-parity check —
gui/tests/locale-parity.test.tshas two guards (key-set parity for all locales including tr, and a zh-TW placeholder guard with an intentional allowlist). Both were driven red-once to prove they are not vacuous.3. GUI tests + production build + docs build /zh-tw + rendered language-switch smoke test
bun run test(root) — 10791 pass / 7 skip / 0 fail (the one flake,server-xai-header-parity, passes in isolation and is unrelated).bun run typecheck— 0 errors.bun run privacy:scan— passed.bun test(gui) — 759 pass / 0 fail (136 files), including locale-parity, i18n placeholder-contract, and the rewritten language-switch test.bun run build:gui— production build succeeded.docs-sitebuild — 265 pages; all 36/zh-tw/pages renderlang="zh-TW"with Traditional Chinese titles.gui/tests/zh-tw-language-switch.test.tsxnow mounts a real LanguageProvider surface and flips the locale through the actual language<Select>UI on the same mounted root: nav rows go Dashboard→儀表板, Providers→供應商, Subagents→子代理, Usage→用量, Integrations→整合, with no English leakage, and the test assertslocalStorage("ocx-lang")==="zh-TW"anddocument.documentElement.lang==="zh-TW". A second case flips back to Simplified and verifies the picker stays functional.ocx-lang=zh-TW) — rendered dashboard nav and providers workspace in Traditional Chinese; screenshot above.4. Translation quality — follows the repository's established zh-TW conventions (供應商, 帳號, 任務, 閾值, 冷卻, 容錯移轉, 輪詢, 設定檔, 環境變數, 金鑰, 端點, 儀表板) and Taiwan usage (程式, 檔案, 網路, 預設, 權限, 取得, 回傳, 自訂, 標頭, 載入, 重新整理). Brand names, commands, config keys, and API paths stay in English. I can adjust any specific strings a Traditional-Chinese reviewer flags; the placeholder guard makes future drift fail visibly.
Verification matrix
git rev-list --count origin/dev...HEAD= ahead 24 / behind 0 (fully synced)bun run typecheck— 0 errorsbun run test— 10791 pass / 7 skip / 0 failbun run privacy:scan— passedbun test(gui) — 759 pass / 0 failbun run build:gui— production build succeededdocs-sitebuild — 265 pages; 36/36/zh-tw/localized page inventorysync-locale-keys.mjs— all 7 localesup to date; zh-TW ⇔ en 1972 ⇔ 1972Notes
server-xai-header-parity.test.ts(a timing-sensitive mock-fetch integration test that passes in isolation on macOS and is unrelated to localization); it also flakes on CI independent of this PR.lint:guifails locally due to a pre-existing ESLint environment issue in this checkout, unrelated to these changes.Cross-platform CIandReact Doctorstart asaction_required— a maintainer must click "Approve and run workflows" once.enforce-target,hygiene,label,resolve-pr, and CodeRabbit pass.Review readiness checklist
This PR stays in draft until every box below is ticked. Tick all four boxes once the requirements are met:
All CI tests are green on my local testing.
I pushed my PR to the latest dev commit.
I resolved all correct Codex and CodeRabbit findings.
My PR is ready for review.
Summary by CodeRabbit