From d0b6e49a7d6cab28883d9cb56f1e402d04c402ce Mon Sep 17 00:00:00 2001 From: letr1n1ty Date: Tue, 28 Jul 2026 08:44:45 +0800 Subject: [PATCH 1/7] feat(i18n): add Traditional Chinese (zh-TW) across GUI, README, and docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- README.md | 2 +- docs-site/astro.config.mjs | 63 +- docs-site/src/components/FrontierBoards.astro | 4 +- docs-site/src/components/Header.astro | 56 +- docs-site/src/components/Landing.astro | 129 +- docs-site/src/components/SiteJsonLd.astro | 5 +- .../content/docs/zh-tw/benchmarks/coding.mdx | 8 + .../docs/zh-tw/benchmarks/frontend.mdx | 8 + .../content/docs/zh-tw/benchmarks/index.mdx | 16 + .../docs/zh-tw/benchmarks/intelligence.mdx | 8 + .../docs/zh-tw/benchmarks/security.mdx | 8 + .../docs/zh-tw/benchmarks/terminal.mdx | 8 + .../src/content/docs/zh-tw/contributing.md | 124 ++ .../zh-tw/getting-started/how-it-works.mdx | 85 ++ .../zh-tw/getting-started/installation.md | 96 ++ .../docs/zh-tw/getting-started/quickstart.md | 114 ++ .../content/docs/zh-tw/guides/claude-code.md | 365 +++++ .../docs/zh-tw/guides/codex-app-models.md | 160 ++ .../docs/zh-tw/guides/codex-integration.md | 184 +++ .../docs/zh-tw/guides/model-ordering.md | 101 ++ .../docs/zh-tw/guides/model-routing.md | 78 + .../content/docs/zh-tw/guides/providers.md | 198 +++ .../src/content/docs/zh-tw/guides/sidecars.md | 121 ++ .../docs/zh-tw/guides/sub-agent-surface.md | 127 ++ .../docs/zh-tw/guides/web-dashboard.md | 114 ++ docs-site/src/content/docs/zh-tw/index.mdx | 17 + .../content/docs/zh-tw/reference/adapters.md | 139 ++ .../docs/zh-tw/reference/architecture.md | 165 ++ .../src/content/docs/zh-tw/reference/cli.md | 454 ++++++ .../docs/zh-tw/reference/configuration.md | 381 +++++ docs-site/src/data/README-frontier.md | 4 +- docs-site/src/data/frontier-i18n.ts | 108 +- gui/scripts/sync-locale-keys.mjs | 4 +- gui/src/components/QuotaBars.tsx | 2 + gui/src/format-tokens.ts | 6 +- gui/src/formatUptime.ts | 1 + gui/src/i18n/en.ts | 2 +- gui/src/i18n/shared.ts | 26 +- gui/src/i18n/zh-TW.ts | 1330 +++++++++++++++++ gui/src/status-codes.ts | 23 +- gui/tests/apikeys-layout.test.ts | 2 +- gui/tests/claude-auth-mode-badge.test.ts | 2 +- gui/tests/claude-desktop-locale.test.ts | 2 +- gui/tests/grok-page.test.ts | 2 +- gui/tests/subagents-classic.test.ts | 4 +- gui/tests/usage-grok-filter.test.ts | 2 +- gui/tests/usage-layout.test.ts | 2 +- readme/README.ja.md | 2 +- readme/README.ko.md | 2 +- readme/README.ru.md | 2 +- readme/README.zh-CN.md | 2 +- readme/README.zh-TW.md | 441 ++++++ structure/06_docs-and-release.md | 2 +- tests/dashboard-uptime.test.ts | 1 + tests/oauth-tos-warning.test.ts | 2 +- 55 files changed, 5158 insertions(+), 156 deletions(-) create mode 100644 docs-site/src/content/docs/zh-tw/benchmarks/coding.mdx create mode 100644 docs-site/src/content/docs/zh-tw/benchmarks/frontend.mdx create mode 100644 docs-site/src/content/docs/zh-tw/benchmarks/index.mdx create mode 100644 docs-site/src/content/docs/zh-tw/benchmarks/intelligence.mdx create mode 100644 docs-site/src/content/docs/zh-tw/benchmarks/security.mdx create mode 100644 docs-site/src/content/docs/zh-tw/benchmarks/terminal.mdx create mode 100644 docs-site/src/content/docs/zh-tw/contributing.md create mode 100644 docs-site/src/content/docs/zh-tw/getting-started/how-it-works.mdx create mode 100644 docs-site/src/content/docs/zh-tw/getting-started/installation.md create mode 100644 docs-site/src/content/docs/zh-tw/getting-started/quickstart.md create mode 100644 docs-site/src/content/docs/zh-tw/guides/claude-code.md create mode 100644 docs-site/src/content/docs/zh-tw/guides/codex-app-models.md create mode 100644 docs-site/src/content/docs/zh-tw/guides/codex-integration.md create mode 100644 docs-site/src/content/docs/zh-tw/guides/model-ordering.md create mode 100644 docs-site/src/content/docs/zh-tw/guides/model-routing.md create mode 100644 docs-site/src/content/docs/zh-tw/guides/providers.md create mode 100644 docs-site/src/content/docs/zh-tw/guides/sidecars.md create mode 100644 docs-site/src/content/docs/zh-tw/guides/sub-agent-surface.md create mode 100644 docs-site/src/content/docs/zh-tw/guides/web-dashboard.md create mode 100644 docs-site/src/content/docs/zh-tw/index.mdx create mode 100644 docs-site/src/content/docs/zh-tw/reference/adapters.md create mode 100644 docs-site/src/content/docs/zh-tw/reference/architecture.md create mode 100644 docs-site/src/content/docs/zh-tw/reference/cli.md create mode 100644 docs-site/src/content/docs/zh-tw/reference/configuration.md create mode 100644 gui/src/i18n/zh-TW.ts create mode 100644 readme/README.zh-TW.md diff --git a/README.md b/README.md index 66808ae6b..5def376da 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ ocx start # proxy + dashboard on localhost:10100

