Skip to content

milestone 2.0.0 - #73

Open
flier268 wants to merge 121 commits into
masterfrom
migrate-to-nodejs
Open

flier268 wants to merge 121 commits into
masterfrom
migrate-to-nodejs

Conversation

@flier268

@flier268 flier268 commented Aug 14, 2026 •

Copy link
Copy Markdown
Owner

ConvertZZ 2.0.0

自 1.0.0.8(WPF/Windows 限定)起的第一個公開預發行版。

2.0 以 Vue 3、Element Plus、Tauri 2 與 Rust 轉換核心重寫,正式支援 Windows x64 與 Linux x64。

這是預發行版,供測試與回饋。正式版前行為與安裝流程仍可能調整。

使用者不需要另外安裝 Node.js、FFmpeg 或 TagLib。

相較 1.0.0.8 的主要變化

架構與平台

  • 由單一 Windows WPF 應用改為跨平台桌面程式;轉換核心與桌面層同程序,發行包不含外部 Node.js 執行檔。
  • Linux 可使用 AppImage、DEB、RPM;乾淨環境不需建置用 *-dev 套件即可執行。
  • 保留單一執行個體、系統托盤、獨立浮動球、全域快捷鍵與舊版命令列語意。

轉換引擎

  • 預設引擎改為新式分詞(ws-segment-rs + cjk-convert-rs);簡轉繁會做同義詞最佳化。
  • 舊版字典仍讀取 UTF-8 BOM 六欄 Dictionary.csv,保留啟用欄位、優先權、長詞優先與 9999 保護詞。
  • ZhConvert 改呼叫官方 /convert,快取 /service-info 二十四小時;網路失敗時不會自動切換引擎。
  • 空白、換行、標點與未知片段盡量保持原位;長文會在安全邊界分段。

檔案與寫入安全(刻意與舊版不同)

  • 檔案內容、檔名與音訊標籤作業都會先預覽,確認後才寫入。
  • 檔名衝突預設略過;覆寫需額外確認。
  • 內容先寫入同目錄暫存檔,驗證成功後才取代;檔名採兩階段重新命名,失敗時嘗試回復。
  • 遞迴處理不跟隨符號連結。
  • 轉換前預設建立 .bak 備份(可用設定或 /b:f 關閉)。
  • 舊命令列參數大多相容,但不再提供無確認直接寫入。

音訊標籤

  • MP3:ID3v1/ID3v2.3/ID3v2.4(Rust id3);ID3v1 可修復 Big5/GBK 損壞文字。
  • APE:APEv2;OGG/OGA/Opus:Vorbis Comment(Rust lofty)。
  • 未選欄位、未知欄位、二進位欄位與封面不變;不會重新編碼音訊內容。
  • 離線即可掃描 APE/OGG,不在執行時下載 WASM。

設定與字典

  • 首次發現舊版 ConvertZZ.json 會詢問;同意後只讀取並另存為 2.0 設定,不修改來源。
  • 儲存 Dictionary.csv 前會詢問,並先建立不覆蓋的時間戳備份。

自動更新

  • Windows 安裝程式與 Linux AppImage 支援應用程式內更新,並以 minisign 公鑰驗證。
  • DEB/RPM 不會就地覆寫;檢查更新時會改開啟 GitHub Releases。
  • 預設只檢查正式版;設定中可開啟「檢查開發/預發佈版本」才會看到本 beta。

已知限制與平台差異

  • Linux Wayland:全域快捷鍵與自動複製貼上於本版停用;浮動球置頂依合成器能力而定。
  • Linux 托盤通常需要 AppIndicator/StatusNotifier;缺少時主視窗仍可使用。Tauri 在 Linux 不提供托盤左鍵事件,請用選單開啟主視窗。
  • ZhConvert API 金鑰優先存入作業系統憑證庫;Linux 缺少 Secret Service 時只保留於目前工作階段。
  • 少數字形結果可能與舊版 Windows LCMapStringEx 不同。
  • 編碼工具改為明確指定編碼,不再跟隨舊版 Encoding.Default 系統碼頁。

回報問題

請到 GitHub Issues,並附上作業系統、桌面環境(X11/Wayland)、安裝格式與重現步驟。

