開源版
NT$0MIT 授權,不含 API
- CLI 與 6 條規則
- 自訂詞表與
quandian.toml - CI 輸出格式:GitHub Actions、GitLab CI
- GitHub issue 回覆
給工程團隊用的繁中文件檢查工具v2.4.1
說明文件裡的半形標點、中英文沒空格、大陸用語、同一個詞兩種寫法,在合併前就抓出來;能自動修的,直接修好。
npx quandian check README.zh-TW.md --fix
✓ 3:15 punct.fullwidth 「,」→「,」半形逗號換成全形
✓ 7:3 term.tw 「視頻」→「影片」大陸用語換成台灣用語
✓ 11:8 space.cjk-latin 「API文件」→「API 文件」中文和英文之間加空格
! 14:1 term.consistent 「登入」「登錄」混用同一個詞兩種寫法,留給人決定
已修正 3 處,1 處要人工確認
npm i -D @quandian/cli
quandian 是給台灣團隊的命令列工具,檢查 Markdown、MDX 和翻譯檔。開源 CLI 是 MIT 授權,接得進 GitHub Actions,另有 API。
中文字佔 2 格、英數佔 1 格,欄位才對得齊
quandian rules
標點規則參考教育部《重訂標點符號手冊》,用語規則照台灣軟體文件的慣用寫法;任何一條都能在 quandian.toml 裡關掉,或從 error 降成 warn。
| 規則 | 預設 | 檢查什麼 | 改前 → 改後 |
|---|---|---|---|
punct.fullwidth | error | 中文句子裡的半形逗號、句號、冒號、問號和驚嘆號,換成全形 | 開票,支援載具改成開票,支援載具 |
punct.ellipsis | error | 三個半形句點或三個句號,換成刪節號 | 等一下...改成等一下…… |
quote.corner | error | 包著中文的直引號或彎引號,換成「」;英文句子裡的引號不動 | "設定"頁改成「設定」頁 |
space.cjk-latin | warn | 中文和英文、數字之間加一個半形空格,行內程式碼與網址不檢查;設成 never 就反過來抓多出來的空格 | 見API文件改成見 API 文件 |
term.tw | error | 中國大陸用語換成台灣用語;內建詞表之外,可以再加公司自己的詞表(CSV) | 默認數據庫改成預設資料庫 |
term.consistent | warn | 同一份文件裡同一個詞有兩種寫法時提醒;不自動修正,由寫的人決定 | 登入…登錄改成要人工確認 |
quandian check docs/deploy.zh-TW.md --fix
docs/deploy.zh-TW.md 8 行、16 個問題:--fix 逐行標出問題、印出修正後的句子,行尾列出規則名稱與欄位,用的是上面 6 條規則的預設等級。
這份說明有 16 個問題,quandian 全部自動修正。下面是修正後的文字,每一行後面列出改了哪裡。
quandian check README.zh-TW.md
網頁版規則,詞表精簡成 14 組;文字在你的瀏覽器裡檢查,不送到伺服器。調規則等級,檢查結果、exit 碼和 quandian.toml 跟著重算。
4 個問題:2 個錯誤、2 個警告,其中 3 個可以自動修正。
exit 1有 2 個錯誤,CI 不會通過。
✗ 錯誤:CI 不通過 ! 警告:只提醒,CI 照樣通過
punct.fullwidth 半形標點punct.ellipsis 刪節號quote.corner 引號space.cjk-latin 中英空格term.tw 台灣用語term.consistent 同詞一致# 存成專案根目錄的 quandian.toml
[rules]
"punct.fullwidth" = "error"
"punct.ellipsis" = "error"
"quote.corner" = "error"
"space.cjk-latin" = "warn"
"term.tw" = "error"
"term.consistent" = "warn"都是預設等級。把這份存進專案根目錄,CLI、GitHub Actions 和 API 都會照它檢查。
quandian init --ci github
本機用 CLI,PR 用 GitHub Actions,自己的系統用 API;三個入口讀同一份 quandian.toml 和詞表,檢查結果相同。
# 放在專案根目錄;存檔後下一次檢查就照新設定
[files]
include = ["docs/**/*.md", "src/locales/zh-TW/*.json"]
exclude = ["docs/changelog/**"]
[rules]
"punct.fullwidth" = "error"
"quote.corner" = "error"
"space.cjk-latin" = "warn" # 不加空格的團隊改成 "never"
"term.tw" = "error"
"term.consistent" = "warn"
[term.tw]
extra = "glossary/tw-terms.csv" # 公司自己的詞表,一行一組# PR 有改到文件時才跑;問題會直接標在 PR 的那一行
name: quandian
on:
pull_request:
paths: ["docs/**", "src/locales/**"]
jobs:
lint-zh:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22 }
- run: npx quandian check --format githubcurl -s "$QUANDIAN_API/v1/check" \
-H "Authorization: Bearer $QUANDIAN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "教學視頻在官網首頁。", "rules": ["term.tw"]}'
# 回應
{
"issues": [
{
"rule": "term.tw",
"line": 1, "column": 3,
"found": "視頻", "suggest": "影片",
"fixable": true
}
],
"fixed": "教學影片在官網首頁。"
}quandian changelog -n 3
「」裡面的英文引號不會再被 quote.corner 誤判,例如「按下 "Save"」
新規則 term.consistent:同一份文件裡同一個詞有兩種寫法時提醒,例如登入和登錄
API 批次端點 POST /v1/check/batch,一次最多送 50 份文件
價格含 5% 營業稅,開統編發票;開源版 NT$0,沒有使用期限。
填公司、方案和文件放的地方,我們用 Email 回覆。團隊版與企業版導入前,可以約一次 1 小時的線上說明,拿你們的文件把規則調一遍。
quandian contact --send✓ 已收到: 工程師用 Email 回信到