- English · 한국어 · 简体中文 · Русский · 日本語 · 📖 Full documentation → + English · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · 📖 Full documentation →

diff --git a/docs-site/astro.config.mjs b/docs-site/astro.config.mjs index 01b6c508f..4c293bbd4 100644 --- a/docs-site/astro.config.mjs +++ b/docs-site/astro.config.mjs @@ -58,73 +58,74 @@ export default defineConfig({ baseUrl: "https://github.com/lidge-jun/opencodex/edit/main/docs-site/", }, lastUpdated: true, - // English at the site root; Korean under /ko, Simplified Chinese under /zh-cn, Russian under /ru, Japanese under /ja. + // English at the site root; Korean under /ko, Simplified Chinese under /zh-cn, Traditional Chinese under /zh-tw, Russian under /ru, Japanese under /ja. defaultLocale: "root", locales: { root: { label: "English", lang: "en" }, ko: { label: "한국어", lang: "ko" }, "zh-cn": { label: "简体中文", lang: "zh-CN" }, + "zh-tw": { label: "繁體中文", lang: "zh-TW" }, ru: { label: "Русский", lang: "ru" }, ja: { label: "日本語", lang: "ja" }, }, sidebar: [ { label: "Getting Started", - translations: { ko: "시작하기", "zh-CN": "开始使用", ru: "Начало работы", ja: "はじめに" }, + translations: { ko: "시작하기", "zh-CN": "开始使用", "zh-TW": "開始使用", ru: "Начало работы", ja: "はじめに" }, items: [ - { label: "Installation", translations: { ko: "설치", "zh-CN": "安装", ru: "Установка", ja: "インストール" }, slug: "getting-started/installation" }, - { label: "Quickstart", translations: { ko: "빠른 시작", "zh-CN": "快速开始", ru: "Быстрый старт", ja: "クイックスタート" }, slug: "getting-started/quickstart" }, - { label: "How It Works", translations: { ko: "동작 원리", "zh-CN": "工作原理", ru: "Как это работает", ja: "仕組み" }, slug: "getting-started/how-it-works" }, + { label: "Installation", translations: { ko: "설치", "zh-CN": "安装", "zh-TW": "安裝", ru: "Установка", ja: "インストール" }, slug: "getting-started/installation" }, + { label: "Quickstart", translations: { ko: "빠른 시작", "zh-CN": "快速开始", "zh-TW": "快速入門", ru: "Быстрый старт", ja: "クイックスタート" }, slug: "getting-started/quickstart" }, + { label: "How It Works", translations: { ko: "동작 원리", "zh-CN": "工作原理", "zh-TW": "運作原理", ru: "Как это работает", ja: "仕組み" }, slug: "getting-started/how-it-works" }, ], }, { label: "Guides", - translations: { ko: "가이드", "zh-CN": "指南", ru: "Руководства", ja: "ガイド" }, + translations: { ko: "가이드", "zh-CN": "指南", "zh-TW": "指南", ru: "Руководства", ja: "ガイド" }, items: [ - { label: "Providers", translations: { ko: "프로바이더", "zh-CN": "提供商", ru: "Провайдеры", ja: "プロバイダー" }, slug: "guides/providers" }, - { label: "Model Routing", translations: { ko: "모델 라우팅", "zh-CN": "模型路由", ru: "Маршрутизация моделей", ja: "モデルルーティング" }, slug: "guides/model-routing" }, - { label: "Codex Integration", translations: { ko: "Codex 통합", "zh-CN": "Codex 集成", ru: "Интеграция с Codex", ja: "Codex 連携" }, slug: "guides/codex-integration" }, - { label: "Codex App Model Picker", translations: { ko: "Codex App 모델 선택기", "zh-CN": "Codex App 模型选择器", ru: "Выбор модели в Codex App", ja: "Codex App モデルピッカー" }, slug: "guides/codex-app-models" }, - { label: "Model Ordering", translations: { ko: "모델 정렬에 관하여", "zh-CN": "模型排序", ru: "Сортировка моделей", ja: "モデルの並び順" }, slug: "guides/model-ordering" }, - { label: "Claude Code", translations: { ko: "Claude Code", "zh-CN": "Claude Code", ru: "Claude Code", ja: "Claude Code" }, slug: "guides/claude-code" }, - { label: "Grok Build", translations: { ko: "Grok Build", "zh-CN": "Grok Build", ru: "Grok Build", ja: "Grok Build" }, slug: "guides/grok-build" }, - { label: "Sidecars: Web Search & Vision", translations: { ko: "사이드카: 웹 검색 & 비전", "zh-CN": "边车:网络搜索与视觉", ru: "Сайдкары: веб-поиск и зрение", ja: "サイドカー: ウェブ検索 & ビジョン" }, slug: "guides/sidecars" }, - { label: "Web Dashboard", translations: { ko: "웹 대시보드", "zh-CN": "网页控制台", ru: "Веб-дашборд", ja: "ウェブダッシュボード" }, slug: "guides/web-dashboard" }, - { label: "Sub-agent Surface", translations: { ko: "서브에이전트 서피스", "zh-CN": "子代理界面", ru: "Интерфейс подагентов", ja: "サブエージェントサーフェス" }, slug: "guides/sub-agent-surface" }, + { label: "Providers", translations: { ko: "프로바이더", "zh-CN": "提供商", "zh-TW": "供應商", ru: "Провайдеры", ja: "プロバイダー" }, slug: "guides/providers" }, + { label: "Model Routing", translations: { ko: "모델 라우팅", "zh-CN": "模型路由", "zh-TW": "模型路由", ru: "Маршрутизация моделей", ja: "モデルルーティング" }, slug: "guides/model-routing" }, + { label: "Codex Integration", translations: { ko: "Codex 통합", "zh-CN": "Codex 集成", "zh-TW": "Codex 整合", ru: "Интеграция с Codex", ja: "Codex 連携" }, slug: "guides/codex-integration" }, + { label: "Codex App Model Picker", translations: { ko: "Codex App 모델 선택기", "zh-CN": "Codex App 模型选择器", "zh-TW": "Codex App 模型選擇器", ru: "Выбор модели в Codex App", ja: "Codex App モデルピッカー" }, slug: "guides/codex-app-models" }, + { label: "Model Ordering", translations: { ko: "모델 정렬에 관하여", "zh-CN": "模型排序", "zh-TW": "模型排序", ru: "Сортировка моделей", ja: "モデルの並び順" }, slug: "guides/model-ordering" }, + { label: "Claude Code", translations: { ko: "Claude Code", "zh-CN": "Claude Code", "zh-TW": "Claude Code", ru: "Claude Code", ja: "Claude Code" }, slug: "guides/claude-code" }, + { label: "Grok Build", translations: { ko: "Grok Build", "zh-CN": "Grok Build", "zh-TW": "Grok Build", ru: "Grok Build", ja: "Grok Build" }, slug: "guides/grok-build" }, + { label: "Sidecars: Web Search & Vision", translations: { ko: "사이드카: 웹 검색 & 비전", "zh-CN": "边车:网络搜索与视觉", "zh-TW": "邊車:網路搜尋與視覺", ru: "Сайдкары: веб-поиск и зрение", ja: "サイドカー: ウェブ検索 & ビジョン" }, slug: "guides/sidecars" }, + { label: "Web Dashboard", translations: { ko: "웹 대시보드", "zh-CN": "网页控制台", "zh-TW": "網頁儀表板", ru: "Веб-дашборд", ja: "ウェブダッシュボード" }, slug: "guides/web-dashboard" }, + { label: "Sub-agent Surface", translations: { ko: "서브에이전트 서피스", "zh-CN": "子代理界面", "zh-TW": "子代理介面", ru: "Интерфейс подагентов", ja: "サブエージェントサーフェス" }, slug: "guides/sub-agent-surface" }, ], }, { label: "Benchmarks", - translations: { ko: "벤치마크", "zh-CN": "基准测试", ru: "Бенчмарки", ja: "ベンチマーク" }, + translations: { ko: "벤치마크", "zh-CN": "基准测试", "zh-TW": "基準測試", ru: "Бенчмарки", ja: "ベンチマーク" }, collapsed: true, items: [ - { label: "Overview", translations: { ko: "개요", "zh-CN": "概览", ru: "Обзор", ja: "概要" }, slug: "benchmarks" }, - { label: "Coding", translations: { ko: "코딩", "zh-CN": "编程", ru: "Кодинг", ja: "コーディング" }, slug: "benchmarks/coding" }, - { label: "Frontend", translations: { ko: "프론트엔드", "zh-CN": "前端", ru: "Фронтенд", ja: "フロントエンド" }, slug: "benchmarks/frontend" }, - { label: "Terminal", translations: { ko: "터미널", "zh-CN": "终端", ru: "Терминал", ja: "ターミナル" }, slug: "benchmarks/terminal" }, - { label: "Security", translations: { ko: "보안", "zh-CN": "安全", ru: "Безопасность", ja: "セキュリティ" }, slug: "benchmarks/security" }, - { label: "Intelligence", translations: { ko: "인텔리전스", "zh-CN": "智能", ru: "Интеллект", ja: "インテリジェンス" }, slug: "benchmarks/intelligence" }, + { label: "Overview", translations: { ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要" }, slug: "benchmarks" }, + { label: "Coding", translations: { ko: "코딩", "zh-CN": "编程", "zh-TW": "程式設計", ru: "Кодинг", ja: "コーディング" }, slug: "benchmarks/coding" }, + { label: "Frontend", translations: { ko: "프론트엔드", "zh-CN": "前端", "zh-TW": "前端", ru: "Фронтенд", ja: "フロントエンド" }, slug: "benchmarks/frontend" }, + { label: "Terminal", translations: { ko: "터미널", "zh-CN": "终端", "zh-TW": "終端", ru: "Терминал", ja: "ターミナル" }, slug: "benchmarks/terminal" }, + { label: "Security", translations: { ko: "보안", "zh-CN": "安全", "zh-TW": "安全", ru: "Безопасность", ja: "セキュリティ" }, slug: "benchmarks/security" }, + { label: "Intelligence", translations: { ko: "인텔리전스", "zh-CN": "智能", "zh-TW": "智慧", ru: "Интеллект", ja: "インテリジェンス" }, slug: "benchmarks/intelligence" }, ], }, { label: "Reference", - translations: { ko: "레퍼런스", "zh-CN": "参考", ru: "Справочник", ja: "リファレンス" }, + translations: { ko: "레퍼런스", "zh-CN": "参考", "zh-TW": "參考", ru: "Справочник", ja: "リファレンス" }, items: [ - { label: "CLI", translations: { ko: "CLI", "zh-CN": "命令行", ru: "CLI", ja: "CLI" }, slug: "reference/cli" }, - { label: "Configuration", translations: { ko: "설정", "zh-CN": "配置", ru: "Конфигурация", ja: "設定" }, slug: "reference/configuration" }, - { label: "Adapters", translations: { ko: "어댑터", "zh-CN": "适配器", ru: "Адаптеры", ja: "アダプター" }, slug: "reference/adapters" }, - { label: "Architecture", translations: { ko: "아키텍처", "zh-CN": "架构", ru: "Архитектура", ja: "アーキテクチャ" }, slug: "reference/architecture" }, + { label: "CLI", translations: { ko: "CLI", "zh-CN": "命令行", "zh-TW": "命令列", ru: "CLI", ja: "CLI" }, slug: "reference/cli" }, + { label: "Configuration", translations: { ko: "설정", "zh-CN": "配置", "zh-TW": "設定", ru: "Конфигурация", ja: "設定" }, slug: "reference/configuration" }, + { label: "Adapters", translations: { ko: "어댑터", "zh-CN": "适配器", "zh-TW": "適配器", ru: "Адаптеры", ja: "アダプター" }, slug: "reference/adapters" }, + { label: "Architecture", translations: { ko: "아키텍처", "zh-CN": "架构", "zh-TW": "架構", ru: "Архитектура", ja: "アーキテクチャ" }, slug: "reference/architecture" }, ], }, { label: "Troubleshooting", - translations: { ko: "문제 해결", "zh-CN": "故障排除", ru: "Устранение неполадок", ja: "トラブルシューティング" }, + translations: { ko: "문제 해결", "zh-CN": "故障排除", "zh-TW": "疑難排解", ru: "Устранение неполадок", ja: "トラブルシューティング" }, collapsed: true, items: [ - { label: "Windows Memory Growth", translations: { ko: "Windows 메모리 증가", "zh-CN": "Windows 内存增长", ru: "Рост памяти в Windows", ja: "Windows メモリ増加" }, slug: "troubleshooting/windows-memory" }, + { label: "Windows Memory Growth", translations: { ko: "Windows 메모리 증가", "zh-CN": "Windows 内存增长", "zh-TW": "Windows 記憶體增長", ru: "Рост памяти в Windows", ja: "Windows メモリ増加" }, slug: "troubleshooting/windows-memory" }, ], }, - { label: "Contributing", translations: { ko: "기여하기", "zh-CN": "贡献", ru: "Как внести вклад", ja: "コントリビュート" }, slug: "contributing" }, + { label: "Contributing", translations: { ko: "기여하기", "zh-CN": "贡献", "zh-TW": "貢獻", ru: "Как внести вклад", ja: "コントリビュート" }, slug: "contributing" }, ], }), ], diff --git a/docs-site/src/components/FrontierBoards.astro b/docs-site/src/components/FrontierBoards.astro index 2a2937d86..fadefb626 100644 --- a/docs-site/src/components/FrontierBoards.astro +++ b/docs-site/src/components/FrontierBoards.astro @@ -10,7 +10,7 @@ import data from "../data/frontier-benchmarks.json"; import { FRONTIER_STRINGS } from "../data/frontier-i18n"; interface Props { - locale?: "en" | "ko" | "zh-cn" | "ru" | "ja"; + locale?: "en" | "ko" | "zh-cn" | "zh-tw" | "ru" | "ja"; /** Comma-separated board ids to render; omit for all boards. */ boards?: string; /** Show the page-level subtitle (overview pages only). */ @@ -26,7 +26,7 @@ const fill = (key: string, vars: Record): string => Object.entries(vars).reduce((acc, [k, v]) => acc.replace(`{${k}}`, v), t(key)); // The PR i18n has no column-header key for "score" — keep a tiny local map. -const SCORE_HEADER: Record = { en: "Score", ko: "점수", "zh-cn": "得分", ru: "Балл", ja: "スコア" }; +const SCORE_HEADER: Record = { en: "Score", ko: "점수", "zh-cn": "得分", "zh-tw": "得分", ru: "Балл", ja: "スコア" }; /** Dataset tags are kebab-case; i18n keys are camelCase (cheap-subagent → cheapSubagent). */ const tagKey = (tag: string): string => tag.replace(/-([a-z])/g, (_, c) => c.toUpperCase()); diff --git a/docs-site/src/components/Header.astro b/docs-site/src/components/Header.astro index 583ab5b9a..47dc067ab 100644 --- a/docs-site/src/components/Header.astro +++ b/docs-site/src/components/Header.astro @@ -19,14 +19,15 @@ const prefix = locale ? `${base}${locale}/` : base; type NavLink = { label: string; href: string }; type NavGroup = { label: string; links: NavLink[] }; -const t = (en: string, ko: string, zh: string, ru: string, ja: string) => - locale === 'ko' ? ko : locale === 'zh-cn' ? zh : locale === 'ru' ? ru : locale === 'ja' ? ja : en; +const t = (en: string, ko: string, zh: string, ru: string, ja: string, zhTW: string) => + locale === 'ko' ? ko : locale === 'zh-cn' ? zh : locale === 'zh-tw' ? zhTW : locale === 'ru' ? ru : locale === 'ja' ? ja : en; -type LanguageOption = { code: 'root' | 'ko' | 'zh-cn' | 'ru' | 'ja'; label: string }; +type LanguageOption = { code: 'root' | 'ko' | 'zh-cn' | 'zh-tw' | 'ru' | 'ja'; label: string }; const languages: LanguageOption[] = [ { code: 'root', label: 'English' }, { code: 'ko', label: '한국어' }, { code: 'zh-cn', label: '简体中文' }, + { code: 'zh-tw', label: '繁體中文' }, { code: 'ru', label: 'Русский' }, { code: 'ja', label: '日本語' }, ]; @@ -42,53 +43,54 @@ const languageHref = (code: LanguageOption['code']) => `${code === 'root' ? base : `${base}${code}/`}${routeSuffix}`; const themeLabels = { - auto: t('Auto', '자동', '自动', 'Авто', '自動'), - light: t('Light', '라이트', '浅色', 'Светлая', 'ライト'), - dark: t('Dark', '다크', '深色', 'Тёмная', 'ダーク'), + auto: t('Auto', '자동', '自动', 'Авто', '自動', '自動'), + light: t('Light', '라이트', '浅色', 'Светлая', 'ライト', '淺色'), + dark: t('Dark', '다크', '深色', 'Тёмная', 'ダーク', '深色'), }; -const themeName = t('Theme', '테마', '主题', 'Тема', 'テーマ'); +const themeName = t('Theme', '테마', '主题', 'Тема', 'テーマ', '主題'); const themeCycleHint = t( 'Click to use the next theme', '클릭하여 다음 테마로 전환', '点击切换到下一个主题', 'Нажмите, чтобы включить следующую тему', 'クリックして次のテーマに切り替え', + '點選切換到下一個主題', ); const groups: NavGroup[] = [ { - label: t('Getting Started', '시작하기', '开始使用', 'Начало работы', 'はじめに'), + label: t('Getting Started', '시작하기', '开始使用', 'Начало работы', 'はじめに', '開始使用'), links: [ - { label: t('Installation', '설치', '安装', 'Установка', 'インストール'), href: `${prefix}getting-started/installation/` }, - { label: t('Quickstart', '빠른 시작', '快速开始', 'Быстрый старт', 'クイックスタート'), href: `${prefix}getting-started/quickstart/` }, - { label: t('How It Works', '동작 원리', '工作原理', 'Как это работает', '仕組み'), href: `${prefix}getting-started/how-it-works/` }, + { label: t('Installation', '설치', '安装', 'Установка', 'インストール', '安裝'), href: `${prefix}getting-started/installation/` }, + { label: t('Quickstart', '빠른 시작', '快速开始', 'Быстрый старт', 'クイックスタート', '快速入門'), href: `${prefix}getting-started/quickstart/` }, + { label: t('How It Works', '동작 원리', '工作原理', 'Как это работает', '仕組み', '運作原理'), href: `${prefix}getting-started/how-it-works/` }, ], }, { - label: t('Guides', '가이드', '指南', 'Руководства', 'ガイド'), + label: t('Guides', '가이드', '指南', 'Руководства', 'ガイド', '指南'), links: [ - { label: t('Providers', '프로바이더', '提供商', 'Провайдеры', 'プロバイダー'), href: `${prefix}guides/providers/` }, - { label: t('Model Routing', '모델 라우팅', '模型路由', 'Маршрутизация моделей', 'モデルルーティング'), href: `${prefix}guides/model-routing/` }, - { label: t('Codex Integration', 'Codex 통합', 'Codex 集成', 'Интеграция с Codex', 'Codex 連携'), href: `${prefix}guides/codex-integration/` }, - { label: t('Codex App Model Picker', 'Codex App 모델 선택기', 'Codex App 模型选择器', 'Селектор моделей Codex App', 'Codex App モデルピッカー'), href: `${prefix}guides/codex-app-models/` }, - { label: t('Sidecars: Search & Vision', '사이드카: 검색 & 비전', '边车:搜索与视觉', 'Сайдкары: поиск и зрение', 'サイドカー: 検索 & ビジョン'), href: `${prefix}guides/sidecars/` }, - { label: t('Web Dashboard', '웹 대시보드', '网页控制台', 'Веб-дашборд', 'ウェブダッシュボード'), href: `${prefix}guides/web-dashboard/` }, - { label: t('Sub-agent Surface', '서브에이전트 서피스', '子代理界面', 'Интерфейс подагентов', 'サブエージェントサーフェス'), href: `${prefix}guides/sub-agent-surface/` }, + { label: t('Providers', '프로바이더', '提供商', 'Провайдеры', 'プロバイダー', '供應商'), href: `${prefix}guides/providers/` }, + { label: t('Model Routing', '모델 라우팅', '模型路由', 'Маршрутизация моделей', 'モデルルーティング', '模型路由'), href: `${prefix}guides/model-routing/` }, + { label: t('Codex Integration', 'Codex 통합', 'Codex 集成', 'Интеграция с Codex', 'Codex 連携', 'Codex 整合'), href: `${prefix}guides/codex-integration/` }, + { label: t('Codex App Model Picker', 'Codex App 모델 선택기', 'Codex App 模型选择器', 'Селектор моделей Codex App', 'Codex App モデルピッカー', 'Codex App 模型選擇器'), href: `${prefix}guides/codex-app-models/` }, + { label: t('Sidecars: Search & Vision', '사이드카: 검색 & 비전', '边车:搜索与视觉', 'Сайдкары: поиск и зрение', 'サイドカー: 検索 & ビジョン', '邊車:搜尋與視覺'), href: `${prefix}guides/sidecars/` }, + { label: t('Web Dashboard', '웹 대시보드', '网页控制台', 'Веб-дашборд', 'ウェブダッシュボード', '網頁儀表板'), href: `${prefix}guides/web-dashboard/` }, + { label: t('Sub-agent Surface', '서브에이전트 서피스', '子代理界面', 'Интерфейс подагентов', 'サブエージェントサーフェス', '子代理介面'), href: `${prefix}guides/sub-agent-surface/` }, ], }, { - label: t('Reference', '레퍼런스', '参考', 'Справочник', 'リファレンス'), + label: t('Reference', '레퍼런스', '参考', 'Справочник', 'リファレンス', '參考'), links: [ { label: 'CLI', href: `${prefix}reference/cli/` }, - { label: t('Configuration', '설정', '配置', 'Конфигурация', '設定'), href: `${prefix}reference/configuration/` }, - { label: t('Adapters', '어댑터', '适配器', 'Адаптеры', 'アダプター'), href: `${prefix}reference/adapters/` }, - { label: t('Architecture', '아키텍처', '架构', 'Архитектура', 'アーキテクチャ'), href: `${prefix}reference/architecture/` }, + { label: t('Configuration', '설정', '配置', 'Конфигурация', '設定', '設定'), href: `${prefix}reference/configuration/` }, + { label: t('Adapters', '어댑터', '适配器', 'Адаптеры', 'アダプター', '適配器'), href: `${prefix}reference/adapters/` }, + { label: t('Architecture', '아키텍처', '架构', 'Архитектура', 'アーキテクチャ', '架構'), href: `${prefix}reference/architecture/` }, ], }, ]; const contributing: NavLink = { - label: t('Contributing', '기여하기', '贡献', 'Участие в проекте', 'コントリビュート'), + label: t('Contributing', '기여하기', '贡献', 'Участие в проекте', 'コントリビュート', '貢獻'), href: `${prefix}contributing/`, }; --- @@ -97,7 +99,7 @@ const contributing: NavLink = {

-