* Add i18n framework with next-intl for 19 languages
Set up complete internationalization infrastructure:
- Install next-intl v4 with App Router support
- Create i18n config (routing, request, navigation)
- Add middleware for automatic locale detection from Accept-Language
- Restructure all routes under app/[locale]/
- Extract UI strings to messages/en.json
- Update all components to use useTranslations()
- Add language switcher dropdown in footer
- Support RTL for Arabic and Khmer
- Update sitemap with locale alternates
- Add generateStaticParams for all 19 locales
Languages: en, ja, zh-CN, zh-TW, ko, de, es, fr, it, da, pl, ru, bs, ar, no, pt-BR, th, tr, km
Locale detection: auto-detect from browser Accept-Language header,
with cookie persistence and locale prefix only for non-default (en).
* Add translations for de, fr, it, ja, zh-CN, zh-TW
* Add translations for ar, bs, da, es, km, no, pl, pt-BR, ru, th, tr
* Convert docs and legal pages to use useTranslations()
* Add i18n to keyboard shortcuts component
* Add i18n to wall-of-love, add missing blog posts to sitemap
* Add keyboard shortcuts and wallOfLove translations to all locales
* Update bun lockfile for next-intl dependency
* Fix t.rich() configPath: pass ReactNode not function for {var} interpolation
* Fix configPath: use rich text tag instead of plain interpolation for ReactNode
* Fix t.rich() interpolation: use rich text tags for all ReactNode placeholders
Changed {legacy}, {openShortcut}, {jumpShortcut} from plain variable
interpolation to <tag>content</tag> format so t.rich() gets proper
functions instead of values.
* Escape ICU curly braces in socketCallout rich text across all locales
* Fix i18n issues: Khmer RTL, zh-CN quality, locale-aware testimonials, hardcoded strings
- Fix Khmer (km) incorrectly marked as RTL (it's LTR, only Arabic is RTL)
- Fix zh-CN/zh-TW taglinePrefix to mention terminals and open source
- Add locale-aware testimonial translations: show original text, translate
for non-matching locales, skip translation when locale matches original
- Translate hardcoded English table content in notifications page
- Add testimonial translations to all 19 locale files
- Remove unused setRequestLocale import and params from home page
* Address PR review comments: metadata localization, blog fixes, legal pages, accessibility
- Convert hardcoded metadata to generateMetadata with getTranslations on all docs, blog, community, and wall-of-love pages
- Fix blog canonical/OG URLs to be locale-aware
- Fix introducing-cmux .split(": ") by using separate label/desc translation keys
- Revert legal page titles to English (legal content stays English-only)
- Add focus-visible ring to language switcher for keyboard accessibility
- Preserve query string and hash when switching locale
- Convert site-footer to server component (remove unnecessary "use client")
- Remove .toLowerCase() on translated text in community page
- Add /docs/browser-automation and /wall-of-love to sitemap
- Fix keyboard-shortcuts jump link visibility with trimmed query
- Deduplicate blogSlugs by importing from blog-posts.ts
- Add typingCodingAgents/typingMultitasking translation keys to all locales
- Fix Spanish accent/tilde issues in es.json testimonials
- Fix nested <a> tag in homepage keyboard shortcuts feature
- Remove unused setRequestLocale import from homepage
* Convert remaining layout/index metadata to generateMetadata
- Root layout: locale-aware title, description, OG, and Twitter card metadata
- Docs layout: translated title template
- Blog layout: translated title template
- Blog index: locale-aware metadata
* Add translated metadata keys to all locales, fix docs redirect
- Add meta.title/description/ogDescription to all 18 non-English locales
- Add docs.layoutTitle, blog.layoutTitle/metaTitle/metaDescription to all locales
- Add blog post metadata (zenOfCmux, cmdShiftU, showHnLaunch, introducingCmux) to all locales
- Add community.metaTitle/metaDescription to all locales
- Fix docs index redirect to preserve locale prefix
* Add translated docs page metaTitle keys to all locales
587 lines
37 KiB
JSON
587 lines
37 KiB
JSON
{
|
||
"meta": {
|
||
"title": "cmux — 專為多工處理打造的終端",
|
||
"description": "基於 Ghostty 的原生 macOS 終端。支援 Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider 及任何 CLI 工具。垂直分頁、通知環、分割面板和 socket API。",
|
||
"ogDescription": "面向 AI 程式 agent 的原生 macOS 終端。支援 Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider 及任何 CLI 工具。"
|
||
},
|
||
"common": {
|
||
"downloadForMac": "下載 Mac 版",
|
||
"viewOnGitHub": "在 GitHub 上查看",
|
||
"closeMenu": "關閉選單",
|
||
"openMenu": "開啟選單",
|
||
"toggleTheme": "切換主題",
|
||
"backToBlog": "返回部落格",
|
||
"readTheDocs": "閱讀文件",
|
||
"viewChangelog": "查看更新日誌"
|
||
},
|
||
"nav": {
|
||
"docs": "文件",
|
||
"blog": "部落格",
|
||
"changelog": "更新日誌",
|
||
"community": "社群",
|
||
"github": "GitHub"
|
||
},
|
||
"footer": {
|
||
"product": "產品",
|
||
"resources": "資源",
|
||
"legal": "法律",
|
||
"social": "社群媒體",
|
||
"blog": "部落格",
|
||
"community": "社群",
|
||
"docs": "文件",
|
||
"changelog": "更新日誌",
|
||
"privacy": "隱私權",
|
||
"terms": "服務條款",
|
||
"eula": "EULA",
|
||
"github": "GitHub",
|
||
"twitter": "X / Twitter",
|
||
"discord": "Discord",
|
||
"contact": "聯絡我們",
|
||
"copyright": "© {year} Manaflow",
|
||
"language": "語言"
|
||
},
|
||
"home": {
|
||
"taglinePrefix": "開源終端,專為 ",
|
||
"typingCodingAgents": "程式 agent",
|
||
"typingMultitasking": "多工處理",
|
||
"subtitle": "基於 Ghostty 的原生 macOS 終端應用程式。開源免費。垂直分頁、代理需要注意時的通知環、分割窗格,以及用於自動化的 socket API。",
|
||
"features": "功能",
|
||
"faq": "常見問題",
|
||
"communitySection": "社群",
|
||
"feature": {
|
||
"verticalTabs": "垂直分頁",
|
||
"verticalTabsDesc": ":側邊欄顯示 git 分支、工作目錄、連接埠和通知文字",
|
||
"notificationRings": "通知環",
|
||
"notificationRingsDesc": ":當代理需要注意時,窗格會亮起",
|
||
"inAppBrowser": "內建瀏覽器",
|
||
"inAppBrowserDesc": ":在終端機旁分割一個瀏覽器,並提供可編寫腳本的 API",
|
||
"splitPanes": "分割窗格",
|
||
"splitPanesDesc": ":每個分頁內支援水平和垂直分割",
|
||
"scriptable": "可編寫腳本",
|
||
"scriptableDesc": ":提供 CLI 和 socket API,用於自動化和腳本編寫",
|
||
"gpuAccelerated": "GPU 加速",
|
||
"gpuAcceleratedDesc": ":由 libghostty 驅動,提供流暢的渲染效果",
|
||
"lightweight": "輕量化",
|
||
"lightweightDesc": ":原生 Swift + AppKit,無 Electron",
|
||
"keyboardShortcuts": "鍵盤快捷鍵",
|
||
"keyboardShortcutsDesc": ":<link>豐富的快捷鍵</link>,涵蓋工作區、分割、瀏覽器等功能"
|
||
},
|
||
"faqGhosttyQ": "cmux 和 Ghostty 有什麼關係?",
|
||
"faqGhosttyA": "cmux 不是 Ghostty 的分支。它使用 <link>libghostty</link> 作為終端機渲染的函式庫,就像應用程式使用 WebKit 來顯示網頁一樣。Ghostty 是一個獨立的終端機;cmux 是建立在其渲染引擎之上的不同應用程式。",
|
||
"faqPlatformQ": "支援哪些平台?",
|
||
"faqPlatformA": "目前僅支援 macOS。cmux 是原生的 Swift + AppKit 應用程式。",
|
||
"faqAgentsQ": "cmux 支援哪些程式碼代理?",
|
||
"faqAgentsA": "全部都支援。cmux 是一個終端機,所以任何在終端機中執行的代理都能直接使用:Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider、Goose、Amp、Cline、Cursor Agent,以及任何你能從命令列啟動的工具。",
|
||
"faqNotificationsQ": "通知是如何運作的?",
|
||
"faqNotificationsA": "當程序需要注意時,cmux 會在窗格周圍顯示通知環、在側邊欄顯示未讀徽章、顯示通知彈出視窗,以及 macOS 桌面通知。這些通知會透過標準終端機跳脫序列(OSC 9/99/777)自動觸發,你也可以透過 <cliLink>cmux CLI</cliLink> 和 <hooksLink>Claude Code hooks</hooksLink> 手動觸發。",
|
||
"faqShortcutsQ": "可以自訂鍵盤快捷鍵嗎?",
|
||
"faqShortcutsA": "終端機按鍵綁定從你的 Ghostty 設定檔(<configPath>~/.config/ghostty/config</configPath>)讀取。cmux 專屬的快捷鍵(工作區、分割、瀏覽器、通知)可以在「設定」中自訂。請參閱<link>預設快捷鍵</link>以獲取完整列表。",
|
||
"faqTmuxQ": "和 tmux 相比如何?",
|
||
"faqTmuxA": "tmux 是一個在任何終端機內執行的終端機多工器。cmux 是一個帶有圖形介面的原生 macOS 應用程式:垂直分頁、分割窗格、內建瀏覽器和 socket API 全部內建。不需要設定檔或前綴鍵。",
|
||
"faqFreeQ": "cmux 是免費的嗎?",
|
||
"faqFreeA": "是的,cmux 可以免費使用。原始碼可在 <link>GitHub</link> 上取得。"
|
||
},
|
||
"community": {
|
||
"title": "社群",
|
||
"description": "與其他 cmux 使用者和團隊交流。",
|
||
"discord": "Discord",
|
||
"discordAction": "加入我們的 Discord",
|
||
"discordDesc": "與社群聊天、獲得協助並分享回饋",
|
||
"githubAction": "在 GitHub 上查看",
|
||
"githubDesc": "給 repo 加星號、回報問題和貢獻程式碼",
|
||
"twitter": "Twitter",
|
||
"twitterAction": "在 X 上追蹤",
|
||
"twitterDesc": "更新、公告和技巧",
|
||
"youtube": "YouTube",
|
||
"youtubeAction": "訂閱",
|
||
"youtubeDesc": "示範、教學和導覽",
|
||
"linkedin": "LinkedIn",
|
||
"linkedinAction": "追蹤我們",
|
||
"linkedinDesc": "公司新聞和工程更新",
|
||
"metaTitle": "社群 — cmux",
|
||
"metaDescription": "在 Discord、Twitter、GitHub 等平台加入 cmux 社群"
|
||
},
|
||
"blog": {
|
||
"title": "部落格",
|
||
"layoutTitle": "cmux blog",
|
||
"metaTitle": "部落格",
|
||
"metaDescription": "cmux 團隊的新聞和更新",
|
||
"description": "來自 cmux 團隊的新聞和更新",
|
||
"posts": {
|
||
"cmdShiftU": {
|
||
"title": "Cmd+Shift+U",
|
||
"summary": "Cmd+Shift+U 如何在 cmux 的工作區之間導覽已完成的代理。",
|
||
"date": "2026 年 3 月 4 日",
|
||
"p1": "我最喜歡的 cmux 功能是 Cmd+Shift+U。我現在開了 17 個工作區,每個都在執行代理。以前我需要點擊分頁和通知面板來找出哪個完成了。打字更快。",
|
||
"p2": "Cmd+Shift+U 會跳到最新的未讀<link>通知</link>。實際上就是最後一個完成的代理。它會切換到正確的工作區、聚焦到確切的窗格、閃爍以提示你看哪裡,然後標記為已讀。如果通知來自另一個視窗,該視窗會移到前面。"
|
||
},
|
||
"zenOfCmux": {
|
||
"title": "cmux 之道",
|
||
"summary": "cmux 是一個基本元件,不是一個方案。它提供可組合的零件,你的工作流程由你決定。",
|
||
"date": "2026 年 2 月 27 日",
|
||
"p1": "cmux 不會規定開發者如何使用工具。它是一個帶有 CLI 的終端機和瀏覽器,其餘的由你決定。",
|
||
"p2": "cmux 是一個基本元件,不是一個方案。它提供終端機、瀏覽器、通知、工作區、分割、分頁,以及控制這一切的 CLI。cmux 不會強迫你用特定的方式使用程式碼代理。你用這些基本元件建立的東西是你自己的。",
|
||
"p3": "最好的開發者一直都在打造自己的工具。還沒有人找到與代理合作的最佳方式,那些建構封閉產品的團隊也還沒有。最接近自己程式碼庫的開發者會先找到答案。",
|
||
"p4": "給一百萬個開發者可組合的基本元件,他們集體找到最高效工作流程的速度會比任何產品團隊由上而下設計的更快。"
|
||
},
|
||
"showHnLaunch": {
|
||
"title": "在 Show HN 上發布 cmux",
|
||
"summary": "cmux 登上 Hacker News 第 2 名,被 Mitchell Hashimoto 分享,並在日本爆紅。",
|
||
"date": "2026 年 2 月 21 日",
|
||
"intro": "我們在 2 月 19 日將 cmux 發布到 <link>Show HN</link>:",
|
||
"blockquote1": "我同時執行很多 Claude Code 和 Codex 工作階段。我之前用 Ghostty 搭配大量分割窗格,依賴原生 macOS 通知來知道代理何時需要我。但 Claude Code 的通知內容永遠只有「Claude is waiting for your input」而沒有上下文,而且分頁開太多時,我連標題都看不到了。",
|
||
"blockquote2": "我試了幾個程式碼編排工具,但大多數是 Electron/Tauri 應用程式,效能讓我不滿意。我也更喜歡終端機,因為 GUI 編排工具會把你鎖在它們的工作流程裡。所以我用 Swift/AppKit 建立了 cmux 作為原生 macOS 應用程式。它使用 libghostty 進行終端機渲染,並讀取你現有的 Ghostty 設定來套用主題、字型、顏色等。",
|
||
"blockquote3": "主要新增的是側邊欄和通知系統。側邊欄有垂直分頁,顯示每個工作區的 git 分支、工作目錄、監聽的連接埠和最新通知文字。通知系統會擷取終端機序列(OSC 9/99/777),並提供 CLI(cmux notify)讓你連接到 Claude Code、OpenCode 等代理的 hooks。當代理在等待時,其窗格會出現藍色環圈,分頁在側邊欄中會亮起,這樣我就能在分割和分頁之間看出哪個需要我。Cmd+Shift+U 會跳到最近的未讀通知。",
|
||
"blockquote4": "內建瀏覽器有可編寫腳本的 API。代理可以擷取無障礙樹快照、取得元素參考、點擊、填寫表單、執行 JS 和讀取主控台日誌。你可以在終端機旁邊分割一個瀏覽器窗格,讓 Claude Code 直接與你的開發伺服器互動。",
|
||
"blockquote5": "一切都可以透過 CLI 和 socket API 編寫腳本:建立工作區/分頁、分割窗格、傳送按鍵、在瀏覽器中開啟 URL。",
|
||
"hitNumber2": "最高時登上 Hacker News 第 2 名。Mitchell Hashimoto 分享了它:",
|
||
"favoriteComment": "我最喜歡的 <link>HN 討論串</link>留言:",
|
||
"viralJapan": "出乎意料地,cmux 在日本爆紅:",
|
||
"translation": "翻譯:「這看起來不錯。一個基於 Ghostty 的終端機應用程式,設計成讓你在平行執行多個像 Claude Code 這樣的 CLI 時不會迷失。等待輸入的面板會有藍色邊框,而且有自己的通知系統。」",
|
||
"viralChina": "也在中國小範圍爆紅:",
|
||
"extensions": "另一件令人興奮的事是看到人們在 cmux CLI 之上進行開發。sasha 建立了一個 pi-cmux 擴充功能,在側邊欄中顯示模型資訊、token 用量和代理狀態:",
|
||
"scriptable": "cmux 中的一切都可以透過 CLI 編寫腳本:建立工作區、傳送按鍵、控制瀏覽器、讀取通知。cmux 的理念之一是可程式化和可組合,讓使用者可以自訂與程式碼代理合作的方式。程式碼代理的技術前沿變化很快,你不會想被鎖在一個跟不上的僵化 GUI 編排工具裡。",
|
||
"cta": "如果你正在同時執行多個程式碼代理,<link>試試 cmux</link>。"
|
||
},
|
||
"introducingCmux": {
|
||
"title": "介紹 cmux",
|
||
"summary": "一個基於 Ghostty 的原生 macOS 終端機,專為並行執行多個 AI 程式碼代理而設計。",
|
||
"date": "2026 年 2 月 12 日",
|
||
"p1": "cmux 是一個建立在 Ghostty 之上的原生 macOS 終端機應用程式,從頭開始為同時執行多個 AI 程式碼代理的開發者設計。",
|
||
"whyTitle": "為什麼選擇 cmux?",
|
||
"whyP": "現代開發工作流程通常需要同時執行多個代理。Claude Code、Codex 和其他工具各自在自己的終端機中。追蹤哪些需要注意並快速切換,就是 cmux 要解決的問題。",
|
||
"featuresTitle": "主要功能",
|
||
"getStartedTitle": "開始使用",
|
||
"getStartedP": "透過 Homebrew 安裝 cmux,或從<link>入門指南</link>下載 DMG。",
|
||
"featureVerticalTabsLabel": "垂直分頁",
|
||
"featureVerticalTabsDesc": "在側邊欄中一覽所有終端機",
|
||
"featureNotificationsLabel": "通知環",
|
||
"featureNotificationsDesc": "當代理需要你輸入時,分頁會閃爍",
|
||
"featureSplitPanesLabel": "分割窗格",
|
||
"featureSplitPanesDesc": "每個工作區內支援水平和垂直分割",
|
||
"featureSocketApiLabel": "Socket API",
|
||
"featureSocketApiDesc": "透過程式控制建立分頁和傳送輸入",
|
||
"featureGpuLabel": "GPU 加速",
|
||
"featureGpuDesc": "由 libghostty 驅動,提供流暢的渲染效果"
|
||
}
|
||
},
|
||
"zenOfCmux": {
|
||
"metaTitle": "cmux 之禪",
|
||
"metaDescription": "cmux 是原語而非解決方案。它提供可組合的部件,工作流由你決定。"
|
||
},
|
||
"cmdShiftU": {
|
||
"metaTitle": "Cmd+Shift+U",
|
||
"metaDescription": "改變你與 cmux 互動方式的新鍵盤快捷鍵。"
|
||
},
|
||
"showHnLaunch": {
|
||
"metaTitle": "在 Show HN 上發布 cmux",
|
||
"metaDescription": "在 Hacker News 上發布 cmux 的故事。"
|
||
},
|
||
"introducingCmux": {
|
||
"metaTitle": "cmux 介紹",
|
||
"metaDescription": "我們為什麼要做 cmux,一個全新的 macOS 終端。"
|
||
}
|
||
},
|
||
"docs": {
|
||
"layoutTitle": "cmux docs",
|
||
"gettingStarted": {
|
||
"title": "入門指南",
|
||
"metaDescription": "安裝 cmux,專為 AI 程式碼代理打造的原生 macOS 終端機。Homebrew、DMG 下載、CLI 設定,以及透過 Sparkle 自動更新。",
|
||
"intro": "cmux 是一個基於 Ghostty 的輕量原生 macOS 終端機,用於管理多個 AI 程式碼代理。它具備垂直分頁、通知面板和基於 socket 的控制 API。",
|
||
"install": "安裝",
|
||
"dmgRecommended": "DMG(推薦)",
|
||
"dmgDesc": "開啟 .dmg 並將 cmux 拖曳到「應用程式」資料夾。cmux 透過 Sparkle 自動更新,所以你只需要下載一次。",
|
||
"homebrew": "Homebrew",
|
||
"updateLater": "之後更新:",
|
||
"firstLaunchCallout": "首次啟動時,macOS 可能會要求你確認開啟來自已識別開發者的應用程式。點擊<strong>打開</strong>以繼續。",
|
||
"verifyTitle": "驗證安裝",
|
||
"verifyDesc": "開啟 cmux,你應該會看到:",
|
||
"verifyItem1": "一個帶有左側垂直分頁側邊欄的終端機視窗",
|
||
"verifyItem2": "一個已開啟的初始工作區",
|
||
"verifyItem3": "已準備好接受輸入的 Ghostty 驅動終端機",
|
||
"cliSetup": "CLI 設定",
|
||
"cliDesc": "cmux 包含一個用於自動化的命令列工具。在 cmux 終端機內會自動運作。若要在 cmux 外部使用 CLI,請建立符號連結:",
|
||
"cliThen": "然後你可以執行以下指令:",
|
||
"autoUpdates": "自動更新",
|
||
"autoUpdatesDesc": "cmux 透過 Sparkle 自動檢查更新。當有可用更新時,你會在標題列看到一個更新提示。你也可以透過選單列的 cmux > 檢查更新手動檢查。",
|
||
"sessionRestore": "工作階段還原(目前行為)",
|
||
"sessionRestoreDesc": "重新啟動後,cmux 僅還原佈局和中繼資料:",
|
||
"sessionItem1": "視窗、工作區和窗格佈局",
|
||
"sessionItem2": "工作目錄",
|
||
"sessionItem3": "終端機捲動回看(盡力而為)",
|
||
"sessionItem4": "瀏覽器 URL 和瀏覽歷史",
|
||
"sessionCallout": "cmux 尚不支援還原即時程序狀態。活躍的終端機應用程式工作階段(如 Claude Code、tmux 和 vim)在應用程式重啟後不會恢復。",
|
||
"requirements": "系統需求",
|
||
"reqItem1": "macOS 14.0 或更新版本",
|
||
"reqItem2": "Apple Silicon 或 Intel Mac",
|
||
"metaTitle": "快速開始"
|
||
},
|
||
"concepts": {
|
||
"title": "概念",
|
||
"metaDescription": "cmux 如何組織終端機:視窗、工作區、窗格和 surface。側邊欄、分割和 socket API 背後的層級結構。",
|
||
"intro": "cmux 以四層層級結構組織你的終端機。了解這些層級有助於使用 socket API、CLI 和鍵盤快捷鍵。",
|
||
"hierarchy": "層級結構",
|
||
"windowTitle": "視窗",
|
||
"windowDesc": "一個 macOS 視窗。使用 {shortcut} 開啟多個視窗。每個視窗都有自己的側邊欄和獨立的工作區。",
|
||
"workspaceTitle": "工作區",
|
||
"workspaceDesc": "側邊欄中的項目。每個工作區包含一個或多個分割窗格。工作區就是你在左側側邊欄中看到的列表。",
|
||
"workspaceNote": "在 UI 和鍵盤快捷鍵中,工作區通常被稱為「分頁」,因為它們在側邊欄中的行為類似分頁。Socket API 和環境變數使用「workspace」這個術語。",
|
||
"contextHeader": "情境",
|
||
"termUsedHeader": "使用的術語",
|
||
"sidebarUI": "側邊欄 UI",
|
||
"tab": "分頁",
|
||
"keyboardShortcuts": "鍵盤快捷鍵",
|
||
"workspaceOrTab": "工作區或分頁",
|
||
"socketAPI": "Socket API",
|
||
"environmentVariable": "環境變數",
|
||
"workspaceShortcuts": "快捷鍵:{new}(新增)、{jump}(跳轉)、{close}(關閉)、{prevNext}(上一個/下一個)",
|
||
"paneTitle": "窗格",
|
||
"paneDesc": "工作區內的分割區域。使用 {right}(右)或 {down}(下)來分割建立。使用 {nav} + 方向鍵在窗格之間導覽。",
|
||
"paneNote": "每個窗格可以包含多個 surface(窗格內的分頁)。",
|
||
"surfaceTitle": "Surface",
|
||
"surfaceDesc": "窗格內的分頁。每個窗格都有自己的分頁列,可以包含多個 surface。使用 {new} 建立,使用 {prev} / {next} 或 {jump} 導覽。",
|
||
"surfaceNote": "Surface 是你互動的個別終端機或瀏覽器工作階段。每個 surface 都有自己的 CMUX_SURFACE_ID 環境變數。",
|
||
"panelTitle": "面板",
|
||
"panelDesc": "Surface 內的內容。目前有兩種類型:",
|
||
"panelTerminal": "終端機:Ghostty 終端機工作階段",
|
||
"panelBrowser": "瀏覽器:內嵌的網頁檢視",
|
||
"panelNote": "面板主要是內部概念。在 socket API 和 CLI 中,你是與 surface 互動,而非直接與面板互動。",
|
||
"visualExample": "視覺範例",
|
||
"visualExampleDesc": "在此範例中:",
|
||
"visualItem1": "視窗包含一個側邊欄,有三個工作區(dev、server、logs)",
|
||
"visualItem2": "選擇了「dev」工作區,顯示兩個並排的窗格",
|
||
"visualItem3": "窗格 1 有兩個 surface(分頁列中的 [S1] 和 [S2]),S1 為活躍狀態",
|
||
"visualItem4": "窗格 2 有一個 surface",
|
||
"visualItem5": "每個 surface 包含一個面板(此例中為終端機)",
|
||
"summary": "摘要",
|
||
"levelHeader": "層級",
|
||
"whatItIsHeader": "說明",
|
||
"createdByHeader": "建立方式",
|
||
"identifiedByHeader": "識別方式",
|
||
"macosWindow": "macOS 視窗",
|
||
"sidebarEntry": "側邊欄項目",
|
||
"splitRegion": "分割區域",
|
||
"tabWithinPane": "窗格內的分頁",
|
||
"terminalOrBrowser": "終端機或瀏覽器",
|
||
"automatic": "自動",
|
||
"paneIdSocket": "窗格 ID(socket API)",
|
||
"panelIdInternal": "面板 ID(內部)",
|
||
"metaTitle": "概念"
|
||
},
|
||
"configuration": {
|
||
"title": "設定",
|
||
"metaDescription": "透過 Ghostty 設定檔配置 cmux。字型、主題、顏色、分割窗格樣式、捲動回看和自動化模式的應用程式設定。",
|
||
"intro": "cmux 從 Ghostty 設定檔讀取設定,如果你是從 Ghostty 轉過來的,會覺得很熟悉。",
|
||
"configLocations": "設定檔位置",
|
||
"configLocationsDesc": "cmux 會依序在以下位置尋找設定:",
|
||
"createConfig": "如果設定檔不存在,請建立它:",
|
||
"appearance": "外觀",
|
||
"font": "字型",
|
||
"colors": "顏色",
|
||
"splitPanes": "分割窗格",
|
||
"behavior": "行為",
|
||
"scrollback": "捲動回看",
|
||
"workingDirectory": "工作目錄",
|
||
"appSettings": "應用程式設定",
|
||
"appSettingsDesc": "應用程式內設定可透過 cmux > 設定({shortcut})存取:",
|
||
"themeMode": "主題模式",
|
||
"themeSystem": "系統:跟隨 macOS 外觀",
|
||
"themeLight": "淺色:始終使用淺色模式",
|
||
"themeDark": "深色:始終使用深色模式",
|
||
"automationMode": "自動化模式",
|
||
"automationModeDesc": "控制 socket 存取層級:",
|
||
"automationOff": "關閉:停用 socket 控制(最安全)",
|
||
"automationCmux": "僅限 cmux 程序:只允許在 cmux 終端機內啟動的程序連線",
|
||
"automationAll": "allowAll:允許任何本機程序連線(CMUX_SOCKET_MODE=allowAll,僅限環境變數覆寫)",
|
||
"automationCallout": "在共用機器上,建議使用「關閉」或「僅限 cmux 程序」模式。",
|
||
"browserLinkBehavior": "瀏覽器連結行為",
|
||
"browserLinkDesc": "在「設定 > 瀏覽器」中,cmux 提供兩個不同用途的主機列表:",
|
||
"browserHostsEmbed": "在內建瀏覽器中開啟的主機:適用於從終端機輸出點擊的連結。此列表中的主機會在 cmux 中開啟;其他主機會在你的預設瀏覽器中開啟。支援每行一個主機或萬用字元(例如:example.com、*.internal.example)。",
|
||
"browserHostsHttp": "內建瀏覽器中允許的 HTTP 主機:僅適用於 HTTP(非 HTTPS)URL。此列表中的主機可以在 cmux 中開啟而不會出現警告提示。預設包含 localhost、127.0.0.1、::1、0.0.0.0 和 *.localtest.me。",
|
||
"exampleConfig": "範例設定",
|
||
"metaTitle": "設定"
|
||
},
|
||
"keyboardShortcuts": {
|
||
"title": "鍵盤快捷鍵",
|
||
"description": "cmux 中所有可用的鍵盤快捷鍵,依類別分組。",
|
||
"metaDescription": "cmux 所有鍵盤快捷鍵,涵蓋工作區、surface、分割窗格、瀏覽器、通知、搜尋和 macOS 視窗管理。",
|
||
"searchPlaceholder": "搜尋快捷鍵...",
|
||
"searchLabel": "搜尋鍵盤快捷鍵",
|
||
"noResults": "找不到快捷鍵",
|
||
"noResultsHint": "請嘗試其他搜尋詞",
|
||
"cat": {
|
||
"workspaces": "工作區",
|
||
"workspacesBlurb": "工作區位於側邊欄中。每個工作區擁有自己的窗格和 surface。",
|
||
"surfaces": "Surface",
|
||
"surfacesBlurb": "Surface 是窗格內的分頁。",
|
||
"splitPanes": "分割窗格",
|
||
"browser": "瀏覽器",
|
||
"notifications": "通知",
|
||
"find": "搜尋",
|
||
"terminal": "終端機",
|
||
"window": "視窗"
|
||
},
|
||
"sc": {
|
||
"ws-new": "新增工作區",
|
||
"ws-jump-1-8": "跳到工作區 1–8",
|
||
"ws-jump-last": "跳到最後一個工作區",
|
||
"ws-close": "關閉工作區",
|
||
"ws-rename": "重新命名工作區",
|
||
"sf-new": "新增 surface",
|
||
"sf-prev-1": "上一個 surface",
|
||
"sf-prev-2": "上一個 surface",
|
||
"sf-jump-1-8": "跳到 surface 1–8",
|
||
"sf-jump-last": "跳到最後一個 surface",
|
||
"sf-close": "關閉 surface",
|
||
"sp-right": "向右分割",
|
||
"sp-down": "向下分割",
|
||
"sp-focus": "依方向聚焦窗格",
|
||
"sp-browser-right": "向右分割瀏覽器",
|
||
"sp-browser-down": "向下分割瀏覽器",
|
||
"br-open": "開啟瀏覽器 surface",
|
||
"br-addr": "聚焦網址列",
|
||
"br-forward": "前進",
|
||
"br-reload": "重新載入頁面",
|
||
"br-devtools": "開啟開發人員工具",
|
||
"nt-panel": "顯示通知面板",
|
||
"nt-latest": "跳到最新未讀",
|
||
"nt-flash": "觸發閃爍",
|
||
"fd-find": "搜尋",
|
||
"fd-next-prev": "搜尋下一個 / 上一個",
|
||
"fd-hide": "隱藏搜尋列",
|
||
"fd-selection": "使用選取範圍搜尋",
|
||
"tm-clear": "清除捲動回看",
|
||
"tm-copy": "複製(選取範圍)",
|
||
"tm-paste": "貼上",
|
||
"tm-font": "放大 / 縮小字型",
|
||
"tm-reset": "重設字型大小",
|
||
"wn-new": "新增視窗",
|
||
"wn-settings": "設定",
|
||
"wn-reload": "重新載入設定",
|
||
"wn-quit": "結束"
|
||
},
|
||
"metaTitle": "鍵盤快捷鍵"
|
||
},
|
||
"api": {
|
||
"title": "API 參考",
|
||
"metaDescription": "cmux CLI 和 Unix socket API 參考。工作區管理、分割窗格、輸入控制、通知、側邊欄中繼資料、環境變數和偵測方法。",
|
||
"intro": "cmux 提供 CLI 工具和 Unix socket,用於程式化控制。每個指令都可以透過兩種介面使用。",
|
||
"socket": "Socket",
|
||
"buildHeader": "建構",
|
||
"pathHeader": "路徑",
|
||
"release": "正式版",
|
||
"debug": "除錯版",
|
||
"taggedDebug": "標記的除錯版建構",
|
||
"socketOverride": "使用 CMUX_SOCKET_PATH 環境變數覆寫。每次呼叫傳送一個以換行符結尾的 JSON 請求:",
|
||
"socketCallout": "JSON socket 請求必須使用 method 和 params。不支援舊版 v1 JSON 格式,例如 <legacy>'{'\"command\":\"...\"'}'</legacy>。",
|
||
"accessModes": "存取模式",
|
||
"modeHeader": "模式",
|
||
"descriptionHeader": "說明",
|
||
"howToEnableHeader": "如何啟用",
|
||
"offMode": "停用 socket",
|
||
"offEnable": "設定 UI 或 CMUX_SOCKET_MODE=off",
|
||
"cmuxOnlyMode": "只有在 cmux 終端機內啟動的程序才能連線。",
|
||
"cmuxOnlyEnable": "設定 UI 中的預設模式",
|
||
"allowAllMode": "允許任何本機程序連線(不檢查血統關係)。",
|
||
"allowAllEnable": "僅限環境變數覆寫:CMUX_SOCKET_MODE=allowAll",
|
||
"accessCallout": "在共用機器上,請使用「關閉」或「僅限 cmux 程序」模式。",
|
||
"cliOptions": "CLI 選項",
|
||
"flagHeader": "旗標",
|
||
"customSocketPath": "自訂 socket 路徑",
|
||
"outputJson": "以 JSON 格式輸出",
|
||
"targetWindow": "指定特定視窗",
|
||
"targetWorkspace": "指定特定工作區",
|
||
"targetSurface": "指定特定 surface",
|
||
"idFormat": "控制 JSON 輸出中的識別碼格式",
|
||
"workspaceCommands": "工作區指令",
|
||
"listWorkspacesDesc": "列出所有開啟的工作區。",
|
||
"newWorkspaceDesc": "建立新的工作區。",
|
||
"selectWorkspaceDesc": "切換到指定的工作區。",
|
||
"currentWorkspaceDesc": "取得目前活躍的工作區。",
|
||
"closeWorkspaceDesc": "關閉工作區。",
|
||
"splitCommands": "分割指令",
|
||
"newSplitDesc": "建立新的分割窗格。方向:left、right、up、down。",
|
||
"listSurfacesDesc": "列出目前工作區中的所有 surface。",
|
||
"focusSurfaceDesc": "聚焦到指定的 surface。",
|
||
"inputCommands": "輸入指令",
|
||
"sendDesc": "向聚焦的終端機傳送文字輸入。",
|
||
"sendKeyDesc": "傳送按鍵。按鍵:enter、tab、escape、backspace、delete、up、down、left、right。",
|
||
"sendSurfaceDesc": "向指定的 surface 傳送文字。",
|
||
"sendKeySurfaceDesc": "向指定的 surface 傳送按鍵。",
|
||
"notificationCommands": "通知指令",
|
||
"notifyDesc": "傳送通知。",
|
||
"listNotificationsDesc": "列出所有通知。",
|
||
"clearNotificationsDesc": "清除所有通知。",
|
||
"sidebarMetadata": "側邊欄中繼資料指令",
|
||
"sidebarMetadataDesc": "為任何工作區設定側邊欄中的狀態標籤、進度條和日誌項目。適用於建構腳本、CI 整合,以及需要一目了然顯示狀態的 AI 程式碼代理。",
|
||
"setStatusDesc": "設定側邊欄狀態標籤。使用唯一的 key,讓不同的工具可以管理各自的項目。",
|
||
"clearStatusDesc": "依 key 移除側邊欄狀態項目。",
|
||
"listStatusDesc": "列出工作區的所有側邊欄狀態項目。",
|
||
"setProgressDesc": "設定側邊欄中的進度條(0.0 到 1.0)。",
|
||
"clearProgressDesc": "清除側邊欄進度條。",
|
||
"logDesc": "在側邊欄附加日誌項目。級別:info、progress、success、warning、error。",
|
||
"clearLogDesc": "清除所有側邊欄日誌項目。",
|
||
"listLogDesc": "列出側邊欄日誌項目。",
|
||
"sidebarStateDesc": "傾印所有側邊欄中繼資料(cwd、git 分支、連接埠、狀態、進度、日誌)。",
|
||
"utilityCommands": "工具指令",
|
||
"pingDesc": "檢查 cmux 是否正在執行且有回應。",
|
||
"capabilitiesDesc": "列出可用的 socket 方法和目前的存取模式。",
|
||
"identifyDesc": "顯示聚焦中的視窗/工作區/窗格/surface 情境。",
|
||
"envVariables": "環境變數",
|
||
"variableHeader": "變數",
|
||
"socketPathDesc": "覆寫 CLI 和整合所使用的 socket 路徑",
|
||
"socketEnableDesc": "強制啟用/停用 socket(1/0、true/false、on/off)",
|
||
"socketModeDesc": "覆寫存取模式(cmuxOnly、allowAll、off)。也接受 cmux-only/cmux_only 和 allow-all/allow_all",
|
||
"workspaceIdDesc": "自動設定:目前工作區 ID",
|
||
"surfaceIdDesc": "自動設定:目前 surface ID",
|
||
"termProgramDesc": "設定為 ghostty",
|
||
"termDesc": "設定為 xterm-ghostty",
|
||
"envCallout": "舊版的 CMUX_SOCKET_MODE 值 full 和 notifications 仍然接受以保持相容性。",
|
||
"detectingCmux": "偵測 cmux",
|
||
"examples": "範例",
|
||
"pythonClient": "Python 用戶端",
|
||
"shellScript": "Shell 腳本",
|
||
"buildScriptNotification": "帶有通知的建構腳本",
|
||
"metaTitle": "API 參考"
|
||
},
|
||
"notifications": {
|
||
"title": "通知",
|
||
"metaDescription": "從 cmux 中的 AI 代理和腳本傳送桌面通知。CLI、OSC 99/777 跳脫序列,以及 Claude Code hooks 整合。",
|
||
"intro": "cmux 支援桌面通知,讓 AI 代理和腳本在需要注意時提醒你。",
|
||
"lifecycle": "生命週期",
|
||
"received": "已接收:通知出現在面板中,桌面提醒觸發(如果未被抑制)",
|
||
"unread": "未讀:在工作區分頁上顯示徽章",
|
||
"read": "已讀:當你查看該工作區時清除",
|
||
"cleared": "已清除:從面板中移除",
|
||
"suppression": "抑制",
|
||
"suppressionDesc": "在以下情況下,桌面提醒會被抑制:",
|
||
"suppressItem1": "cmux 視窗處於聚焦狀態",
|
||
"suppressItem2": "傳送通知的特定工作區處於活躍狀態",
|
||
"suppressItem3": "通知面板已開啟",
|
||
"notificationPanel": "通知面板",
|
||
"notificationPanelDesc": "按 <openShortcut>⌘⇧I</openShortcut> 開啟通知面板。點擊通知以跳轉到該工作區。按 <jumpShortcut>⌘⇧U</jumpShortcut> 直接跳轉到有最新未讀通知的工作區。",
|
||
"customCommand": "自訂指令",
|
||
"customCommandDesc": "每次排程通知時執行一個 shell 指令。在「設定 > 應用程式 > 通知指令」中設定。指令透過 /bin/sh -c 執行,並提供以下環境變數:",
|
||
"customCommandNote": "此指令獨立於系統聲音選擇器執行。將選擇器設為「無」以僅使用自訂指令,或兩者都保留以同時播放系統聲音和自訂動作。",
|
||
"sending": "傳送通知",
|
||
"cli": "CLI",
|
||
"osc777Title": "OSC 777(簡單)",
|
||
"osc777Desc": "RXVT 協定使用固定格式,包含標題和內文:",
|
||
"osc99Title": "OSC 99(豐富)",
|
||
"osc99Desc": "Kitty 協定支援副標題和通知 ID:",
|
||
"variableHeader": "變數",
|
||
"descriptionHeader": "說明",
|
||
"envTitle": "通知標題(工作區名稱或應用程式名稱)",
|
||
"envSubtitle": "通知副標題",
|
||
"envBody": "通知內文",
|
||
"cmpTitleBody": "標題 + 內文",
|
||
"cmpSubtitle": "副標題",
|
||
"cmpNotificationId": "通知 ID",
|
||
"cmpComplexity": "複雜度",
|
||
"cmpYes": "是",
|
||
"cmpNo": "否",
|
||
"cmpHigher": "較高",
|
||
"cmpLower": "較低",
|
||
"featureHeader": "功能",
|
||
"comparisonCallout": "簡單通知使用 OSC 777。需要副標題或通知 ID 時使用 OSC 99。使用 CLI(cmux notify)是最簡單的整合方式。",
|
||
"claudeCodeHooks": "Claude Code hooks",
|
||
"claudeCodeHooksDesc": "cmux 透過 <link>Claude Code</link> 的 hooks 整合,在任務完成時通知你。",
|
||
"createHookScript": "1. 建立 hook 腳本",
|
||
"configureClaude": "2. 設定 Claude Code",
|
||
"restartNote": "重新啟動 Claude Code 以套用 hooks。",
|
||
"integrationExamples": "整合範例",
|
||
"notifyAfterLong": "長時間指令後通知",
|
||
"python": "Python",
|
||
"nodejs": "Node.js",
|
||
"tmuxPassthrough": "tmux 透傳",
|
||
"tmuxDesc": "如果在 cmux 內使用 tmux,請啟用透傳:",
|
||
"metaTitle": "通知"
|
||
},
|
||
"browserAutomation": {
|
||
"title": "瀏覽器自動化",
|
||
"metaDescription": "cmux 瀏覽器指令參考,涵蓋導覽、DOM 互動、等待、檢查、JavaScript 執行、分頁、對話框、框架、下載和瀏覽器狀態。",
|
||
"intro": "cmux browser 指令群組提供針對 cmux 瀏覽器 surface 的瀏覽器自動化。使用它來導覽、與 DOM 元素互動、檢查頁面狀態、執行 JavaScript 和管理瀏覽器工作階段資料。",
|
||
"commandIndex": "指令索引",
|
||
"categoryHeader": "類別",
|
||
"subcommandsHeader": "子指令",
|
||
"navAndTargeting": "導覽和目標定位",
|
||
"waiting": "等待",
|
||
"domInteraction": "DOM 互動",
|
||
"inspection": "檢查",
|
||
"jsAndInjection": "JavaScript 和注入",
|
||
"framesDialogsDownloads": "框架、對話框、下載",
|
||
"stateAndSession": "狀態和工作階段資料",
|
||
"tabsAndLogs": "分頁和日誌",
|
||
"targetingSurface": "指定瀏覽器 surface",
|
||
"targetingDesc": "大多數子指令需要指定目標 surface。你可以用位置參數或 --surface 來傳遞。",
|
||
"navigation": "導覽",
|
||
"waitingSection": "等待",
|
||
"waitingDesc": "使用 wait 來阻塞直到選擇器、文字、URL 片段、載入狀態或 JavaScript 條件滿足。",
|
||
"domSection": "DOM 互動",
|
||
"domDesc": "變更操作支援 --snapshot-after,用於腳本中的快速驗證。",
|
||
"inspectionSection": "檢查",
|
||
"inspectionDesc": "腳本使用結構化 getter,人工審查使用快照/截圖。",
|
||
"jsSection": "JavaScript 執行和注入",
|
||
"stateSection": "狀態",
|
||
"stateDesc": "工作階段資料指令涵蓋 cookie、本機/工作階段儲存空間,以及完整的瀏覽器狀態快照。",
|
||
"tabsSection": "分頁",
|
||
"tabsDesc": "瀏覽器分頁操作對應到活躍瀏覽器分頁群組中的瀏覽器 surface。",
|
||
"consoleSection": "主控台和錯誤",
|
||
"dialogsSection": "對話框",
|
||
"framesSection": "框架",
|
||
"downloadsSection": "下載",
|
||
"commonPatterns": "常見模式",
|
||
"patternNavigate": "導覽、等待、檢查",
|
||
"patternForm": "填寫表單並驗證成功文字",
|
||
"patternDebug": "失敗時擷取除錯資訊",
|
||
"patternSession": "保存和還原瀏覽器工作階段",
|
||
"metaTitle": "瀏覽器自動化"
|
||
},
|
||
"changelog": {
|
||
"title": "更新日誌",
|
||
"metaDescription": "cmux 版本說明和版本歷史。原生 macOS 終端機的新功能、錯誤修復和變更。",
|
||
"metaTitle": "更新日誌"
|
||
},
|
||
"navItems": {
|
||
"gettingStarted": "入門指南",
|
||
"concepts": "概念",
|
||
"configuration": "設定",
|
||
"keyboardShortcuts": "鍵盤快捷鍵",
|
||
"apiReference": "API 參考",
|
||
"browserAutomation": "瀏覽器自動化",
|
||
"notifications": "通知",
|
||
"changelog": "更新日誌"
|
||
}
|
||
},
|
||
"legal": {
|
||
"privacyPolicy": "隱私權政策",
|
||
"termsOfService": "服務條款",
|
||
"eula": "EULA"
|
||
},
|
||
"wallOfLove": {
|
||
"title": "使用者好評",
|
||
"description": "大家對 cmux 的評價。"
|
||
},
|
||
"testimonials": {
|
||
"mitchellh": "又一個基於 libghostty 的專案,這次是一個帶垂直分頁、更好的組織/通知、內建可編寫腳本瀏覽器的 macOS 終端機,專門針對大量使用終端機 agent 工作流程的使用者。",
|
||
"schrockn": "這正是我一直在找的產品。用了兩小時就愛上了。",
|
||
"egrefen": "整個週末都在用,太棒了。",
|
||
"max4c": "過去兩週最喜歡的工具",
|
||
"asaza": "cmux 看起來太棒了,也許終於到了告別 VSCode 的時候",
|
||
"johnthedebs": "看起來真的很厲害。喜歡這些想法:可程式化、分層 UI、帶 API 的瀏覽器。期待試用。也想說非常感謝 Mitchell Hashimoto 創建了 libghostty,作為終端機使用者感覺現在是個令人興奮的時代。",
|
||
"joeriddles": "終端機裡的垂直分頁!之前從沒想過。我用 Firefox 垂直分頁用得很開心。",
|
||
"dchu17": "試了一下,很直覺。做得好!",
|
||
"afruth": "很喜歡,過去一天在三個並行專案上用了,每個都有多個 worktree。搭配 lazygit 和 yazi/nvim,比以前高效多了,不用在多個 Ghostty/iTerm 執行個體之間切換。比 tmux 也更自然。",
|
||
"northprint": "試了 cmux,確實不錯",
|
||
"indykish": "cmux 蠻好用的。",
|
||
"kataring": "換到 cmux.dev 了",
|
||
"scottw": "非常有用的發現。強烈推薦。",
|
||
"johnblythe": "週末用了,很喜歡。一直在等這樣的工具。",
|
||
"bchris91": "這正是我想要的。做得太好了,謝謝!",
|
||
"connorelsea": "用了一週,非常棒。每個進行中的任務一個垂直分頁。裡面一邊是 Claude,另一邊是瀏覽器看 PR 和資料,在任務之間切換保持有序。搭配 skill 讓 Claude 遞迴監控 CI 等等。感覺開悟了。",
|
||
"tonkotsuboy": "年初從 Warp 換到 Ghostty,現在又換到了 cmux。垂直分頁很方便,Claude Code 任務完成時收到通知很實用。基於 Ghostty 所以依然飛快。之前在 Ghostty 裡設定的分支顯示和補全也都能用。"
|
||
},
|
||
"languageSwitcher": {
|
||
"label": "語言"
|
||
}
|
||
}
|