diff --git a/README-zh_hant.md b/README-zh_hk.md
similarity index 96%
rename from README-zh_hant.md
rename to README-zh_hk.md
index 311a61e..781f66f 100644
--- a/README-zh_hant.md
+++ b/README-zh_hk.md
@@ -1,4 +1,4 @@
-[English](./README.md) | [简体中文](./README-zh_cn.md) | 繁體中文 | [Français](./README-fr.md)
+[English](./README.md) | [Français](./README-fr.md) | [简体中文](./README-zh_cn.md) | 繁體中文
- **2026.05.02**: 新增 **音訊軌頻譜可視化**。音訊區域現在會在時間網格中顯示即時頻譜疊加層。另新增 **Piano Roll hybrid mode**:當您在 MIDI 區域中開啟鋼琴卷簾時,可將相鄰音訊區域的頻譜作為參考層顯示,從而參照音訊形狀編輯 MIDI 音符。新增 **鋼琴卷簾縮放**,並保留目前視口位置,使畫面始終錨定在目前播放頭附近。還新增 **區域微調位置**,可用小步長推動區域以實現精確擺放;同時新增跨元件的播放頭捲動同步,使主網格與鋼琴卷簾在播放期間保持連動。
-- **2026.04.29**: 在 K.G.One Music Generator 面板中新增 **Remix** 和 **Repaint**(由 ACE-Step 1.5 驅動)。**Remix** 可讓您用新風格重製現有音訊區域,您只需選中音訊區域、描述目標風格,並可選填寫新歌詞,ACE-Step 就會按提示重新演繹歌曲的配器與氛圍。**Repaint** 可對歌曲中特定片段進行局部再生成,您可以先在時間線上設定 loop 範圍作為重繪視窗,再描述該片段應有的聲音效果,其餘部分將保持不變。兩項功能都支援與其他 K.G.One 分頁相同的匯入流程:可在內建播放器中預覽、拖曳到音軌上,或點擊 **Import Aligned to Source**,自動將結果放置到原始區域下方的新音軌中。
+- **2026.04.29**: 在 K.G.One Music Generator 面板中新增 **Remix** 和 **Repaint**(由 ACE-Step 1.5 驅動)。**Remix** 可讓您用新風格重製現有音訊區域,您只需選取音訊區域、描述目標風格,並可選填寫新歌詞,ACE-Step 就會按提示重新演繹歌曲的配器與氛圍。**Repaint** 可對歌曲中特定片段進行局部再生成,您可以先在時間線上設定 loop 範圍作為重繪視窗,再描述該片段應有的聲音效果,其餘部分將保持不變。兩項功能都支援與其他 K.G.One 分頁相同的匯入流程:可在內建播放器中預覽、拖曳到音軌上,或點擊 **Import Aligned to Source**,自動將結果放置到原始區域下方的新音軌中。
- **2026.04.24**: 新增 [**K.G.One Music Studio**](https://github.com/KGAudioLab/K.G.One) 整合。當 K.G.Studio 連線到本地 K.G.One 伺服器後,**K.G.One Music Generator** 面板(工具列中的魔杖按鈕 ✦)即可啟用,其中包含三項 AI 驅動工具:**Full Song Generation**(由 ACE-Step 1.5 驅動,可根據文字提示生成整首歌曲)、**Clip Generation**(由 Foundation-1 驅動,可根據文字生成樂器片段與 MIDI loop),以及 **Stem Separation**(由 python-audio-separator 驅動,可將任意音訊拆分為人聲、伴奏等多個 stem)。生成的音訊和 MIDI 均可即時預覽,並可直接拖曳到您的音軌中。K.G.One 完全執行在您自己的機器上(Windows/Linux,需要 CUDA GPU);詳細設定說明請參閱 [K.G.One 倉庫](https://github.com/KGAudioLab/K.G.One)。
- **2026.04.11**: 將專案儲存從 IndexedDB 遷移到 OPFS(Origin Private File System),並採用基於資料夾的結構,以更好地處理媒體檔案。新增音訊軌支援,包括 WAV/MP3 匯入、回放、循環,以及非破壞性區域裁剪。另新增基於離線渲染的 WAV/MP3 匯出功能。
- **2026.04.05**: 將 AI agent 從基於 XML 的工具呼叫遷移到原生 OpenAI SDK function calling,以提升可靠性與相容性。另新增 GPT-5.4 系列等 LLM 模型選項。
@@ -133,7 +133,7 @@ K.G.Studio 可以藉助 WebGPU 加速,在瀏覽器中直接執行 **Gemma 4 E4
- 使用鋼琴卷簾工具列右上角的 Snapping 功能可將編輯量化到網格。
### 使用 K.G.Studio 音樂創作助手
- - 選中您希望助手處理的音樂區域,在聊天框中輸入提示詞;按 Enter 傳送,按 Shift+Enter 插入換行。
+ - 選取您希望助手處理的音樂區域,在聊天框中輸入提示詞;按 Enter 傳送,按 Shift+Enter 插入換行。
- agent 會自動處理您的請求,並呼叫工具,在所選區域範圍內執行修改。某些任務可能需要一輪或多輪對話才能完成。
- 請注意,AI 也可能出錯,因此您應始終檢查結果,並在必要時自行調整。您也可以透過復原/重做回退修改。
- 點擊「+」按鈕或輸入 `/clear` 指令可清空聊天歷史。
@@ -146,16 +146,16 @@ K.G.Studio 可以藉助 WebGPU 加速,在瀏覽器中直接執行 **Gemma 4 E4
- **K.G.Studio 音樂創作助手**:與由 LLM 驅動的 AI agent 進行對話;它會自動執行工具,對您所選區域內的音樂內容進行編輯。
- **瀏覽器內嵌 LLM,無需 API Key**:透過 WebGPU(LiteRT-LM)在瀏覽器中直接執行 **Gemma 4 E4B**。無 API 呼叫、無費用、資料不離開您的裝置。模型只需下載一次,隨後會快取在本地。
- **瀏覽器內嵌分軌,無需伺服器**:使用 **UVR-MDX-NET-Inst_HQ_3**(2-stem:Vocals / Instrumental)或 **Demucs htdemucs_4s**(4-stem:Vocals / Drums / Bass / Others)將任意音訊區域拆分為 stems。兩者都完全在瀏覽器中透過 ONNX Runtime WebGPU 執行,無需 K.G.One 伺服器。
-- **音訊和弦檢測**:為音訊區域開啟鋼琴卷簾後執行 **Detect Chords**,即可透過零依賴 FFT 流水線自動分析錄音並填充全域 Chord Track,同時支援靈敏度、穩定性和七和弦檢測等設定。
-- **帶自動對齊拍點的速度檢測**:在鋼琴卷簾工具列執行 **Detect Tempo**,即可分析音訊區域的 BPM,並可選擇自動重新對齊專案的 Tempo Track。
+- **音訊和弦檢測**:為音訊區域開啟 Piano Roll 後執行 **Detect Chords**,即可透過零依賴 FFT 流水線自動分析錄音並填充全域 Chord Track,同時支援靈敏度、穩定性和七和弦檢測等設定。
+- **帶自動對齊拍點的速度檢測**:在 Piano Roll 工具列執行 **Detect Tempo**,即可分析音訊區域的 BPM,並可選擇自動重新對齊專案的 Tempo Track。
- **全域軌系統**:四條持久存在的全域軌 **Marker**、**Tempo**、**Key Signature** 和 **Chord** 共同提供專案級結構,所有功能(播放時序、和弦檢測、五線譜顯示)都會參考它們。
- **K.G.One Music Studio 整合**:連接本地 [K.G.One](https://github.com/KGAudioLab/K.G.One) 伺服器後,可解鎖 GPU 加速的 **Full Song Generation**(ACE-Step 1.5)、**Clip & MIDI Loop Generation**(Foundation-1)以及更多 **Stem Separation** 模型。
- **多種 LLM 提供方**:支援 OpenAI、Claude / Gemini(透過 OpenRouter)、OpenAI 相容服務(Ollama、vLLM 等),或內建的本地瀏覽器 LLM,無需 Key。
- **音軌與區域編輯**:支援新增/重排音軌、建立/移動/縮放區域、套索多選、批次移動/縮放、合併與拆分區域,以及完整復原/重做。
-- **鋼琴卷簾**:支援音符、pitch bend 和 MIDI CC 自動化軌;支援基於 VexFlow 的五線譜視圖;支援音訊到 MIDI 參考用途的頻譜疊加層。
+- **Piano Roll**:支援音符、pitch bend 和 MIDI CC 自動化軌;支援基於 VexFlow 的五線譜視圖;支援音訊到 MIDI 參考用途的頻譜疊加層。
- **真實樂器**:基於 Tone.js 的 sampler,搭配高品質 FluidR3 soundfonts。您還可以直接從麥克風錄製到音訊軌。
- **智慧和弦助手**:基於功能和聲(T/S/D)提供即時和弦建議,並支援可視預覽與一鍵建立和弦。
-- **兼顧持久化與隱私**:專案和設定完全保存在您的瀏覽器中(OPFS / IndexedDB)。專案本身不依賴第一方伺服器。
+- **兼顧持久化與隱私**:專案和設定完全儲存在您的瀏覽器中(OPFS / IndexedDB)。專案本身不依賴第一方伺服器。
如需更深入的技術概覽,請參閱 [overview.md](./docs/technical/overview.md)。
@@ -193,7 +193,7 @@ K.G.Studio 會從 `./public/config.json` 載入預設設定(內部也提供回
### 連線性與隱私
- K.G.Studio 完全在客戶端執行。執行應用不需要任何第一方伺服器。
-- 專案和音訊檔案保存在瀏覽器的 OPFS(Origin Private File System)中;設定保存在 IndexedDB 中。所有資料都留在您的裝置上。
+- 專案和音訊檔案儲存在瀏覽器的 OPFS(Origin Private File System)中;設定儲存在 IndexedDB 中。所有資料都留在您的裝置上。
- 網路存取僅用於:
- 從設定的 soundfont CDN 下載樂器採樣
- 與您選擇的 LLM 提供方通訊(例如 OpenAI 或 OpenAI 相容服務)
@@ -261,7 +261,7 @@ K.G.Studio 會從 `./public/config.json` 載入預設設定(內部也提供回
- 請先按照前文說明完成 LLM 提供方設定。
- 您可以在右側找到 K.G.Studio 音樂創作助手聊天框。如果目前未顯示,可點擊工具列中的 Chat 🗨️ 按鈕開啟。
-- 選中您希望助手處理的區域,在聊天框中輸入提示詞;按 Enter 傳送,按 Shift+Enter 插入換行。
+- 選取您希望助手處理的區域,在聊天框中輸入提示詞;按 Enter 傳送,按 Shift+Enter 插入換行。
- agent 會自動處理您的請求,並呼叫工具,在所選區域範圍內執行修改。某些任務可能需要一輪或多輪對話才能完成。
- 請注意,AI 也可能出錯,因此您應始終檢查結果,並在必要時自行調整。您也可以透過復原/重做回退修改。
- 點擊「+」按鈕或輸入 `/clear` 指令可清空聊天歷史。
@@ -302,11 +302,11 @@ OpenRouter 是一個統一接入平台,可讓您存取來自多個提供方的
出於安全考量,當您從非本地主機環境使用 K.G.Studio 時,API Key 預設不會持久化到 IndexedDB 中;這表示您每次啟動 K.G.Studio 時都需要重新輸入。如需在非本地主機環境中啟用持久化,請在設定中開啟「Persist API Keys on Non-Localhost」(不建議在共享或生產環境中啟用)。
-K.G.Studio 不提供也不託管上述任何模型,也不隸屬於任何模型提供方。所有資料都保存在您的本地裝置中;K.G.Studio 不會蒐集或傳輸您的資料。若您向第三方模型提供方傳送任何資料,相關責任由您自行承擔。
+K.G.Studio 不提供也不託管上述任何模型,也不隸屬於任何模型提供方。所有資料都儲存在您的本地裝置中;K.G.Studio 不會蒐集或傳輸您的資料。若您向第三方模型提供方傳送任何資料,相關責任由您自行承擔。
## K.G.One Music Generator
-> **需要 [K.G.One Music Studio](https://github.com/KGAudioLab/K.G.One) 整合。** 只有當 K.G.Studio 連線到正在執行的 K.G.One 伺服器時,K.G.One Music Generator 面板才會可用。設定說明請參閱 [K.G.One 倉庫](https://github.com/KGAudioLab/K.G.One)。
+> **需要 [K.G.One Music Studio](https://github.com/KGAudioLab/K.G.One) 整合。** 只有當 K.G.Studio 連線到正在執行的 K.G.One 伺服器時,K.G.One Music Generator 面板才會可用。設定說明請參閱 [K.G.One 儲存庫](https://github.com/KGAudioLab/K.G.One)。
**K.G.One Music Generator** 面板提供三項經 GPU 加速的 AI 工具,用於音樂生成與音訊處理。點擊工具列中的 **✦(魔杖)** 按鈕即可開啟。該面板與 AI Assistant 聊天框互斥,開啟其中一個時,另一個會自動關閉。
@@ -349,7 +349,7 @@ K.G.Studio 支援 **兩種模式** 的分軌:
- **Vocal and Instrument (Medium Accuracy)**(`UVR-MDX-NET-Inst_HQ_3`,約 64 MB)— 雙 stem 分離(Vocals / Instrumental)。由 [UVR-MDX-NET](https://github.com/nomadkaraoke/python-audio-separator) 驅動。
- **Vocal, Drums, Bass, and Others**(`htdemucs_4s`,約 172 MB)— 四 stem 分離(Vocals / Drums / Bass / Others)。由 [Demucs](https://github.com/facebookresearch/demucs) 驅動。
-開啟 **Music Generator** 面板(工具列中的 ✦ 按鈕),選擇模型,先點擊一次 **Download Selected Model**,然後點擊 **Separate Stems**,所有處理都會在您的瀏覽器中本地完成。
+開啟 **Music Generator** 面板(工具列中的 ✦ 按鈕),選擇模型,先點擊一次 **Download Selected Model**,然後點擊 **Separate Stems**,所有處理都會在您的瀏覽器中本機完成。
**要求:** 需要支援 WebGPU 的瀏覽器(Chrome 113+ 或 Edge 113+),並執行在安全上下文中(HTTPS 或 localhost)。若可用,會優先使用 WebGPU 加速;否則會回退到 CPU(處理期間可能降低頁面回應性)。推薦硬體為至少 8 GB 顯存的 GPU,或至少 16 GB 統一記憶體的系統。
@@ -363,7 +363,7 @@ K.G.Studio 支援 **兩種模式** 的分軌:
#### 使用方式(兩種模式通用)
-- 在開啟此分頁之前,請先在時間線上**選中一個音訊區域**。**Separator** 分頁頂部會顯示目前所選區域及其音軌名稱。僅支援音訊區域,不支援分離 MIDI 區域。
+- 在開啟此分頁之前,請先在時間線上**選取一個音訊區域**。**Separator** 分頁頂部會顯示目前所選區域及其音軌名稱。僅支援音訊區域,不支援分離 MIDI 區域。
- 點擊 **Separate Stems**。如果目前所選區域帶有 clip start offset 或已被裁剪,系統會先自動按該區域範圍切出對應音訊,再進行處理。
- 處理完成後,每個 stem 都會以帶標籤的預覽播放器顯示,並附帶拖曳手把。您可以在匯入前分別試聽每個 stem。
- **匯入 stems:**
@@ -442,7 +442,7 @@ K.G.Studio 是一個處於早期開發階段的實驗性專案。我們正在探
該專案關注 AI 與人類協作如何增強音樂創作過程,從智慧和聲建議到自動化編輯任務都在探索範圍內。作為實驗平台,專案會頻繁變化,功能將持續演進,並且在我們推進 AI 輔助音樂製作邊界的過程中,偶爾出現不穩定情況也是可以預期的。
-K.G.Studio 不提供也不託管任何 LLM 模型,也不隸屬於任何模型提供方。所有資料都保存在您的本地裝置中;K.G.Studio 不會蒐集或傳輸您的資料。若您向第三方模型提供方傳送任何資料,相關責任由您自行承擔。
+K.G.Studio 不提供也不託管任何 LLM 模型,也不隸屬於任何模型提供方。所有資料都儲存在您的本地裝置中;K.G.Studio 不會蒐集或傳輸您的資料。若您向第三方模型提供方傳送任何資料,相關責任由您自行承擔。
## 授權條款
diff --git a/README.md b/README.md
index 4ab88e7..683763f 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-English | [简体中文](./README-zh_cn.md) | [繁體中文](./README-zh_hant.md) | [Français](./README-fr.md)
+English | [Français](./README-fr.md) | [简体中文](./README-zh_cn.md) | [繁體中文](./README-zh_hk.md)

diff --git a/public/chat/help-zh_hk.md b/public/chat/help-zh_hk.md
index 426e1ad..1cdbdf9 100644
--- a/public/chat/help-zh_hk.md
+++ b/public/chat/help-zh_hk.md
@@ -2,20 +2,20 @@
歡迎使用 **K.G.Studio 音樂創作助手**。這是您的 AI 音樂創作與編曲助手,可以幫助您構思、編排和修改音樂內容。
-您可以選擇使用 **內置本地瀏覽器 LLM**(無需 API Key),也可以配置外部 LLM 提供方。下面是常用的入門方式。
+您可以選擇使用 **內建本地瀏覽器 LLM**(無需 API Key),也可以設定外部 LLM 提供方。下面是常用的入門方式。
---
### 使用本地 LLM(瀏覽器)——無需 API Key
-K.G.Studio 可以通過 WebGPU 在瀏覽器中直接運行 **Gemma 4 E4B**。不會產生外部 API 調用費用,數據也不會離開您的設備。
+K.G.Studio 可以通過 WebGPU 在瀏覽器中直接運行 **Gemma 4 E4B**。不會產生外部 API 呼叫費用,資料也不會離開您的裝置。
-1. 進入 **設置 ⚙️ → 通用 → LLM 提供方**,選擇 **本地 LLM(瀏覽器)**(默認選項)。
-2. 第一次打開聊天時會自動下載模型(約 2.8 GB),後續會緩存在本地瀏覽器中。
-3. 可選設置 **上下文長度**(32k / 64k / 128k tokens);越大越佔顯存。
+1. 進入 **設定 ⚙️ → 通用 → LLM 提供方**,選擇 **本地 LLM(瀏覽器)**(預設選項)。
+2. 第一次開啟聊天時會自動下載模型(約 2.8 GB),後續會快取在本地瀏覽器中。
+3. 可選設定 **上下文長度**(32k / 64k / 128k tokens);越大越佔顯存。
4. 現在就可以開始聊天,無需 Key、帳號或持續聯網。
-**要求:** Chrome 113+ 或 Edge 113+,安全上下文(HTTPS 或 localhost),以及至少 8 GB 顯存的 GPU 或至少 16 GB 統一內存的系統。
+**要求:** Chrome 113+ 或 Edge 113+,安全上下文(HTTPS 或 localhost),以及至少 8 GB 顯存的 GPU 或至少 16 GB 統一記憶體的系統。
> 注意:本地模型效果無法與 GPT 或 Claude 這類商業模型完全相比。複雜任務通常更適合外部提供方。
@@ -23,14 +23,14 @@ K.G.Studio 可以通過 WebGPU 在瀏覽器中直接運行 **Gemma 4 E4B**。不
### 配置外部 LLM 提供方
-進入 **設置 ⚙️ → 通用 → LLM 提供方**。根據所選提供方,您需要填寫對應的 API Key,以及在需要時填寫 Base URL(例如 Ollama、OpenRouter 等 OpenAI 兼容服務)。
+進入 **設定 ⚙️ → 通用 → LLM 提供方**。根據所選提供方,您需要填寫對應的 API Key,以及在需要時填寫 Base URL(例如 Ollama、OpenRouter 等 OpenAI 兼容服務)。
---
### 使用 OpenAI GPT 系列
-1. 在 [**OpenAI**](https://platform.openai.com/account/api-keys) 獲取 API Key。您可能需要先注冊帳號並添加支付方式。
-2. 在 **設置 ⚙️ → 通用 → LLM 提供方** 中選擇 **OpenAI**。
+1. 在 [**OpenAI**](https://platform.openai.com/account/api-keys) 取得 API Key。您可能需要先註冊帳號並新增付款方式。
+2. 在 **設定 ⚙️ → 通用 → LLM 提供方** 中選擇 **OpenAI**。
3. 在 **OpenAI → 密鑰** 中填入 API Key。
4. 在 **OpenAI → 模型** 下拉中選擇模型。若希望在成本和效果之間取得平衡,推薦 `gpt-5.4-mini`。
5. 可選:在 **OpenAI → Flex 模式** 中啟用 Flex Mode。它可能降低成本,但也可能帶來更高延遲或更多服務端錯誤。
@@ -41,18 +41,18 @@ K.G.Studio 可以通過 WebGPU 在瀏覽器中直接運行 **Gemma 4 E4B**。不
OpenRouter 提供統一接口,可訪問多個語言模型提供方的模型,其中也包含免費選項,適合比較不同模型表現。
-1. 在 [**OpenRouter**](https://openrouter.ai/keys) 獲取 API Key。需要注冊;使用付費模型時可能還需要綁定支付方式。
-2. 在 **設置 ⚙️ → 通用 → LLM 提供方** 中選擇 **OpenAI 兼容服務**。
+1. 在 [**OpenRouter**](https://openrouter.ai/keys) 取得 API Key。需要註冊;使用付費模型時可能還需要綁定付款方式。
+2. 在 **設定 ⚙️ → 通用 → LLM 提供方** 中選擇 **OpenAI 兼容服務**。
3. 在 **OpenAI 兼容服務 → 密鑰** 中填入 API Key。
4. 在 [**OpenRouter Models Page**](https://openrouter.ai/models) 瀏覽可用模型,並可使用 "Prompt Pricing" 過濾免費模型。
- **注意:** 各模型提供方的數據保留與隱私策略可能不同,使用前請自行查看。
+ **注意:** 各模型提供方的資料保留與隱私策略可能不同,使用前請自行查看。
5. 在 **OpenAI 兼容服務 → 模型** 中填入模型名。推薦系列包括:
- `Anthropic: Claude Sonnet 4.6`(`anthropic/claude-sonnet-4.6`)—— Claude 系列裡質量和成本平衡較好
- `Qwen: Qwen3.5-35B-A3B`(`qwen/qwen3.5-35b-a3b`)—— 推薦開源模型
- `Qwen: Qwen3-Next-80B-A3B`(免費:`qwen/qwen3-next-80b-a3b-instruct:free`)—— 推薦免費模型
- `OpenAI: GPT-OSS 120B`(免費:`openai/gpt-oss-120b:free`)—— 推薦免費模型
- 注意:免費模型會經常變化,請以 OpenRouter 模型頁中的 **Prompt Pricing** 過濾結果為準
- - 注意:免費模型提供方可能會收集您的數據,使用前請先查看模型頁面說明
+ - 注意:免費模型提供方可能會收集您的資料,使用前請先查看模型頁面說明
6. 在 **OpenAI 兼容服務 → 基礎 URL** 中填寫 `https://openrouter.ai/api/v1`。
### 基本 DAW 操作
@@ -60,67 +60,67 @@ OpenRouter 提供統一接口,可訪問多個語言模型提供方的模型,
聊天命令:`/clear`、`/welcome`、`/help`、`/hotkeys`
- 音軌
- - 在軌道信息面板中添加、重命名和重排音軌。
- - 通過樂器按鈕(鋼琴圖標)切換樂器;可調整 Solo(S)、Mute(M)和 Volume。
- - 通過音軌設置菜單刪除音軌(位於樂器按鈕右側)。
- - **音頻錄音**:點擊工具欄裡的 Rec 按鈕,可直接從麥克風錄到音頻軌。
+ - 在軌道資訊面板中新增、重命名和重排音軌。
+ - 通過樂器按鈕(鋼琴圖示)切換樂器;可調整 Solo(S)、Mute(M)和 Volume。
+ - 通過音軌設定選單刪除音軌(位於樂器按鈕右側)。
+ - **音訊錄音**:點擊工具列裡的 Rec 按鈕,可直接從麥克風錄到音訊軌。
- 區域
- - 創建區域:使用 Pointer 工具時可雙擊,或按住 Ctrl/Cmd 再點擊;使用 Pencil 工具時單擊即可。
+ - 建立區域:使用 Pointer 工具時可雙擊,或按住 Ctrl/Cmd 再點擊;使用 Pencil 工具時單擊即可。
- 移動/縮放:拖動區域主體可移動,拖動邊緣可調整長度。
- - 通過區域左上角的小鉛筆打開鋼琴卷簾窗口。
+ - 通過區域左上角的小鉛筆開啟 Piano Roll。
-- 鋼琴卷簾(MIDI 音符)
+- Piano Roll(MIDI 音符)
- 工具:Select 與 Pencil。
- - 創建音符:在 Select 模式下雙擊或 Ctrl/Cmd+點擊;在 Pencil 模式下單擊。
- - 選擇音符:單擊;Shift+單擊多選;拖拽框選。
+ - 建立音符:在 Select 模式下雙擊或 Ctrl/Cmd+點擊;在 Pencil 模式下單擊。
+ - 選取音符:單擊;Shift+單擊多選;拖曳框選。
- 移動/縮放:拖動音符主體可移動已選音符;拖動邊緣可調整長度。
- - **五線譜視圖**:可在鋼琴卷簾工具欄中切換鋼琴卷簾與五線譜視圖。支持自動譜號、調號顯示、連音線和符桿分組。啟用 **Track Scope** 後會連續顯示整條 MIDI 音軌上的內容。
+ - **五線譜視圖**:可在 Piano Roll 工具列中切換 Piano Roll 與五線譜視圖。支援自動譜號、調號顯示、連音線和符槓分組。啟用 **Track Scope** 後會連續顯示整條 MIDI 音軌上的內容。
- **自動化軌道**:可在下方自動化區域繪製和編輯 Pitch Bend 與 MIDI CC 曲線(Modulation、Breath、Volume、Expression、Sustain)。
- - **頻譜模式**:可在鋼琴卷簾中查看音頻區域的頻譜,作為 MIDI 編輯參考層。
+ - **頻譜模式**:可在 Piano Roll 中查看音訊區域的頻譜,作為 MIDI 編輯參考層。
- **事件列表面板**:提供 Notes / Pitch Bend / Controller 標籤頁,用於查看並內聯編輯當前 MIDI 區域中的事件。
- - 可通過 X 或 ESC 關閉鋼琴卷簾窗口。
+ - 可通過 X 或 ESC 關閉 Piano Roll 視窗。
- 智能和弦助手
- - 在鋼琴卷簾工具欄中使用 `⊘`、`T`、`S`、`D` 啟用和弦指導。
+ - 在 Piano Roll 工具列中使用 `⊘`、`T`、`S`、`D` 啟用和弦指導。
- 和弦候選會根據播放頭當前位置的有效調號來推斷:大調使用 Ionian,小調使用 Aeolian。
- - 將鼠標懸停在任意琴鍵上時,會以紅色高亮顯示上下文相關的和弦建議。
+ - 將滑鼠懸停在任意琴鍵上時,會以紅色高亮顯示上下文相關的和弦建議。
- 按 `g` 循環切換和弦指導模式,按 `Tab` 切換到下一個候選和弦,按 `Shift+Tab` 切換到上一個。
- - 雙擊(或 Ctrl/Cmd+點擊)高亮和弦可一次性創建整組音符。
+ - 雙擊(或 Ctrl/Cmd+點擊)高亮和弦可一次性建立整組音符。
- 和弦長度會自動匹配您最近編輯的音符長度,以保持節奏一致。
-- 全局軌系統
+- 全域軌系統
- 時間線上方固定有四條軌道:**Marker**、**Tempo**、**Key Signature**、**Chord**。
- - 創建全局區域:在全局軌中雙擊或 Ctrl/Cmd+點擊;拖動可移動,拖動邊緣可調整長度。
+ - 建立全域區域:在全域軌中雙擊或 Ctrl/Cmd+點擊;拖動可移動,拖動邊緣可調整長度。
- 這些軌道會影響播放時序、和弦指導、五線譜調號顯示,以及和弦檢測結果。
-- 音頻分析功能
- - **Detect Chords**:在音頻區域打開鋼琴卷簾窗口後,點擊 **...** → **Detect Chords**,即可自動分析並把結果寫入全局 Chord Track。可配置靈敏度、穩定性和七和弦檢測。
- - **Detect Tempo**:在音頻區域打開鋼琴卷簾窗口後,點擊 **...** → **Detect Tempo**,即可分析 BPM,並可選擇自動對齊項目中的 Tempo Track。
+- 音訊分析功能
+ - **Detect Chords**:在音訊區域開啟 Piano Roll 後,點擊 **...** → **Detect Chords**,即可自動分析並把結果寫入全域 Chord Track。可設定靈敏度、穩定性和七和弦檢測。
+ - **Detect Tempo**:在音訊區域開啟 Piano Roll 後,點擊 **...** → **Detect Tempo**,即可分析 BPM,並可選擇自動對齊專案中的 Tempo Track。
- K.G.One 音樂生成器
- - 點擊工具欄中的 **✦**(魔杖)按鈕打開生成器面板。
- - **Full Song Generation**:根據文本描述和可選歌詞生成整首歌曲(需要 K.G.One 服務器)。
- - **Clip Generation**:根據文本提示生成短音頻片段和 MIDI loop(需要 K.G.One 服務器)。
- - **Stem Separation(瀏覽器)**:可完全在瀏覽器中把任意音頻區域分離成 stems,無需服務器。支持兩種模型:**UVR-MDX-NET-Inst_HQ_3**(2 stem:Vocals / Instrumental,約 64 MB)和 **Demucs htdemucs_4s**(4 stem:Vocals / Drums / Bass / Others,約 172 MB)。在生成器面板中下載模型後,點擊 **Separate Stems** 即可。需要 WebGPU(Chrome 113+ / Edge 113+)。
+ - 點擊工具列中的 **✦**(魔杖)按鈕開啟生成器面板。
+ - **Full Song Generation**:根據文本描述和可選歌詞生成整首歌曲(需要 K.G.One 伺服器)。
+ - **Clip Generation**:根據文本提示生成短音訊片段和 MIDI loop(需要 K.G.One 伺服器)。
+ - **Stem Separation(瀏覽器)**:可完全在瀏覽器中把任意音訊區域分離成 stems,無需伺服器。支援兩種模型:**UVR-MDX-NET-Inst_HQ_3**(2 stem:Vocals / Instrumental,約 64 MB)和 **Demucs htdemucs_4s**(4 stem:Vocals / Drums / Bass / Others,約 172 MB)。在生成器面板中下載模型後,點擊 **Separate Stems** 即可。需要 WebGPU(Chrome 113+ / Edge 113+)。
- 吸附與量化
- - 在右上角的 NO SNAP 菜單中設置吸附。
+ - 在右上角的 NO SNAP 選單中設定吸附。
- 使用 Qua. Pos.(起始)和 Qua. Len.(長度)進行量化。
- 播放與播放頭
- - 工具欄可回到開頭,並執行 Play/Pause。
- - 在主時間網格點擊小節編號可設置播放頭;在鋼琴卷簾中點擊頂部時間軸也可設置,並遵守當前吸附設置。
- - BPM、拍號和調號都可以通過工具欄中的數值直接調整。
+ - 工具列可回到開頭,並執行 Play/Pause。
+ - 在主時間網格點擊小節編號可設定播放頭;在 Piano Roll 中點擊頂部時間軸也可設定,並遵守目前吸附設定。
+ - BPM、拍號和調號都可以通過工具列中的數值直接調整。
---
### 說明
-出於安全考慮,在非本地主機場景下,K.G.Studio 默認不會把 API Key 持久化到 IndexedDB 中(以降低 XSS 風險)。您每次打開 K.G.Studio 時都需要重新輸入。若您確實需要在非本地主機場景下持久化,請在設置中啟用 "Persist API Keys on Non-Localhost"(不建議在共享或生產環境下啟用)。
+出於安全考慮,在非本地主機場景下,K.G.Studio 預設不會把 API Key 持久化到 IndexedDB 中(以降低 XSS 風險)。您每次開啟 K.G.Studio 時都需要重新輸入。若您確實需要在非本地主機場景下持久化,請在設定中啟用 "Persist API Keys on Non-Localhost"(不建議在共享或生產環境下啟用)。
### 免責聲明
-K.G.Studio 不提供也不托管上述任何模型,也不隸屬於任何模型提供方。所有數據默認都保存在您的本地設備中;您向第三方模型提供方發送的任何數據,都由您自行負責。
+K.G.Studio 不提供也不託管上述任何模型,也不隸屬於任何模型提供方。所有資料預設都儲存在您的本地裝置中;您向第三方模型提供方發送的任何資料,都由您自行負責。
祝您使用 K.G.Studio 音樂創作助手創作愉快!
diff --git a/public/chat/hotkeys-zh_hk.md b/public/chat/hotkeys-zh_hk.md
index 5302800..6e7e30e 100644
--- a/public/chat/hotkeys-zh_hk.md
+++ b/public/chat/hotkeys-zh_hk.md
@@ -2,12 +2,12 @@
本指南列出了當前在 K.G.Studio 中已經實現的鍵盤快捷鍵,以及部分點擊時配合修飾鍵的操作。
-### 平台相關的創建操作
+### 平台相關的建立操作
-- 在 **macOS** 上,使用 Pointer 工具時按 `Cmd+click` 可創建區域、音符或自動化點。
-- 在 **Windows/Linux** 上,使用 Pointer 工具時按 `Ctrl+click` 可創建區域、音符或自動化點。
-- 在主時間線中,Pointer 工具激活時雙擊空白處可創建區域。
-- 在鋼琴卷簾與自動化軌中,Pencil 工具支持單擊創建。
+- 在 **macOS** 上,使用 Pointer 工具時按 `Cmd+click` 可建立區域、音符或自動化點。
+- 在 **Windows/Linux** 上,使用 Pointer 工具時按 `Ctrl+click` 可建立區域、音符或自動化點。
+- 在主時間線中,Pointer 工具啟用時雙擊空白處可建立區域。
+- 在 Piano Roll 與自動化軌中,Pencil 工具支援單擊建立。
### 主快捷鍵
@@ -16,40 +16,40 @@
- `R` — 開始 / 停止錄音
- `Cmd/Ctrl+Z` — 撤銷
- `Cmd/Ctrl+Shift+Z` — 重做
-- `Cmd/Ctrl+C` — 複製所選項目
-- `Cmd/Ctrl+V` — 粘貼
-- `Cmd/Ctrl+S` — 保存項目
-- `Cmd/Ctrl+A` — 選中當前 MIDI 區域中的全部音符
+- `Cmd/Ctrl+C` — 複製所選專案
+- `Cmd/Ctrl+V` — 貼上
+- `Cmd/Ctrl+S` — 儲存專案
+- `Cmd/Ctrl+A` — 選取目前 MIDI 區域中的全部音符
- `Cmd/Ctrl+T` — 在播放頭處分割所選區域
-- `Cmd/Ctrl+J` — 合併選中的 MIDI 區域
+- `Cmd/Ctrl+J` — 合併已選取的 MIDI 區域
-### 區域與鋼琴卷簾窗口快捷鍵
+### 區域與 Piano Roll 視窗快捷鍵
-- `E` — 為選中的 MIDI 區域打開鋼琴卷簾窗口,或為選中的音頻區域打開波形編輯器;如果編輯器已經打開,`E` 會關閉它。
-- `N` — 以五線譜視圖打開選中的 MIDI 區域。
-- `Delete` / `Backspace` — 刪除選中的區域、音符或自動化點。
-- `Esc` — 關閉鋼琴卷簾窗口。
+- `E` — 為已選取的 MIDI 區域開啟 Piano Roll,或為已選取的音訊區域開啟波形編輯器;如果編輯器已經開啟,`E` 會關閉它。
+- `N` — 以五線譜視圖開啟已選取的 MIDI 區域。
+- `Delete` / `Backspace` — 刪除已選取的區域、音符或自動化點。
+- `Esc` — 關閉 Piano Roll 視窗。
### 選擇操作
-- `Shift+click` — 加入當前選擇。
-- 在空白區域套索拖拽 — 框選區域或自動化點。
-- 在鋼琴卷簾窗口中 `Shift+套索` — 切換套索範圍內項目的選中狀態。
+- `Shift+click` — 加入目前選擇。
+- 在空白區域套索拖曳 — 框選區域或自動化點。
+- 在 Piano Roll 視窗中 `Shift+套索` — 切換套索範圍內項目的選取狀態。
-### 鋼琴卷簾快捷鍵
+### Piano Roll 快捷鍵
- `G` — 循環切換和弦指導模式
- `Tab` — 跳到下一個和弦候選
- `Shift+Tab` — 跳到上一個和弦候選 / 轉位
-### 鋼琴卷簾吸附快捷鍵
+### Piano Roll 吸附快捷鍵
- `1` — 不吸附
- `2` — 吸附到 `1/4`
- `3` — 吸附到 `1/8`
- `4` — 吸附到 `1/16`
-### 鋼琴卷簾量化快捷鍵
+### Piano Roll 量化快捷鍵
- `5` — 起始量化到 `1/4`
- `6` — 起始量化到 `1/8`
diff --git a/public/chat/welcome_again-zh_hk.md b/public/chat/welcome_again-zh_hk.md
index 0f93e54..2c4ac42 100644
--- a/public/chat/welcome_again-zh_hk.md
+++ b/public/chat/welcome_again-zh_hk.md
@@ -1,9 +1,9 @@
## 再次歡迎
-很高興再次見到您。檢測到您的 LLM 提供方已經配置完成,現在可以直接開始聊天。
+很高興再次見到您。檢測到您的 LLM 提供方已經設定完成,現在可以直接開始聊天。
提示:
-- 隨時輸入 `/clear` 重置當前聊天。
+- 隨時輸入 `/clear` 重設目前聊天。
- 輸入 `/welcome` 再次查看這條歡迎消息。
- 輸入 `/help` 查看幫助說明。
- 輸入 `/hotkeys` 查看快捷鍵指南。
diff --git a/public/chat/welcome_local_llm-zh_hk.md b/public/chat/welcome_local_llm-zh_hk.md
index b2d8ae2..9a6b931 100644
--- a/public/chat/welcome_local_llm-zh_hk.md
+++ b/public/chat/welcome_local_llm-zh_hk.md
@@ -4,7 +4,7 @@
- 無需外部 API 調用。所有內容都直接在您的瀏覽器中運行,不會產生額外 API 成本。
- 此模式通過 **LiteRT-LM** 和 **WebGPU** 加速運行 **Gemma 4 E4B**。
-- 推薦硬件:至少 **8 GB 顯存**的 GPU,或至少 **16 GB 統一內存**的系統。
+- 推薦硬體:至少 **8 GB 顯存**的 GPU,或至少 **16 GB 統一記憶體**的系統。
- 相比更大的雲端模型,本地模式在複雜規劃、長鏈路編輯和多步驟任務上能力會更有限。
### 推薦工作方式
@@ -19,11 +19,11 @@
- 例如,如果您想讓模型基於當前音樂寫一段和弦進行,可以先說:`請讀取當前音樂。`
- 等這一步完成後,再繼續說:`請基於它寫一段和弦進行。`
- 在本地 LLM 模式下,這種漸進式流程通常更可靠。
-- 在整個流程中,保持您希望 agent 更新的 MIDI 區域處於選中狀態。
+- 在整個流程中,保持您希望 agent 更新的 MIDI 區域處於選取狀態。
- 僅僅為了執行 `read_music`,您不需要切換到別的區域,因為 `read_music` 可以讀取所有音軌的音樂內容。
### 改用外部 LLM
-- 如果您想使用更大的雲端模型或自托管模型,請打開 **設置 -> 通用 -> LLM 提供方**,切換到 **本地 LLM(瀏覽器)** 以外的提供方。
+- 如果您想使用更大的雲端模型或自託管模型,請開啟 **設定 -> 通用 -> LLM 提供方**,切換到 **本地 LLM(瀏覽器)** 以外的提供方。
- 如果要用雲端模型,可以選擇 **OpenAI**,或者選擇 **OpenAI Compatible** 並填寫 OpenRouter 等提供方。
-- 如果要用自托管模型,也請選擇 **OpenAI Compatible**,然後填寫您的服務器 **Base URL** 和 **Model**。
+- 如果要用自託管模型,也請選擇 **OpenAI Compatible**,然後填寫您的伺服器 **Base URL** 和 **Model**。
- 切換提供方後,建議開啟一個新的對話,以便聊天會話乾淨地使用新模型。
diff --git a/public/chat/welcome_new-zh_hk.md b/public/chat/welcome_new-zh_hk.md
index cd992b6..9c41314 100644
--- a/public/chat/welcome_new-zh_hk.md
+++ b/public/chat/welcome_new-zh_hk.md
@@ -5,21 +5,21 @@
### 快速開始
**配置 K.G.Studio 音樂創作助手**
- [點擊這裡獲取免費的 OpenRouter API Key](https://openrouter.ai/keys)(您可能需要一個 OpenRouter 帳號)。
-- 進入 **設置 ⚙️ → 通用 → LLM 提供方**,選擇 **OpenAI 兼容服務**。
-- 在 **OpenAI 兼容服務 → 密鑰** 中粘貼您的 Key。注意:在非 localhost 環境下,Key 默認不會持久化,刷新後需要重新輸入,請妥善保管。
+- 進入 **設定 ⚙️ → 通用 → LLM 提供方**,選擇 **OpenAI 兼容服務**。
+- 在 **OpenAI 兼容服務 → 密鑰** 中貼上您的 Key。注意:在非 localhost 環境下,Key 預設不會持久化,重新整理後需要重新輸入,請妥善保管。
- 在 **OpenAI 兼容服務 → 模型** 中輸入 `qwen/qwen3-30b-a3b:free`。注意:非免費模型可能需要計費。
- 在 **OpenAI 兼容服務 → 基礎 URL** 中輸入 `https://openrouter.ai/api/v1`。
*(或者,您也可以使用官方 OpenAI API,或者任何 OpenAI 兼容服務。)*
**基本 DAW 操作**
-- 在音軌上雙擊(或按住 Ctrl/Cmd 再點擊)可創建區域。
+- 在音軌上雙擊(或按住 Ctrl/Cmd 再點擊)可建立區域。
- 拖動區域邊緣可調整長度;拖動區域主體可移動。
-- 點擊區域左上角的小鉛筆可打開鋼琴卷簾窗口。
-- 在鋼琴卷簾中,雙擊(或 Ctrl/Cmd+點擊)可創建音符。
-- 單擊選擇;Shift+單擊多選;拖拽框選。
+- 點擊區域左上角的小鉛筆可開啟 Piano Roll。
+- 在 Piano Roll 中,雙擊(或 Ctrl/Cmd+點擊)可建立音符。
+- 單擊選取;Shift+單擊多選;拖曳框選。
- 拖動音符邊緣可調整長度;拖動音符主體可移動所選音符。
-- 使用鋼琴卷簾工具欄右上角的 Snapping 控制網格量化。
+- 使用 Piano Roll 工具列右上角的 Snapping 控制網格量化。
### 免責聲明
-K.G.Studio 與任何 LLM 提供方均無隸屬關係。所有數據默認都保存在您的本地設備中;您發送給第三方服務的數據由您自行負責。
+K.G.Studio 與任何 LLM 提供方均無隸屬關係。所有資料預設都儲存在您的本地裝置中;您發送給第三方服務的資料由您自行負責。
diff --git a/src/i18n/messages/zh_hk.ts b/src/i18n/messages/zh_hk.ts
index 9ddbee6..61cb04a 100644
--- a/src/i18n/messages/zh_hk.ts
+++ b/src/i18n/messages/zh_hk.ts
@@ -3,16 +3,16 @@ import { enUsMessages } from './en_us';
export const zhHkMessages: TranslationMessages = {
...enUsMessages,
- 'app.loading': '加載中...',
+ 'app.loading': '載入中...',
'assistant.displayName': 'K.G.Studio 音樂創作助手',
'assistant.welcomeFallback': '歡迎使用 K.G.Studio 音樂創作助手。',
'mainContent.createTrack': '建立音軌',
'mainContent.showGlobalTracks': '顯示全域音軌',
'status.chordGuideCandidate': '和弦指導候選: {name} - {notes} - {note}',
- 'settings.sidebar.title': '設置',
- 'settings.sidebar.close': '關閉設置',
+ 'settings.sidebar.title': '設定',
+ 'settings.sidebar.close': '關閉設定',
'settings.sidebar.general': '通用',
- 'settings.sidebar.audioIo': '音頻 I/O',
+ 'settings.sidebar.audioIo': '音訊 I/O',
'settings.sidebar.behavior': '行為',
'settings.sidebar.templates': '模板',
'settings.sidebar.chordGuide': '和弦指導',
@@ -22,7 +22,7 @@ export const zhHkMessages: TranslationMessages = {
'settings.general.language.auto': '自動',
'settings.yes': '是',
'settings.no': '否',
- 'settings.restoreDefault': '恢復默認',
+ 'settings.restoreDefault': '恢復預設',
'settings.deleteCachedModel': '刪除已緩存模型',
'settings.deleting': '刪除中...',
'settings.general.llmProvider.section': 'LLM 提供方',
@@ -32,7 +32,7 @@ export const zhHkMessages: TranslationMessages = {
'settings.general.llmProvider.claudeOpenRouter': 'Claude(通過 OpenRouter)',
'settings.general.llmProvider.openaiCompatible': 'OpenAI 兼容服務(例如 OpenRouter、Ollama)',
'settings.general.persistKeys.label': '在非 localhost 環境持久化 API Key',
- 'settings.general.persistKeys.help': '啟用後,即使在非 localhost 環境下,API Key 也會保存到瀏覽器存儲中。警告:這可能增加 XSS 攻擊帶來的安全風險。',
+ 'settings.general.persistKeys.help': '啟用後,即使在非 localhost 環境下,API Key 也會儲存到瀏覽器儲存空間中。警告:這可能增加 XSS 攻擊帶來的安全風險。',
'settings.general.localRuntime.cachedStatus': '緩存模型狀態',
'settings.general.localRuntime.cacheChecking': '正在檢查本地模型緩存...',
'settings.general.localRuntime.cacheDownloaded': '已下載到瀏覽器緩存。',
@@ -52,7 +52,7 @@ export const zhHkMessages: TranslationMessages = {
'settings.general.openai.model': '模型',
'settings.general.openai.flexMode': 'Flex 模式',
'settings.general.openai.flexHelp': 'Flex 模式使用 OpenAI 的彈性服務層。優點:繁忙時段可能節省成本並提高吞吐。缺點:延遲可能波動,也可能排隊或被降優先級。僅對 OpenAI 提供方生效,對 OpenAI 兼容服務無影響。',
- 'settings.general.keys.persisted': '密鑰會保存在本地(瀏覽器中的 IndexedDB)。',
+ 'settings.general.keys.persisted': '密鑰會儲存在本地(瀏覽器中的 IndexedDB)。',
'settings.general.keys.sessionOnly': '出於安全考慮,在非本地主機環境下密鑰不會持久化,只保留在當前會話內存中。',
'settings.general.claudeOpenRouter.section': 'Anthropic Claude(通過 OpenRouter)',
'settings.general.claudeOpenRouter.keyPlaceholder': '輸入您的 Claude API Key',
@@ -63,39 +63,39 @@ export const zhHkMessages: TranslationMessages = {
'settings.general.openaiCompatible.baseUrlPlaceholder': '例如 https://openrouter.ai/api/v1',
'settings.general.openaiCompatible.baseUrlHelp': '快捷預設:',
'settings.general.openaiCompatible.modelPlaceholder': '例如 qwen3:30b',
- 'settings.general.soundfont.section': 'Soundfont 設置',
- 'settings.general.soundfont.managed': 'Soundfont 配置由服務器(kgone-server.json)管理,當前設置為只讀。',
+ 'settings.general.soundfont.section': 'Soundfont 設定',
+ 'settings.general.soundfont.managed': 'Soundfont 設定由伺服器(kgone-server.json)管理,目前設定為唯讀。',
'settings.general.soundfont.baseUrl': '基礎 URL',
'settings.general.soundfont.baseUrlHelp': '如果改成不兼容的 soundfont 源,某些樂器可能發聲錯誤或無法播放。',
- 'settings.general.kgone.section': 'K.G.One 設置',
- 'settings.general.kgone.managed': 'K.G.One 配置由服務器(kgone-server.json)管理,當前設置為只讀。',
+ 'settings.general.kgone.section': 'K.G.One 設定',
+ 'settings.general.kgone.managed': 'K.G.One 設定由伺服器(kgone-server.json)管理,目前設定為唯讀。',
'settings.general.kgone.enabled': '啟用 K.G.One 集成',
'settings.general.kgone.disabled': '禁用',
'settings.general.kgone.enabledOption': '啟用',
- 'settings.general.kgone.serverBaseUrl': '服務器基礎 URL',
- 'settings.general.kgone.serverBaseUrlHelp': '正在運行的 K.G.One Music Studio 服務器基礎 URL。用於整曲生成、片段生成和分軌。',
- 'settings.audioIo.title': '音頻 I/O',
+ 'settings.general.kgone.serverBaseUrl': '伺服器基礎 URL',
+ 'settings.general.kgone.serverBaseUrlHelp': '正在運行的 K.G.One Music Studio 伺服器基礎 URL,用於整曲生成、片段生成和分軌。',
+ 'settings.audioIo.title': '音訊 I/O',
'settings.audioIo.deviceRouting': '裝置路由',
'settings.audioIo.refresh': '重新整理裝置清單',
'settings.audioIo.refreshing': '重新整理中…',
'settings.audioIo.description': '選擇 KGStudio 用於錄音與播放的裝置。輸入裝置的變更會在下一次錄音時生效。輸出裝置的變更在 v1 中需要重新整理頁面後生效。',
- 'settings.audioIo.inputDevice': '音頻輸入裝置',
- 'settings.audioIo.outputDevice': '音頻輸出裝置',
+ 'settings.audioIo.inputDevice': '音訊輸入裝置',
+ 'settings.audioIo.outputDevice': '音訊輸出裝置',
'settings.audioIo.inputHelp': '變更會在下一次錄音時生效。如果所選裝置被移除,KGStudio 會回退到系統預設裝置。',
'settings.audioIo.outputHelp': '在 v1 中,輸出裝置變更需要重新整理頁面。瀏覽器對非預設輸出路由的支援有限,因此在不支援時 KGStudio 會繼續使用系統預設裝置。',
'settings.audioIo.outputSinkUnsupported': '此瀏覽器未提供可靠的即時 Web Audio 輸出切換能力。非預設輸出裝置選擇僅屬盡力而為,最終可能仍會使用系統預設裝置。',
'settings.audioIo.chooseOutputDevice': '選擇輸出裝置…',
'settings.audioIo.previousSelectedInput': '先前選擇的輸入裝置(需要權限才能驗證)',
'settings.audioIo.previousSelectedOutput': '先前選擇的輸出裝置(需要權限才能驗證)',
- 'settings.audioIo.status.inputUnavailable': '先前選擇的音頻輸入裝置不可用;將使用系統預設裝置。',
- 'settings.audioIo.status.outputUnavailable': '先前選擇的音頻輸出裝置不可用;將使用系統預設裝置。',
- 'settings.audioIo.status.refreshed': '音頻裝置清單已重新整理。',
- 'settings.audioIo.status.readFailed': '無法從瀏覽器讀取音頻裝置。',
- 'settings.audioIo.status.inputDefaultNextSession': '音頻輸入將在下一次錄音時使用系統預設裝置。',
- 'settings.audioIo.status.inputChangedNextSession': '音頻輸入將在下一次錄音時切換。',
- 'settings.audioIo.status.outputDefaultAfterRefresh': '重新整理後音頻輸出將使用系統預設裝置。',
- 'settings.audioIo.status.outputSavedRefreshRequired': '音頻輸出裝置已儲存。在 v1 中請重新整理頁面以套用。',
- 'settings.audioIo.status.outputPromptUnsupported': '此瀏覽器不支援彈出音頻輸出裝置選擇。',
+ 'settings.audioIo.status.inputUnavailable': '先前選擇的音訊輸入裝置不可用;將使用系統預設裝置。',
+ 'settings.audioIo.status.outputUnavailable': '先前選擇的音訊輸出裝置不可用;將使用系統預設裝置。',
+ 'settings.audioIo.status.refreshed': '音訊裝置清單已重新整理。',
+ 'settings.audioIo.status.readFailed': '無法從瀏覽器讀取音訊裝置。',
+ 'settings.audioIo.status.inputDefaultNextSession': '音訊輸入將在下一次錄音時使用系統預設裝置。',
+ 'settings.audioIo.status.inputChangedNextSession': '音訊輸入將在下一次錄音時切換。',
+ 'settings.audioIo.status.outputDefaultAfterRefresh': '重新整理後音訊輸出將使用系統預設裝置。',
+ 'settings.audioIo.status.outputSavedRefreshRequired': '音訊輸出裝置已儲存。在 v1 中請重新整理頁面以套用。',
+ 'settings.audioIo.status.outputPromptUnsupported': '此瀏覽器不支援彈出音訊輸出裝置選擇。',
'settings.audioIo.status.outputSelectedRefreshRequired': '已選擇輸出裝置。請重新整理頁面以在 v1 中套用。',
'settings.audioIo.status.outputSelectionDenied': '瀏覽器不允許選擇非預設輸出裝置。',
'settings.behavior.title': '行為',
@@ -106,9 +106,9 @@ export const zhHkMessages: TranslationMessages = {
'settings.behavior.spectrogramHeightResolutionHelp': '控制可見音高範圍內的頻譜圖垂直細節。較高的值會讓音高輪廓更清晰,但在計算頻譜圖時會消耗更多 CPU 與記憶體。',
'settings.behavior.chatBox': '聊天框',
'settings.behavior.openAtStartup': '啟動時開啟',
- 'settings.behavior.audio': '音頻',
+ 'settings.behavior.audio': '音訊',
'settings.behavior.lookaheadTime': '前瞻時間(ms)',
- 'settings.behavior.lookaheadTimeHelp': '音頻排程前瞻時間(0-500ms)。較低的值(10-20ms)可降低 MIDI 輸入延遲,但在較慢的系統上可能造成音頻卡頓。較高的值(100ms 以上)更有利於播放穩定性。變更會立即生效,無需重新啟動。',
+ 'settings.behavior.lookaheadTimeHelp': '音訊排程前瞻時間(0-500ms)。較低的值(10-20ms)可降低 MIDI 輸入延遲,但在較慢的系統上可能造成音訊卡頓。較高的值(100ms 以上)更有利於播放穩定性。變更會立即生效,無需重新啟動。',
'settings.behavior.playbackDelay': '播放延遲(ms)',
'settings.behavior.playbackDelayHelp': '按下開始按鈕後,播放會有一個很短的延遲(0-500ms)。增加此值可能有助於穩定播放,特別是在前瞻值較低時的前幾個節拍。變更會立即生效,無需重新啟動。',
'settings.behavior.midiAutomationInterpolation': 'MIDI 自動化插值',
@@ -119,9 +119,9 @@ export const zhHkMessages: TranslationMessages = {
'settings.behavior.midiInputLatency': 'MIDI 輸入延遲(ms)',
'settings.behavior.midiInputLatencyHelp': '用於 MIDI 錄音的時間校正(0-500ms)。如果錄下來的音符比您實際想演奏的位置略晚,可以增加此值以匹配您的 MIDI 裝置輸入延遲。每個音符在提交時都會向前回移這段時間。',
'settings.behavior.bounceStartsFromBeat1': '匯出從第 1 拍開始',
- 'settings.behavior.bounceStartsFromBeat1Help': '選擇「是」時,匯出 WAV/MP3 會包含從歌曲開頭到第一個被渲染區域之前的前導靜音。選擇「否」時,會裁掉這段前導靜音,並從第一個被渲染的音符或音頻區域開始匯出。',
- 'settings.behavior.captureAudioForScreenSharing': '為螢幕分享擷取音頻',
- 'settings.behavior.captureAudioForScreenSharingHelp': '需要重新啟動 KGStudio(重新整理頁面)後生效。當在視訊會議中分享螢幕時,如果 KGStudio 的音頻無法被擷取,請啟用此選項(例如 Zoom、Teams)。這會建立一個額外的音頻串流,供螢幕擷取應用程式偵測。',
+ 'settings.behavior.bounceStartsFromBeat1Help': '選擇「是」時,匯出 WAV/MP3 會包含從歌曲開頭到第一個被渲染區域之前的前導靜音。選擇「否」時,會裁掉這段前導靜音,並從第一個被渲染的音符或音訊區域開始匯出。',
+ 'settings.behavior.captureAudioForScreenSharing': '為螢幕分享擷取音訊',
+ 'settings.behavior.captureAudioForScreenSharingHelp': '需要重新啟動 KGStudio(重新整理頁面)後生效。當在視像會議中分享螢幕時,如果 KGStudio 的音訊無法被擷取,請啟用此選項(例如 Zoom、Teams)。這會建立一個額外的音訊串流,供螢幕擷取應用程式偵測。',
'settings.behavior.captureAudioForScreenSharingWarning': '在 Zoom 中分享螢幕時,請務必確認已啟用「Share Sound」選項。',
'settings.behavior.validation.lookahead.invalidNumber': '前瞻時間必須是有效數字',
'settings.behavior.validation.lookahead.range': '前瞻時間必須在 0 到 0.5 秒之間(0-500ms)',
@@ -160,10 +160,10 @@ export const zhHkMessages: TranslationMessages = {
'dialog.ok': '確定',
'dialog.experimentalFeature': '實驗性功能',
'dialog.recommendedSource': '推薦源素材',
- 'dialog.chordHint.audio': '和弦分析仍屬實驗性功能。和聲內容、編配密度以及瞬態較強的素材都可能影響準確率。建議先使用默認設置,再逐步微調靈敏度和穩定性,讓檢測結果更貼近實際樂句。',
- 'dialog.chordHint.midi': '和弦分析仍屬實驗性功能。和弦堆疊密度、重疊以及裝飾音都會影響結果。建議先使用默認設置,再調整短音抑制和和聲關注方式,以匹配該段音樂的和聲作用。',
- 'dialog.chordHint.tempo': '速度分析仍屬實驗性功能。自由速度、瞬態稀疏以及多層打擊樂都可能降低準確率。建議先使用默認 BPM 範圍,如果第一次結果不理想,再把分析範圍收窄到更可能的速度區間。',
- 'dialog.sourceHint.kgone': '為了獲得更可靠的和弦標籤,建議分析已經削弱或移除了人聲和打擊樂的 stem。如果已啟用 K.G.One Music Studio 服務器集成,請使用帶有 "Vocal, Drums, Bass, Guitar, Piano, and Others" 的 Separator 模型,並優先分析 Piano 或 Others stem。',
+ 'dialog.chordHint.audio': '和弦分析仍屬實驗性功能。和聲內容、編配密度以及瞬態較強的素材都可能影響準確率。建議先使用預設設定,再逐步微調靈敏度和穩定性,讓檢測結果更貼近實際樂句。',
+ 'dialog.chordHint.midi': '和弦分析仍屬實驗性功能。和弦堆疊密度、重疊以及裝飾音都會影響結果。建議先使用預設設定,再調整短音抑制和和聲關注方式,以配合該段音樂的和聲作用。',
+ 'dialog.chordHint.tempo': '速度分析仍屬實驗性功能。自由速度、瞬態稀疏以及多層打擊樂都可能降低準確率。建議先使用預設 BPM 範圍,如果第一次結果不理想,再把分析範圍收窄到更可能的速度區間。',
+ 'dialog.sourceHint.kgone': '為了獲得更可靠的和弦標籤,建議分析已經削弱或移除了人聲和打擊樂的 stem。如果已啟用 K.G.One Music Studio 伺服器整合,請使用帶有 "Vocal, Drums, Bass, Guitar, Piano, and Others" 的 Separator 模型,並優先分析 Piano 或 Others stem。',
'dialog.sourceHint.local': '為了獲得更可靠的和弦標籤,建議分析已經削弱或移除了人聲和打擊樂的 stem。如果您使用本地分軌器,請選擇 "Vocal, Drums, Bass, and Others" 模型,並使用 Others stem 進行分析。',
'dialog.label.sensitivity': '靈敏度',
'dialog.label.stability': '穩定性',
@@ -179,16 +179,16 @@ export const zhHkMessages: TranslationMessages = {
'dialog.label.minimumBpm': '最小 BPM',
'dialog.label.maximumBpm': '最大 BPM',
'dialog.label.autoAlignRegionToBeat': '自動將片段對齊到拍點',
- 'dialog.message.chordDetection': '在處理前調整音頻和弦檢測設置。',
- 'dialog.message.tempoDetection': '在處理前調整音頻速度檢測設置。',
- 'dialog.message.tempoApply': '檢測到速度:{bpm} BPM。請選擇應用方式。\n\n"更新當前速度"將修改此片段位置的有效速度。"插入速度變更"將在片段起始點前最近的小節處添加新的速度區域。',
+ 'dialog.message.chordDetection': '在處理前調整音訊和弦檢測設定。',
+ 'dialog.message.tempoDetection': '在處理前調整音訊速度檢測設定。',
+ 'dialog.message.tempoApply': '檢測到速度:{bpm} BPM。請選擇應用方式。\n\n"更新當前速度"會修改此片段位置的有效速度。"插入速度變更"會在片段起始點前最近的小節加入新的速度區域。',
'dialog.action.updateCurrentTempo': '更新當前速度',
'dialog.action.insertTempoChange': '插入速度變更',
'eventList.title': '事件列表',
'eventList.scopeTabs': '事件列表範圍',
'eventList.scope.region': '區域',
'eventList.scope.track': '音軌',
- 'eventList.scope.global': '全局',
+ 'eventList.scope.global': '全域',
'eventList.deleteVisibleSelectedRows': '刪除當前可見的已選行',
'eventList.table.position': '位置',
'eventList.table.status': '狀態',
@@ -199,11 +199,11 @@ export const zhHkMessages: TranslationMessages = {
'eventList.region.filter.notes': '音符',
'eventList.region.filter.pitchBends': '彎音',
'eventList.region.filter.controller': '控制器',
- 'eventList.region.empty': '請選擇一個 MIDI 區域,或先在鋼琴卷簾中打開一個區域,再查看事件列表。',
- 'eventList.region.add.label': '添加',
- 'eventList.region.add.noteTitle': '在播放頭位置添加音符',
- 'eventList.region.add.pitchBendTitle': '在播放頭位置添加彎音',
- 'eventList.region.add.controllerTitle': '在播放頭位置添加控制器事件',
+ 'eventList.region.empty': '請選擇一個 MIDI 區域,或先在 Piano Roll 中開啟一個區域,再查看事件列表。',
+ 'eventList.region.add.label': '新增',
+ 'eventList.region.add.noteTitle': '在播放頭位置新增音符',
+ 'eventList.region.add.pitchBendTitle': '在播放頭位置新增彎音',
+ 'eventList.region.add.controllerTitle': '在播放頭位置新增控制器事件',
'eventList.region.addType.note': '音符',
'eventList.region.addType.pitchBend': '彎音',
'eventList.region.addType.controller': '控制器',
@@ -215,25 +215,25 @@ export const zhHkMessages: TranslationMessages = {
'eventList.track.filter.volume': '音量',
'eventList.track.filter.pan': '聲像',
'eventList.track.empty': '請選擇一條音軌以查看區域和音軌自動化。',
- 'eventList.track.add.label': '添加',
- 'eventList.track.add.midiRegionTitle': '在播放頭位置添加 MIDI 區域',
- 'eventList.track.add.volumeTitle': '在播放頭位置添加音量自動化點',
- 'eventList.track.add.panTitle': '在播放頭位置添加聲像自動化點',
+ 'eventList.track.add.label': '新增',
+ 'eventList.track.add.midiRegionTitle': '在播放頭位置新增 MIDI 區域',
+ 'eventList.track.add.volumeTitle': '在播放頭位置新增音量自動化點',
+ 'eventList.track.add.panTitle': '在播放頭位置新增聲像自動化點',
'eventList.track.addType.midiRegion': 'MIDI 區域',
- 'eventList.track.status.audio': '音頻',
+ 'eventList.track.status.audio': '音訊',
'eventList.track.status.midi': 'MIDI',
'eventList.track.status.volume': '音量',
'eventList.track.status.pan': '聲像',
- 'eventList.global.filters': '全局事件篩選',
+ 'eventList.global.filters': '全域事件篩選',
'eventList.global.filter.marker': '標記',
'eventList.global.filter.tempo': '速度',
'eventList.global.filter.keySignature': '調號',
'eventList.global.filter.chord': '和弦',
- 'eventList.global.add.label': '添加',
- 'eventList.global.add.markerTitle': '在播放頭位置添加標記區段',
- 'eventList.global.add.tempoTitle': '在播放頭位置添加速度區段',
- 'eventList.global.add.keySignatureTitle': '在播放頭位置添加調號區段',
- 'eventList.global.add.chordTitle': '在播放頭位置添加和弦區段',
+ 'eventList.global.add.label': '新增',
+ 'eventList.global.add.markerTitle': '在播放頭位置新增標記區段',
+ 'eventList.global.add.tempoTitle': '在播放頭位置新增速度區段',
+ 'eventList.global.add.keySignatureTitle': '在播放頭位置新增調號區段',
+ 'eventList.global.add.chordTitle': '在播放頭位置新增和弦區段',
'eventList.global.addType.marker': '標記',
'eventList.global.addType.tempo': '速度',
'eventList.global.addType.keySignature': '調號',
@@ -246,16 +246,16 @@ export const zhHkMessages: TranslationMessages = {
'eventList.global.validation.tempo': '請輸入僅包含數字的 BPM 值。需要介於 {min} 和 {max} 之間的整數。示例:128',
'eventList.global.validation.keySignature': '請輸入一個精確的調號名稱。需要規範值,例如 "C major" 或 "F# minor"。示例:F# minor',
'eventList.global.validation.chord': '請輸入有效的和弦符號。需要應用可解析的和弦表示。示例:Bm7b5',
- 'eventList.global.validation.position': '請輸入項目起點或之後的位置。需要非負位置。示例:1 1 0',
+ 'eventList.global.validation.position': '請輸入專案起點或之後的位置。需要非負位置。示例:1 1 0',
'eventList.global.validation.length': '請輸入正長度。需要大於零的時值。示例:4 0',
- 'globalTracks.label': '全局軌道',
+ 'globalTracks.label': '全域軌道',
'globalTracks.marker': '標記',
'globalTracks.tempo': '速度',
'globalTracks.signature': '調號',
'globalTracks.chord': '和弦',
- 'globalTracks.addItem': '添加 {label} 全局軌道項目',
+ 'globalTracks.addItem': '新增 {label} 全域軌道項目',
'pianoRoll.power.linear': '線性',
- 'pianoRoll.power.sqrtDefault': '√(默認)',
+ 'pianoRoll.power.sqrtDefault': '√(預設)',
'pianoRoll.power.mild': '輕度',
'pianoRoll.power.strong': '強烈',
'pianoRoll.chordGuide.off': '關閉和弦指導',
@@ -407,42 +407,42 @@ export const zhHkMessages: TranslationMessages = {
'percussion.full.79': '開庫卡',
'percussion.full.80': '悶三角鐵',
'percussion.full.81': '開三角鐵',
- 'toolbar.export.kgstudio': '導出為 KGStudio 文件',
- 'toolbar.export.midi': '導出為 MIDI 文件',
- 'toolbar.export.wav': '導出為 WAV',
- 'toolbar.export.mp3': '導出為 MP3',
- 'toolbar.projectName.prompt': '輸入項目名稱:',
- 'toolbar.projectName.invalid': '無效的項目名稱。只允許字母、數字、空格、連字符、下劃線、句點和括號。',
- 'toolbar.projectName.reserved': '"{name}" 是保留項目名稱。請選擇其他名稱。',
- 'toolbar.projectName.overwrite': '項目 "{name}" 已存在。要覆蓋它嗎?',
- 'toolbar.projectName.renameOrCopy': '您想重命名這個項目,還是另存為一個副本?',
+ 'toolbar.export.kgstudio': '匯出為 KGStudio 檔案',
+ 'toolbar.export.midi': '匯出為 MIDI 檔案',
+ 'toolbar.export.wav': '匯出為 WAV',
+ 'toolbar.export.mp3': '匯出為 MP3',
+ 'toolbar.projectName.prompt': '輸入專案名稱:',
+ 'toolbar.projectName.invalid': '無效的專案名稱。只允許字母、數字、空格、連字符、底線、句點和括號。',
+ 'toolbar.projectName.reserved': '"{name}" 是保留專案名稱。請選擇其他名稱。',
+ 'toolbar.projectName.overwrite': '專案 "{name}" 已存在。要覆寫它嗎?',
+ 'toolbar.projectName.renameOrCopy': '您想重新命名這個專案,還是另存為副本?',
'toolbar.projectName.saveAsCopy': '另存為副本',
'toolbar.projectName.rename': '重命名',
- 'toolbar.save.error': '保存時發生錯誤:{error}',
- 'toolbar.load.error': '加載項目時發生錯誤:{error}',
- 'toolbar.newProject.confirm': '確定要創建新項目嗎?當前未保存的更改將會丟失。',
- 'toolbar.project.notFound': '未找到項目 "{name}"。',
- 'toolbar.openProject.confirm': '要打開這個項目嗎?當前項目中未保存的更改將會丟失。',
- 'toolbar.status.loadFailed': '加載項目失敗:{error}',
- 'toolbar.status.newProjectCreated': '已創建新項目 "{name}"',
- 'toolbar.status.projectLoaded': '{description} 加載成功',
- 'toolbar.status.projectExportedKgstudio': '項目 "{name}" 已導出為 KGStudio 文件',
- 'toolbar.status.exportProjectError': '導出項目出錯:{error}',
- 'toolbar.export.failedProject': '導出項目失敗:{error}',
- 'toolbar.status.projectExportedMidi': '項目 "{name}" 已導出為 MIDI 文件',
- 'toolbar.status.exportMidiError': '導出 MIDI 出錯:{error}',
- 'toolbar.export.failedMidi': '導出項目為 MIDI 失敗:{error}',
- 'toolbar.status.projectExportedWav': '項目 "{name}" 已導出為 WAV 文件',
- 'toolbar.status.exportWavError': '導出 WAV 出錯:{error}',
- 'toolbar.export.failedWav': '導出項目為 WAV 失敗:{error}',
- 'toolbar.status.projectExportedMp3': '項目 "{name}" 已導出為 MP3 文件',
- 'toolbar.status.exportMp3Error': '導出 MP3 出錯:{error}',
- 'toolbar.export.failedMp3': '導出項目為 MP3 失敗:{error}',
- 'toolbar.status.importFailed': '導入文件失敗:{error}',
- 'toolbar.import.failedProjectFile': '導入項目文件失敗:{error}',
- 'toolbar.import.corruptedKgstudio': '.kgstudio 文件已損壞或無效:{error}',
- 'toolbar.status.importingMidi': '正在導入 MIDI 文件 "{name}"...',
- 'toolbar.status.failedImportMidi': '導入 MIDI 文件失敗:{error}',
+ 'toolbar.save.error': '儲存時發生錯誤:{error}',
+ 'toolbar.load.error': '載入專案時發生錯誤:{error}',
+ 'toolbar.newProject.confirm': '確定要建立新專案嗎?目前未儲存的更改將會遺失。',
+ 'toolbar.project.notFound': '找不到專案 "{name}"。',
+ 'toolbar.openProject.confirm': '要開啟這個專案嗎?目前專案中未儲存的更改將會遺失。',
+ 'toolbar.status.loadFailed': '載入專案失敗:{error}',
+ 'toolbar.status.newProjectCreated': '已建立新專案 "{name}"',
+ 'toolbar.status.projectLoaded': '{description} 載入成功',
+ 'toolbar.status.projectExportedKgstudio': '專案 "{name}" 已匯出為 KGStudio 檔案',
+ 'toolbar.status.exportProjectError': '匯出專案時發生錯誤:{error}',
+ 'toolbar.export.failedProject': '匯出專案失敗:{error}',
+ 'toolbar.status.projectExportedMidi': '專案 "{name}" 已匯出為 MIDI 檔案',
+ 'toolbar.status.exportMidiError': '匯出 MIDI 時發生錯誤:{error}',
+ 'toolbar.export.failedMidi': '匯出專案為 MIDI 失敗:{error}',
+ 'toolbar.status.projectExportedWav': '專案 "{name}" 已匯出為 WAV 檔案',
+ 'toolbar.status.exportWavError': '匯出 WAV 時發生錯誤:{error}',
+ 'toolbar.export.failedWav': '匯出專案為 WAV 失敗:{error}',
+ 'toolbar.status.projectExportedMp3': '專案 "{name}" 已匯出為 MP3 檔案',
+ 'toolbar.status.exportMp3Error': '匯出 MP3 時發生錯誤:{error}',
+ 'toolbar.export.failedMp3': '匯出專案為 MP3 失敗:{error}',
+ 'toolbar.status.importFailed': '匯入檔案失敗:{error}',
+ 'toolbar.import.failedProjectFile': '匯入專案檔案失敗:{error}',
+ 'toolbar.import.corruptedKgstudio': '.kgstudio 檔案已損壞或無效:{error}',
+ 'toolbar.status.importingMidi': '正在匯入 MIDI 檔案 "{name}"...',
+ 'toolbar.status.failedImportMidi': '匯入 MIDI 檔案失敗:{error}',
'toolbar.status.playbackFailedStart': '播放啟動失敗',
'toolbar.status.recordingStoppedCommitted': '錄音已停止 - 音符已提交',
'toolbar.status.failedStopPlayback': '停止播放失敗',
@@ -453,44 +453,44 @@ export const zhHkMessages: TranslationMessages = {
'toolbar.bpm.prompt': '輸入新的 BPM({min}-{max}):',
'toolbar.bpm.invalid': 'BPM 無效。請輸入 {min} 到 {max} 之間的值。',
'toolbar.status.bpmChanged': 'BPM 已改為 {value}',
- 'toolbar.timeSignature.prompt': '設置拍號:',
+ 'toolbar.timeSignature.prompt': '設定拍號:',
'toolbar.status.timeSignatureChanged': '拍號已改為 {value}',
'toolbar.status.keySignatureChanged': '調號已改為 {value}',
- 'toolbar.status.copied': '項目已複製到剪貼板',
- 'toolbar.status.copyNone': '沒有可複製的已選項目',
- 'toolbar.status.pasted': '已從剪貼板粘貼項目',
- 'toolbar.status.pasteFailed': '無法粘貼 - 沒有有效的剪貼板內容或上下文',
+ 'toolbar.status.copied': '專案已複製到剪貼簿',
+ 'toolbar.status.copyNone': '沒有可複製的已選專案',
+ 'toolbar.status.pasted': '已從剪貼簿貼上專案',
+ 'toolbar.status.pasteFailed': '無法貼上,沒有有效的剪貼簿內容或上下文',
'toolbar.status.deleted': '已刪除所選區域',
- 'toolbar.status.deleteNone': '沒有選中可刪除的區域',
+ 'toolbar.status.deleteNone': '沒有已選取且可刪除的區域',
'toolbar.undo.none': '沒有可撤銷的操作',
'toolbar.redo.none': '沒有可重做的操作',
'toolbar.status.undid': '已撤銷:{description}',
'toolbar.status.redid': '已重做:{description}',
'toolbar.action': '操作',
- 'toolbar.status.chatToggled': '聊天窗口已切換',
- 'toolbar.status.settingsToggled': '設置面板已切換',
- 'toolbar.pianoRoll.selectMidiRegion': '請先選擇一個 MIDI 區域再打開鋼琴卷簾。',
+ 'toolbar.status.chatToggled': '聊天視窗已切換',
+ 'toolbar.status.settingsToggled': '設定面板已切換',
+ 'toolbar.pianoRoll.selectMidiRegion': '請先選擇一個 MIDI 區域,再開啟 Piano Roll。',
'toolbar.status.recordingStopped': '錄音已停止',
- 'toolbar.status.audioRecordingStarted': '音頻錄音已開始...',
- 'toolbar.recording.openMidiRegion': '開始錄音前,請先在鋼琴卷簾中打開一個 MIDI 區域。',
+ 'toolbar.status.audioRecordingStarted': '音訊錄音已開始...',
+ 'toolbar.recording.openMidiRegion': '開始錄音前,請先在 Piano Roll 中開啟一個 MIDI 區域。',
'toolbar.recording.selectMidiRegion': '開始錄音前,請先選擇一個 MIDI 區域。',
- 'toolbar.recording.noMidiDevice': '未檢測到 MIDI 設備。請連接 MIDI 鍵盤後重試。',
+ 'toolbar.recording.noMidiDevice': '未檢測到 MIDI 裝置。請連接 MIDI 鍵盤後重試。',
'toolbar.status.recordingStarted': '錄音已開始...',
'toolbar.button.new': '新建',
- 'toolbar.button.load': '打開',
- 'toolbar.button.save': '保存',
- 'toolbar.button.export': '導出',
- 'toolbar.button.import': '導入',
- 'toolbar.button.settings': '設置',
+ 'toolbar.button.load': '開啟',
+ 'toolbar.button.save': '儲存',
+ 'toolbar.button.export': '匯出',
+ 'toolbar.button.import': '匯入',
+ 'toolbar.button.settings': '設定',
'toolbar.button.undo': '撤銷',
'toolbar.button.redo': '重做',
'toolbar.button.select': '選擇',
'toolbar.button.pencil': '鉛筆',
'toolbar.button.splitRegion': '在播放頭處分割區域',
- 'toolbar.button.mergeRegions': '合併選中的 MIDI 區域',
+ 'toolbar.button.mergeRegions': '合併已選取的 MIDI 區域',
'toolbar.button.snapToGrid': '吸附到網格',
'toolbar.button.copy': '複製',
- 'toolbar.button.paste': '粘貼',
+ 'toolbar.button.paste': '貼上',
'toolbar.button.delete': '刪除',
'toolbar.button.backToBeginning': '回到開頭',
'toolbar.button.play': '播放',
@@ -507,18 +507,18 @@ export const zhHkMessages: TranslationMessages = {
'track.controls.automationDropdown': '自動化',
'track.controls.automation.volume': '音量',
'track.controls.automation.pan': '聲像',
- 'track.controls.settingsDropdown': '設置',
+ 'track.controls.settingsDropdown': '設定',
'track.controls.settings.deleteTrack': '刪除音軌',
'toolbar.keySignatureChooser': '選擇調號,當前為 {value}',
- 'toolbar.export.label': '導出',
- 'toolbar.importProject.title': '導入項目',
- 'toolbar.importProject.description': '將項目文件拖放到這裡',
- 'toolbar.openingProject': '正在打開項目...',
- 'fileImport.invalidType': '文件類型無效。請選擇以下擴展名之一的文件:{extensions}',
- 'fileImport.close': '關閉導入彈窗',
- 'fileImport.supportedFormats': '支持的格式:{formats}',
+ 'toolbar.export.label': '匯出',
+ 'toolbar.importProject.title': '匯入專案',
+ 'toolbar.importProject.description': '將專案檔案拖放到這裡',
+ 'toolbar.openingProject': '正在開啟專案...',
+ 'fileImport.invalidType': '檔案類型無效。請選擇以下副檔名之一的檔案:{extensions}',
+ 'fileImport.close': '關閉匯入彈窗',
+ 'fileImport.supportedFormats': '支援的格式:{formats}',
'fileImport.or': '或',
- 'fileImport.browse': '瀏覽文件',
+ 'fileImport.browse': '瀏覽檔案',
'instrument.group.PIANO_AND_KEYBOARDS': '鋼琴與鍵盤',
'instrument.group.GUITAR': '吉他',
'instrument.group.BASS': '貝斯',
@@ -603,9 +603,9 @@ export const zhHkMessages: TranslationMessages = {
'kgone.tab.remix': '混音',
'kgone.tab.repaint': '重繪',
'kgone.tab.separator': '分離',
- 'kgone.tab.requiresServer': '需要 K.G.One Music Studio 服務器集成',
+ 'kgone.tab.requiresServer': '需要 K.G.One Music Studio 伺服器整合',
// Shared across tabs
- 'kgone.shared.advancedSettings': '高級設置',
+ 'kgone.shared.advancedSettings': '進階設定',
'kgone.shared.caption': '描述',
'kgone.shared.lyrics': '歌詞',
'kgone.shared.lyricsPlaceholder': '[Verse 1]\n在這裡輸入歌詞...\n\n[Chorus]\n...',
@@ -617,16 +617,16 @@ export const zhHkMessages: TranslationMessages = {
'kgone.shared.thinking': '思考模式(CoT 元數據生成)',
'kgone.shared.selectedRegion': '已選區域',
'kgone.shared.track': '音軌',
- 'kgone.shared.poweredBy': '技術支持:',
- 'kgone.shared.btn.loadingModel': '加載模型中...',
+ 'kgone.shared.poweredBy': '技術支援:',
+ 'kgone.shared.btn.loadingModel': '載入模型中...',
'kgone.shared.btn.generating': '生成中...',
'kgone.shared.btn.processing': '處理中...',
'kgone.shared.btn.downloading': '下載中...',
'kgone.shared.btn.preparingUpload': '準備上傳...',
- 'kgone.shared.btn.importing': '導入中...',
- 'kgone.shared.hint.loadingModel': '正在加載模型——此過程可能需要 60 秒以上,請耐心等待...',
+ 'kgone.shared.btn.importing': '匯入中...',
+ 'kgone.shared.hint.loadingModel': '正在載入模型,此過程可能需要 60 秒以上,請耐心等候...',
'kgone.shared.hint.submitting': '正在提交生成請求...',
- 'kgone.shared.hint.downloadingAudio': '正在下載音頻...',
+ 'kgone.shared.hint.downloadingAudio': '正在下載音訊...',
// Clip tab
'kgone.clip.field.prompt': '提示詞',
'kgone.clip.field.promptPlaceholder': '例:粗糙, 酸性, 貝斯線, 303, 合成主音, FM, 次低音, 中高頻, 高頻相位, 高頻混響, 彎音, 8小節, 140 BPM, E 小調',
@@ -649,7 +649,7 @@ export const zhHkMessages: TranslationMessages = {
'kgone.clip.field.sigmaMax': 'Sigma 最大值',
'kgone.clip.field.cfgRescale': 'CFG 重縮放',
'kgone.clip.hint.generating': '正在生成片段...',
- 'kgone.clip.hint.drag': '將上方播放器拖至音軌以導入片段。拖到
音頻音軌可作為 WAV 區域導入(推薦),拖到
MIDI 音軌可作為 MIDI 區域導入。注意:MIDI 是從音頻轉錄的,可能不完全準確。',
+ 'kgone.clip.hint.drag': '將上方播放器拖至音軌以匯入片段。拖到
音訊音軌可作為 WAV 區域匯入(推薦),拖到
MIDI 音軌可作為 MIDI 區域匯入。注意:MIDI 是從音訊轉錄而來,未必完全準確。',
'kgone.clip.btn.generate': '生成片段',
'kgone.clip.poweredBy': 'Foundation-1',
// Full Song tab
@@ -659,7 +659,7 @@ export const zhHkMessages: TranslationMessages = {
'kgone.fullSong.hint.generating': '生成中...',
'kgone.fullSong.hint.generatingProgress': '生成中... {pct}% — {stage}',
'kgone.fullSong.hint.generatingProgressNoStage': '生成中... {pct}%',
- 'kgone.fullSong.hint.drag': '將上方播放器拖至
音頻音軌以導入歌曲。完整歌曲生成不支持拖至 MIDI 音軌。',
+ 'kgone.fullSong.hint.drag': '將上方播放器拖至
音訊音軌以匯入歌曲。完整歌曲生成不支援拖至 MIDI 音軌。',
'kgone.fullSong.btn.generate': '生成歌曲',
'kgone.fullSong.poweredBy': 'ACE-Step 1.5',
// Remix tab
@@ -674,18 +674,18 @@ export const zhHkMessages: TranslationMessages = {
'kgone.remix.hint.generating': '正在生成混音...',
'kgone.remix.hint.generatingProgress': '正在生成混音... {pct}% — {stage}',
'kgone.remix.hint.generatingProgressNoStage': '正在生成混音... {pct}%',
- 'kgone.remix.hint.drag': '將上方播放器拖至
音頻音軌以導入混音。',
- 'kgone.remix.hint.noRegion': '請在時間軸上選擇一個音頻區域以進行混音。僅支持音頻區域——MIDI 區域不可混音。',
+ 'kgone.remix.hint.drag': '將上方播放器拖至
音訊音軌以匯入混音。',
+ 'kgone.remix.hint.noRegion': '請在時間軸上選擇一個音訊區域以進行混音。僅支援音訊區域,MIDI 區域不可混音。',
'kgone.remix.btn.generate': '生成混音',
'kgone.remix.btn.processingRemix': '處理混音中...',
- 'kgone.remix.btn.importAligned': '對齊源區域並導入',
+ 'kgone.remix.btn.importAligned': '對齊來源區域並匯入',
'kgone.remix.poweredBy': 'ACE-Step 1.5',
// Repaint tab
'kgone.repaint.field.repaintRange': '重繪範圍',
- 'kgone.repaint.field.loopModeOff': '循環模式已關閉。請啟用工具欄上的循環按鈕並設置循環範圍以定義重繪窗口。',
+ 'kgone.repaint.field.loopModeOff': '循環模式已關閉。請啟用工具列上的循環按鈕並設定循環範圍,以定義重繪視窗。',
'kgone.repaint.field.start': '開始',
'kgone.repaint.field.end': '結束',
- 'kgone.repaint.field.untilEnd': '直至音頻末尾',
+ 'kgone.repaint.field.untilEnd': '直到音訊結尾',
'kgone.repaint.field.captionPlaceholder': '例:風格:爵士,感覺:流暢悠揚,編排:鋼琴、立式貝斯、刷式鼓...',
'kgone.repaint.field.captionHint': '描述重繪段落的目標風格和編排。',
'kgone.repaint.field.lyricsHint': '留空則保留原歌詞,或為重繪段落提供新歌詞。',
@@ -695,39 +695,39 @@ export const zhHkMessages: TranslationMessages = {
'kgone.repaint.hint.generating': '正在生成重繪...',
'kgone.repaint.hint.generatingProgress': '正在生成重繪... {pct}% — {stage}',
'kgone.repaint.hint.generatingProgressNoStage': '正在生成重繪... {pct}%',
- 'kgone.repaint.hint.drag': '將上方播放器拖至
音頻音軌以導入重繪結果。',
- 'kgone.repaint.hint.noRegion': '請在時間軸上選擇一個音頻區域以進行重繪。僅支持音頻區域——MIDI 區域不可重繪。',
+ 'kgone.repaint.hint.drag': '將上方播放器拖至
音訊音軌以匯入重繪結果。',
+ 'kgone.repaint.hint.noRegion': '請在時間軸上選擇一個音訊區域以進行重繪。僅支援音訊區域,MIDI 區域不可重繪。',
'kgone.repaint.btn.generate': '生成重繪',
'kgone.repaint.btn.processingRepaint': '處理重繪中...',
- 'kgone.repaint.btn.importAligned': '對齊源區域並導入',
+ 'kgone.repaint.btn.importAligned': '對齊來源區域並匯入',
'kgone.repaint.poweredBy': 'ACE-Step 1.5',
// Separator tab
'kgone.separator.field.separationModel': '分離模型',
- 'kgone.separator.field.chunkDuration': '可選音頻分塊時長(秒)',
+ 'kgone.separator.field.chunkDuration': '可選音訊分塊時長(秒)',
'kgone.separator.field.chunkDurationPlaceholder': '留空則處理整個區域',
'kgone.separator.field.modelOverlap': '模型重疊',
- 'kgone.separator.hint.drag': '將上方各音軌播放器拖至
音頻音軌以導入。不支持拖至 MIDI 音軌進行音軌分離。',
- 'kgone.separator.hint.noRegion.download': '請下載 {model},然後在時間軸上選擇一個音頻區域以提取音軌。',
- 'kgone.separator.hint.noRegion.select': '請在時間軸上選擇一個音頻區域以提取音軌。僅支持音頻區域——MIDI 區域不可分離。',
+ 'kgone.separator.hint.drag': '將上方各音軌播放器拖至
音訊音軌以匯入。不支援拖至 MIDI 音軌進行音軌分離。',
+ 'kgone.separator.hint.noRegion.download': '請下載 {model},然後在時間軸上選擇一個音訊區域以提取音軌。',
+ 'kgone.separator.hint.noRegion.select': '請在時間軸上選擇一個音訊區域以提取音軌。僅支援音訊區域,MIDI 區域不可分離。',
'kgone.separator.btn.separateStems': '分離音軌',
- 'kgone.separator.btn.importAllStems': '將所有音軌導入時間軸',
+ 'kgone.separator.btn.importAllStems': '將所有音軌匯入時間軸',
'kgone.separator.poweredBy': 'UVR5 CLI',
'kgone.separator.model.vocalInstMedium': '人聲與樂器(中等精度)',
'kgone.separator.model.vocalInstHigh': '人聲與樂器(高精度)',
'kgone.separator.model.6stem': '人聲、鼓、貝斯、吉他、鋼琴及其他',
'kgone.separator.model.htdemucs4s': '人聲、鼓、貝斯及其他',
- 'kgone.separator.btn.server.loadingModel': '加載模型中...',
+ 'kgone.separator.btn.server.loadingModel': '載入模型中...',
'kgone.separator.btn.server.generating': '準備上傳...',
'kgone.separator.btn.server.polling': '正在分離音軌...',
'kgone.separator.btn.server.downloading': '下載中...',
'kgone.separator.btn.local.loadingModel': '準備本地模型...',
- 'kgone.separator.btn.local.generating': '準備音頻...',
+ 'kgone.separator.btn.local.generating': '準備音訊...',
'kgone.separator.btn.local.polling': '本地分離中...',
'kgone.separator.btn.local.downloading': '收尾處理...',
'kgone.separator.local.title': '本地分離模式',
- 'kgone.separator.local.description': '如果 K.G.One Music Studio 不可用,本地分離模式提供了一種直接在瀏覽器中提取音軌的內置替代方案。提供兩種本地模型:人聲與樂器(中等精度),以及人聲、鼓、貝斯及其他。下方的下載狀態反映當前選定的模型。人聲與樂器(中等精度)的處理時間通常比人聲、鼓、貝斯及其他更長,總處理時間仍取決於您的硬件配置。如果處理回退至 CPU,分離運行期間頁面響應可能暫時變慢。',
- 'kgone.separator.local.learnMore': '了解更多關於 K.G.One Music Studio 服務器集成的信息。',
- 'kgone.separator.local.provider': '當前設備:',
+ 'kgone.separator.local.description': '如果 K.G.One Music Studio 不可用,本地分離模式提供一個可直接在瀏覽器中提取音軌的內建替代方案。提供兩種本地模型:人聲與樂器(中等精度),以及人聲、鼓、貝斯及其他。下方的下載狀態反映目前選定的模型。人聲與樂器(中等精度)的處理時間通常比人聲、鼓、貝斯及其他更長,總處理時間仍取決於您的硬體配置。如果處理回退至 CPU,分離運行期間頁面回應可能會暫時變慢。',
+ 'kgone.separator.local.learnMore': '了解更多關於 K.G.One Music Studio 伺服器整合的資訊。',
+ 'kgone.separator.local.provider': '目前裝置:',
'kgone.separator.local.model': '模型:',
'kgone.separator.local.downloaded': '已下載',
'kgone.separator.local.notDownloaded': '未下載',
@@ -743,37 +743,37 @@ export const zhHkMessages: TranslationMessages = {
'kgone.separator.local.progress.downloadingMbOnly': '正在下載 {name}... {received} MB',
'kgone.separator.local.progress.ready': '{name} 已就緒。',
'kgone.separator.local.progress.preparingRuntime': '正在準備 ONNX 運行時環境...',
- 'kgone.separator.local.progress.readingAudio': '正在讀取音頻文件...',
+ 'kgone.separator.local.progress.readingAudio': '正在讀取音訊檔案...',
'kgone.separator.local.progress.running': '正在瀏覽器中執行分離...',
'kgone.separator.local.progress.complete': '分離完成。',
- 'openProjectModal.title': '打開項目',
+ 'openProjectModal.title': '開啟專案',
'openProjectModal.close': '關閉',
- 'openProjectModal.loading': '正在加載項目...',
+ 'openProjectModal.loading': '正在載入專案...',
'openProjectModal.date.unknown': '未知',
- 'openProjectModal.filter.placeholder': '篩選項目...',
- 'openProjectModal.viewToggle.projects': '項目',
+ 'openProjectModal.filter.placeholder': '篩選專案...',
+ 'openProjectModal.viewToggle.projects': '專案',
'openProjectModal.viewToggle.trash': '回收站',
- 'openProjectModal.trash.hint': '已刪除的項目將在 30 天後自動移除。',
+ 'openProjectModal.trash.hint': '已刪除的專案將在 30 天後自動移除。',
'openProjectModal.sort.name': '名稱',
- 'openProjectModal.sort.created': '創建時間',
+ 'openProjectModal.sort.created': '建立時間',
'openProjectModal.sort.updated': '更新時間',
'openProjectModal.empty.trash': '回收站為空',
- 'openProjectModal.empty.noProjects': '暫無已保存的項目',
- 'openProjectModal.empty.noMatch': '沒有符合篩選條件的項目',
- 'openProjectModal.meta.created': '創建於 {date}',
+ 'openProjectModal.empty.noProjects': '暫無已儲存的專案',
+ 'openProjectModal.empty.noMatch': '沒有符合篩選條件的專案',
+ 'openProjectModal.meta.created': '建立於 {date}',
'openProjectModal.meta.updated': '更新於 {date}',
'openProjectModal.meta.deleted': '刪除於 {date}',
- 'openProjectModal.action.open': '打開',
+ 'openProjectModal.action.open': '開啟',
'openProjectModal.action.duplicate': '複製',
'openProjectModal.action.delete': '刪除',
- 'openProjectModal.action.restore': '恢復',
+ 'openProjectModal.action.restore': '還原',
'openProjectModal.action.deletePermanently': '永久刪除',
- 'openProjectModal.dialog.duplicateName': '請輸入複製項目的名稱:',
- 'openProjectModal.dialog.invalidName': '項目名稱無效。只允許使用字母、數字、空格、連字符、下劃線、句號和括號。',
- 'openProjectModal.dialog.duplicateError': '複製項目失敗:{error}',
- 'openProjectModal.dialog.deleteError': '刪除項目失敗:{error}',
- 'openProjectModal.dialog.restoreError': '恢復項目失敗:{error}',
+ 'openProjectModal.dialog.duplicateName': '請輸入複製專案的名稱:',
+ 'openProjectModal.dialog.invalidName': '專案名稱無效。只允許使用字母、數字、空格、連字符、底線、句號和括號。',
+ 'openProjectModal.dialog.duplicateError': '複製專案失敗:{error}',
+ 'openProjectModal.dialog.deleteError': '刪除專案失敗:{error}',
+ 'openProjectModal.dialog.restoreError': '還原專案失敗:{error}',
'openProjectModal.dialog.confirmPermanentDelete': '確定要永久刪除"{name}"嗎?\n\n此操作無法撤銷。',
- 'openProjectModal.dialog.permanentDeleteError': '永久刪除項目失敗:{error}',
+ 'openProjectModal.dialog.permanentDeleteError': '永久刪除專案失敗:{error}',
};
From a64ba428c8ab1a3d0b016562752ed17629219092 Mon Sep 17 00:00:00 2001
From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com>
Date: Sun, 31 May 2026 12:35:51 -0700
Subject: [PATCH 12/13] chore(i18n): minor wording adjustments
---
src/i18n/messages/en_us.ts | 8 ++++----
src/i18n/messages/fr_fr.ts | 8 ++++----
src/i18n/messages/zh_cn.ts | 8 ++++----
src/i18n/messages/zh_hk.ts | 8 ++++----
4 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/src/i18n/messages/en_us.ts b/src/i18n/messages/en_us.ts
index 445cbb6..56dacfc 100644
--- a/src/i18n/messages/en_us.ts
+++ b/src/i18n/messages/en_us.ts
@@ -80,11 +80,11 @@ export const enUsMessages: TranslationMessages = {
'settings.audioIo.deviceRouting': 'Device Routing',
'settings.audioIo.refresh': 'Refresh Device List',
'settings.audioIo.refreshing': 'Refreshing…',
- 'settings.audioIo.description': 'Choose the devices KGStudio should use for recording and playback. Input changes apply to the next recording session. Output changes require a page refresh in v1.',
+ 'settings.audioIo.description': 'Choose the devices KGStudio should use for recording and playback. Input changes apply to the next recording session. Output changes require a page refresh.',
'settings.audioIo.inputDevice': 'Audio Input Device',
'settings.audioIo.outputDevice': 'Audio Output Device',
'settings.audioIo.inputHelp': 'Changes apply to the next audio recording. If the selected device is removed, KGStudio will fall back to System Default.',
- 'settings.audioIo.outputHelp': 'Output-device changes require refresh in v1. Browser support for non-default output routing is limited, so KGStudio will continue on System Default when unsupported.',
+ 'settings.audioIo.outputHelp': 'Output-device changes require a page refresh. Browser support for non-default output routing is limited, so KGStudio will continue on System Default when unsupported.',
'settings.audioIo.outputSinkUnsupported': 'This browser does not expose reliable live Web Audio sink switching. Non-default output selection is best-effort and may remain on System Default.',
'settings.audioIo.chooseOutputDevice': 'Choose Output Device…',
'settings.audioIo.previousSelectedInput': 'Previously Selected Input (permission required to verify)',
@@ -96,9 +96,9 @@ export const enUsMessages: TranslationMessages = {
'settings.audioIo.status.inputDefaultNextSession': 'Audio input will use System Default on the next recording session.',
'settings.audioIo.status.inputChangedNextSession': 'Audio input will change on the next recording session.',
'settings.audioIo.status.outputDefaultAfterRefresh': 'Audio output will use System Default after refresh.',
- 'settings.audioIo.status.outputSavedRefreshRequired': 'Audio output device saved. Refresh the page to apply it in v1.',
+ 'settings.audioIo.status.outputSavedRefreshRequired': 'Audio output device saved. Refresh the page to apply it.',
'settings.audioIo.status.outputPromptUnsupported': 'This browser does not support prompting for audio output devices.',
- 'settings.audioIo.status.outputSelectedRefreshRequired': 'Output device selected. Refresh the page to apply it in v1.',
+ 'settings.audioIo.status.outputSelectedRefreshRequired': 'Output device selected. Refresh the page to apply it.',
'settings.audioIo.status.outputSelectionDenied': 'The browser did not allow selecting a non-default output device.',
'settings.behavior.title': 'Behavior',
'settings.behavior.editor': 'Editor',
diff --git a/src/i18n/messages/fr_fr.ts b/src/i18n/messages/fr_fr.ts
index 256b849..7e36623 100644
--- a/src/i18n/messages/fr_fr.ts
+++ b/src/i18n/messages/fr_fr.ts
@@ -76,11 +76,11 @@ export const frFrMessages: TranslationMessages = {
'settings.audioIo.deviceRouting': 'Routage des appareils',
'settings.audioIo.refresh': 'Rafraîchir la liste des appareils',
'settings.audioIo.refreshing': 'Rafraîchissement…',
- 'settings.audioIo.description': 'Choisissez les appareils que KGStudio doit utiliser pour l’enregistrement et la lecture. Les changements d’entrée s’appliquent à la prochaine session d’enregistrement. Les changements de sortie demandent un rechargement de la page en v1.',
+ 'settings.audioIo.description': 'Choisissez les appareils que KGStudio doit utiliser pour l’enregistrement et la lecture. Les changements d’entrée s’appliquent à la prochaine session d’enregistrement. Les changements de sortie demandent un rechargement de la page.',
'settings.audioIo.inputDevice': 'Appareil d’entrée audio',
'settings.audioIo.outputDevice': 'Appareil de sortie audio',
'settings.audioIo.inputHelp': 'Les changements s’appliquent au prochain enregistrement audio. Si l’appareil choisi est retiré, KGStudio reviendra à l’appareil système par défaut.',
- 'settings.audioIo.outputHelp': 'Les changements de sortie demandent un rechargement en v1. La prise en charge du routage vers une sortie non par défaut est limitée dans les navigateurs, donc KGStudio continuera à utiliser la sortie système par défaut lorsqu’elle n’est pas prise en charge.',
+ 'settings.audioIo.outputHelp': 'Les changements de sortie demandent un rechargement de la page. La prise en charge du routage vers une sortie non par défaut est limitée dans les navigateurs, donc KGStudio continuera à utiliser la sortie système par défaut lorsqu’elle n’est pas prise en charge.',
'settings.audioIo.outputSinkUnsupported': 'Ce navigateur n’expose pas de bascule fiable en direct de la sortie Web Audio. La sélection d’une sortie non par défaut reste un effort au mieux et peut finalement rester sur la sortie système par défaut.',
'settings.audioIo.chooseOutputDevice': 'Choisir l’appareil de sortie…',
'settings.audioIo.previousSelectedInput': 'Entrée précédemment sélectionnée (autorisation requise pour vérification)',
@@ -92,9 +92,9 @@ export const frFrMessages: TranslationMessages = {
'settings.audioIo.status.inputDefaultNextSession': 'L’entrée audio utilisera l’appareil système par défaut lors de la prochaine session d’enregistrement.',
'settings.audioIo.status.inputChangedNextSession': 'L’entrée audio changera lors de la prochaine session d’enregistrement.',
'settings.audioIo.status.outputDefaultAfterRefresh': 'La sortie audio utilisera l’appareil système par défaut après rechargement.',
- 'settings.audioIo.status.outputSavedRefreshRequired': 'L’appareil de sortie audio a été enregistré. Rechargez la page pour l’appliquer en v1.',
+ 'settings.audioIo.status.outputSavedRefreshRequired': 'L’appareil de sortie audio a été enregistré. Rechargez la page pour l’appliquer.',
'settings.audioIo.status.outputPromptUnsupported': 'Ce navigateur ne prend pas en charge l’invite de sélection d’un appareil de sortie audio.',
- 'settings.audioIo.status.outputSelectedRefreshRequired': 'Appareil de sortie sélectionné. Rechargez la page pour l’appliquer en v1.',
+ 'settings.audioIo.status.outputSelectedRefreshRequired': 'Appareil de sortie sélectionné. Rechargez la page pour l’appliquer.',
'settings.audioIo.status.outputSelectionDenied': 'Le navigateur n’a pas autorisé la sélection d’une sortie non par défaut.',
'settings.behavior.title': 'Comportement',
'settings.behavior.editor': 'Éditeur',
diff --git a/src/i18n/messages/zh_cn.ts b/src/i18n/messages/zh_cn.ts
index 908db7e..bc51cdc 100644
--- a/src/i18n/messages/zh_cn.ts
+++ b/src/i18n/messages/zh_cn.ts
@@ -78,11 +78,11 @@ export const zhCnMessages: TranslationMessages = {
'settings.audioIo.deviceRouting': '设备路由',
'settings.audioIo.refresh': '刷新设备列表',
'settings.audioIo.refreshing': '刷新中…',
- 'settings.audioIo.description': '选择 KGStudio 用于录音和播放的设备。输入设备的更改会在下一次录音时生效。输出设备的更改在 v1 中需要刷新页面后生效。',
+ 'settings.audioIo.description': '选择 KGStudio 用于录音和播放的设备。输入设备的更改会在下一次录音时生效。输出设备的更改需要刷新页面后生效。',
'settings.audioIo.inputDevice': '音频输入设备',
'settings.audioIo.outputDevice': '音频输出设备',
'settings.audioIo.inputHelp': '更改会在下一次录音时生效。如果所选设备被移除,KGStudio 会回退到系统默认设备。',
- 'settings.audioIo.outputHelp': '在 v1 中,输出设备更改需要刷新页面。浏览器对非默认输出路由的支持有限,因此在不支持时 KGStudio 会继续使用系统默认设备。',
+ 'settings.audioIo.outputHelp': '输出设备更改需要刷新页面。浏览器对非默认输出路由的支持有限,因此在不支持时 KGStudio 会继续使用系统默认设备。',
'settings.audioIo.outputSinkUnsupported': '此浏览器未提供可靠的实时 Web Audio 输出切换能力。非默认输出设备选择仅尽力而为,最终可能仍会使用系统默认设备。',
'settings.audioIo.chooseOutputDevice': '选择输出设备…',
'settings.audioIo.previousSelectedInput': '先前选择的输入设备(需要权限才能验证)',
@@ -94,9 +94,9 @@ export const zhCnMessages: TranslationMessages = {
'settings.audioIo.status.inputDefaultNextSession': '音频输入将在下一次录音时使用系统默认设备。',
'settings.audioIo.status.inputChangedNextSession': '音频输入将在下一次录音时切换。',
'settings.audioIo.status.outputDefaultAfterRefresh': '刷新后音频输出将使用系统默认设备。',
- 'settings.audioIo.status.outputSavedRefreshRequired': '音频输出设备已保存。在 v1 中请刷新页面以应用。',
+ 'settings.audioIo.status.outputSavedRefreshRequired': '音频输出设备已保存。请刷新页面以应用。',
'settings.audioIo.status.outputPromptUnsupported': '此浏览器不支持弹出音频输出设备选择。',
- 'settings.audioIo.status.outputSelectedRefreshRequired': '已选择输出设备。请刷新页面以在 v1 中应用。',
+ 'settings.audioIo.status.outputSelectedRefreshRequired': '已选择输出设备。请刷新页面以应用。',
'settings.audioIo.status.outputSelectionDenied': '浏览器不允许选择非默认输出设备。',
'settings.behavior.title': '行为',
'settings.behavior.editor': '编辑器',
diff --git a/src/i18n/messages/zh_hk.ts b/src/i18n/messages/zh_hk.ts
index 61cb04a..40dceb5 100644
--- a/src/i18n/messages/zh_hk.ts
+++ b/src/i18n/messages/zh_hk.ts
@@ -78,11 +78,11 @@ export const zhHkMessages: TranslationMessages = {
'settings.audioIo.deviceRouting': '裝置路由',
'settings.audioIo.refresh': '重新整理裝置清單',
'settings.audioIo.refreshing': '重新整理中…',
- 'settings.audioIo.description': '選擇 KGStudio 用於錄音與播放的裝置。輸入裝置的變更會在下一次錄音時生效。輸出裝置的變更在 v1 中需要重新整理頁面後生效。',
+ 'settings.audioIo.description': '選擇 KGStudio 用於錄音與播放的裝置。輸入裝置的變更會在下一次錄音時生效。輸出裝置的變更需要重新整理頁面後生效。',
'settings.audioIo.inputDevice': '音訊輸入裝置',
'settings.audioIo.outputDevice': '音訊輸出裝置',
'settings.audioIo.inputHelp': '變更會在下一次錄音時生效。如果所選裝置被移除,KGStudio 會回退到系統預設裝置。',
- 'settings.audioIo.outputHelp': '在 v1 中,輸出裝置變更需要重新整理頁面。瀏覽器對非預設輸出路由的支援有限,因此在不支援時 KGStudio 會繼續使用系統預設裝置。',
+ 'settings.audioIo.outputHelp': '輸出裝置變更需要重新整理頁面。瀏覽器對非預設輸出路由的支援有限,因此在不支援時 KGStudio 會繼續使用系統預設裝置。',
'settings.audioIo.outputSinkUnsupported': '此瀏覽器未提供可靠的即時 Web Audio 輸出切換能力。非預設輸出裝置選擇僅屬盡力而為,最終可能仍會使用系統預設裝置。',
'settings.audioIo.chooseOutputDevice': '選擇輸出裝置…',
'settings.audioIo.previousSelectedInput': '先前選擇的輸入裝置(需要權限才能驗證)',
@@ -94,9 +94,9 @@ export const zhHkMessages: TranslationMessages = {
'settings.audioIo.status.inputDefaultNextSession': '音訊輸入將在下一次錄音時使用系統預設裝置。',
'settings.audioIo.status.inputChangedNextSession': '音訊輸入將在下一次錄音時切換。',
'settings.audioIo.status.outputDefaultAfterRefresh': '重新整理後音訊輸出將使用系統預設裝置。',
- 'settings.audioIo.status.outputSavedRefreshRequired': '音訊輸出裝置已儲存。在 v1 中請重新整理頁面以套用。',
+ 'settings.audioIo.status.outputSavedRefreshRequired': '音訊輸出裝置已儲存。請重新整理頁面以套用。',
'settings.audioIo.status.outputPromptUnsupported': '此瀏覽器不支援彈出音訊輸出裝置選擇。',
- 'settings.audioIo.status.outputSelectedRefreshRequired': '已選擇輸出裝置。請重新整理頁面以在 v1 中套用。',
+ 'settings.audioIo.status.outputSelectedRefreshRequired': '已選擇輸出裝置。請重新整理頁面以套用。',
'settings.audioIo.status.outputSelectionDenied': '瀏覽器不允許選擇非預設輸出裝置。',
'settings.behavior.title': '行為',
'settings.behavior.editor': '編輯器',
From e3c609fe38db0c441ee6da8fd540e66f742bfccb Mon Sep 17 00:00:00 2001
From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com>
Date: Sun, 31 May 2026 13:08:50 -0700
Subject: [PATCH 13/13] fix: minor UI issues
---
src/components/KGOnePanel.css | 18 ------------------
src/components/KGOnePanel.tsx | 6 +++---
2 files changed, 3 insertions(+), 21 deletions(-)
diff --git a/src/components/KGOnePanel.css b/src/components/KGOnePanel.css
index dbfc3bf..9d10ba8 100644
--- a/src/components/KGOnePanel.css
+++ b/src/components/KGOnePanel.css
@@ -304,24 +304,6 @@
margin-top: 6px;
}
-.kgone-btn-generate-accent {
- background-color: #4a5fa0;
- border: none;
- color: #e0e0e0;
- cursor: pointer;
- transition: background-color 0.15s;
-}
-
-.kgone-btn-generate-accent:hover:not(:disabled) {
- background-color: #5a70b8;
-}
-
-.kgone-btn-generate-accent:disabled {
- background-color: #3a3a3a;
- color: #666;
- cursor: not-allowed;
-}
-
.kgone-btn-generate.dialog-btn {
min-height: 32px;
}
diff --git a/src/components/KGOnePanel.tsx b/src/components/KGOnePanel.tsx
index 07fe4ea..64235e6 100644
--- a/src/components/KGOnePanel.tsx
+++ b/src/components/KGOnePanel.tsx
@@ -514,7 +514,7 @@ const ClipTab: React.FC
= ({ bpm, keySignature }) => {
)}