移除硬編碼的雙擊轉繁與右鍵轉簡。左鍵無輔助鍵只拖曳,輔助鍵加點擊執行設定動作,右鍵開啟與舊版相同的選單。
托盤改列與舊懸浮球相同的轉換、工具與視窗項目,並一律送出 app://legacy-action。同步修正 AppImage 驗收測試字串。
更新已取得證據的項目狀態,並寫入 2026-08-14 的本機驗收紀錄。
開發與 CI 改用 ffmpeg-static 與 tests/fixtures,不再下載遠端樣本或依賴系統 ffmpeg。
該 ffmpeg 不打進發行包。
驗收人已確認關於頁會開啟 GitHub Issues 與 Releases。
主視窗預設不可見。設定新增「啟動時顯示主視窗」,命令列參數或發現更新時仍會顯示。
設定頁快捷鍵欄位改為唯讀並攔截鍵盤事件,不再讓使用者手打加速鍵字串。
首次開啟會顯示系統導覽,其中一步詢問是否匯入 ConvertZZ.json。設定頁移除此匯入按鈕,關於頁可重看導覽。
移除設定頁頂部儲存按鈕。有未儲存變更時,改在畫面底部顯示提示與儲存按鈕。
啟動時先隱藏主視窗與懸浮球,定位後再顯示。
轉換完成改為獨立 Toast,顯示在游標附近,不再裁切於懸浮球內。
補上 ID3v1 Big5/GBK、多值標籤、設定備份失敗與四種音訊副檔名案例,並更新對應驗收狀態。
以 QEMU 安裝 DEB,確認沒有 Node.js 與開發套件,並離線掃描 APE/OGG。映像優先從台灣鏡像下載。
依 test:qemu 通過結果,將 B-03、I-09、J-09、J-10、J-13 標為已通過。
視窗背景改為透明,球體填滿視窗,並停用文字選取。
保留襯線 Z 與上標 2,配色改為 2.0 青綠。懸浮球、側邊欄與關於頁共用同一份路徑圖示,避免字型把 2 畫成 z,並把浮動視窗鎖回 72×72。
存檔與 commit 前會執行 rustfmt 與 Prettier,並套用現有原始碼格式。
Vue Test Utils 的 get() 會省略 exists,導致 vue-tsc 失敗。
將套件管理員改為 pnpm 11,build script 設定改到 pnpm-workspace.yaml。
TypeScript 升到 6.0.3,並依官方建議移除已棄用的 baseUrl。
補上目錄責任、層級邊界與套件更新方式,供後續代理依專案慣例修改。
讓 CI 與 Release 使用 pnpm/action-setup@v6,不再寫死 10.26.1。
依 ID3 標頭擷取 MP3 音訊,讓 2.3/UTF-16 寫回通過驗證。
建立 SettingsV2 驗收表,並在備份失敗時顯示錯誤且不覆寫設定。
以本機正式建置驗證 /file 預覽、APE/OGG 標籤畫面、浮動球拖動與關閉後仍留在背景。
去掉結尾 .app,避免與 macOS 套件副檔名衝突,並同步憑證庫服務名稱。
Windows 安裝程式與 Linux AppImage 會先確認再下載安裝。
發行工作流程會簽署產物並產生 latest.json。
DEB 與 RPM 仍改開啟 GitHub Releases。
舊版 ConvertZZ.json 本來就不會被改寫,結果會另存為 2.0 設定。
關閉 store 自動存檔,載入時先重讀磁碟。浮動球移動改走 patchSavedSettings,避免用過期記憶體覆寫快捷鍵。
只註冊已啟用且有組合鍵的項目;已填但未啟用時提出警告。錯誤改走應用程式通知。
DictTokenizer 對長 CJK 句會指數展開,改為依標點切分並限制單元字數;同步升級分詞套件並補混合假名與切分測試。
聚合時略過 extra-correction 已有的錯詞,回環引擎仍用套件基線。檢查點指紋納入 extra-correction,避免與產品層產出混用。
加入由 dcard 語料產出的額外修正詞典。另附已核對的簡體、繁體整詞對與轉換腳本,用來把語料裡混入的簡體轉回繁體,避免把簡體原文當成正字。
避免 tauri dev 的 cargo run 因 roundtrip-dict 第二個 binary 失敗。
extra 同義詞只改符合詞性的整詞;回環產出帶詞性分詞表、簡繁詞形與保護詞「和牛」。
長句不再硬切 40 字。轉換依記憶體預算並行,並可中途取消。
檔案確認後逐檔轉換並立即落盤,停止後保留已寫入變更。
快速、檔案與音訊頁顯示進度與預估剩餘時間。
Tauri 打包不再附帶 roundtrip-dict。工具改由 workspace 成員單獨編譯。
新增 synonym 導向稽核,寫入衍生檔後產出 min/full 報告;
並提供 check-synonym-orientation 子命令供單獨重跑。
加入全視窗預覽,支援長文分頁與跳轉差異,並在跳轉時維持左右同步捲動。
未變更的語料檔沿用 shard,不再壓實成 committed.pairs。
兩邊皆為原文正詞的異體不互代;跨分詞邊界的假詞對不寫入。
extra 不再走 convert_synonym;以詞性、前詞與字形距離避免機制→機製。
璇/疱/么等改由 conversion-specials/rules.txt 描述。
去掉跨邊界假詞與兩邊皆為正詞的互代,並縮小產出規模。
只在新增或修改 rules.txt 時套用,欄位語法指向既有 README。
進度文字改到進度條下方;檔案清單、差異檢視、工具編輯區、字典表與設定分頁改吃剩餘高度,避免整頁過長。
pin 與 word=/word^= 的整詞在載入分詞器時釘入,轉換繁體時仍套用 skip/s2t-multi。
和牛、胜肽、里長等固定整詞改由 rules.txt 維護,extra-correction 只保留語料同義。
roundtrip-dict 改從 specials 寫回保護詞,並加入 merge-extra 與單字鄰居粘詞。
從國土測繪中心下載鄉/里正名,分詞時整詞保護,簡轉繁拉回正名。
roundtrip-dict 寫回 extra 分詞表時一併參照。不收鎮/市/區/村。
place-names 由鄉/里擴及縣、市(含縣轄市)與鎮;仍不收區/村或單字。
分詞釘整詞,簡轉繁拉回正名,roundtrip-dict 一併參照。
補充分詞單字並調高權重
同步 package.json、tauri.conf、Cargo 清單、e2e 模擬與更新/免安裝測試版本字串,並新增 beta7 發行說明稿。
無頭在 GUI/single-instance 之前結束,預設不讀設定;可用 --globalconfig 或 --config,明確參數覆寫設定。寫入需 --yes 或是/否確認。
浮動球改為點擊/拖入矩陣;關於頁並排差異卡,內容超出時才出現捲軸。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant