install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/i18n-checker" ~/.claude/skills/majiayu000-claude-skill-registry-i18n-checker && rm -rf "$T"
manifest:
skills/data/i18n-checker/SKILL.mdsource content
i18n Checker
i18n 硬編碼檢查和批量處理工具。
與 Style Guardian 的關係
| 工具 | 用途 | 適用場景 |
|---|---|---|
| style-guardian | 快速檢查 UI 層的樣式和 i18n | CI/CD、pre-commit hook、日常開發 |
| i18n-checker | 深入批量處理所有中文硬編碼 | 大規模重構、技術債務清理、ARB 建議生成 |
Style Guardian 的 i18n 檢查:
- 只檢查
,Text()
,AppBar titlelabelText/hintText - 適合快速發現明顯問題
i18n Checker 的優勢:
- 檢測所有中文字串(包括 Model、Service 層)
- 生成 ARB 鍵值建議
- 分別統計 lib/ 和 test/
- 支援批量處理工作流程
使用時機
- 當需要檢查專案中所有硬編碼中文字串(不只是 UI 層)
- 當需要進行大規模 i18n 修復
- 當需要生成 ARB 鍵值建議
- 技術債務評估
基本使用
快速摘要
uv run scripts/i18n_hardcode_checker.py
輸出:
i18n 硬編碼檢查結果: 總計: 11918 處 lib/: 1966 處 test/: 9952 處
詳細報告
uv run scripts/i18n_hardcode_checker.py --report > docs/i18n-report.md
生成 Markdown 格式的詳細報告,包含:
- 每個檔案的硬編碼位置
- 建議的 i18n 鍵名
- 分類統計(lib/ vs test/)
ARB 建議
uv run scripts/i18n_hardcode_checker.py --arb
生成 JSON 格式的 ARB 鍵值建議:
{ "suggestedKey": { "value_zh": "原始中文字串", "value_en": "[TODO: 原始中文字串]", "description": "From file_path:line_number" } }
JSON 輸出
uv run scripts/i18n_hardcode_checker.py --json
生成結構化 JSON 資料,適合程式處理:
{ "summary": { "total": 11918, "lib": 1966, "test": 9952 }, "items": [...] }
標準工作流程
1. 檢查階段
# 執行檢查 uv run scripts/i18n_hardcode_checker.py # 如果發現大量硬編碼,生成報告 uv run scripts/i18n_hardcode_checker.py --report > docs/i18n-report.md
2. 分類階段
根據報告,將硬編碼分為:
| 分類 | 處理方式 |
|---|---|
| UI 層 (presentation/) | 直接使用 l10n |
| ViewModel 層 | 返回代碼,讓 UI 處理 |
| Domain/Model 層 | 移除 UI 文字,改用代碼 |
| Test 層 | 使用 MockAppLocalizations |
3. 批量處理階段
對於大量硬編碼:
- 生成 ARB 建議
uv run scripts/i18n_hardcode_checker.py --arb > arb_suggestions.json
- 手動審核建議
- 添加到 ARB 檔案
- 運行
flutter gen-l10n - 批量替換程式碼
4. 驗證階段
# 再次檢查 uv run scripts/i18n_hardcode_checker.py # 確認數量減少
混合處理模式
大規模 i18n 技術債務的有效處理策略。
核心理念
不同複雜度使用不同處理手段,最大化效率和品質
複雜度分級
| 等級 | 描述 | 處理策略 | 範例 |
|---|---|---|---|
| A | 簡單 UI 文字 | 腳本自動替換 | → |
| B | 需評估內容 | 多代理人平行處理 | ViewModel 層訊息 |
| C | 需架構重構 | 建立獨立 Ticket | Domain 層硬編碼 |
| D | 測試檔案 | 逐案評估 | 測試輸出訊息 vs 驗證條件 |
等級判斷標準
等級 A - 簡單 UI 文字:
- 在
或presentation/
目錄core/ui/ - 直接在 Widget 中顯示的文字
- 已有對應 ARB 鍵值或可直接新增
等級 B - 需評估內容:
- ViewModel 層的訊息
- 需要判斷是 UI 文字還是業務邏輯
- 可能需要返回代碼讓 UI 處理
等級 C - 需架構重構:
- Domain/Model 層的中文字串
- 違反分層 i18n 規範
- 需要改為代碼/枚舉,由 UI 層翻譯
等級 D - 測試檔案:
- 測試輸出訊息:可使用 MockAppLocalizations
- 測試驗證條件:可能需要改用代碼比對
- 不應一概跳過
批量替換腳本
針對等級 A,使用批量替換腳本:
# Dry run(預設) uv run scripts/i18n_batch_replace.py --target lib/presentation # 實際替換 uv run scripts/i18n_batch_replace.py --target lib/presentation --apply # 生成報告 uv run scripts/i18n_batch_replace.py --target lib/presentation --report
腳本會自動處理常見映射:
- 按鈕文字:確認、取消、提交、搜尋...
- 狀態文字:載入中、搜尋中、同步中...
- 連線狀態:已連線、離線中、未知狀態...
混合處理工作流程
1. 分析階段 └─ uv run scripts/i18n_hardcode_checker.py --json └─ 將結果分類為 A/B/C/D 等級 2. 等級 A 處理 └─ 新增 ARB 鍵值 └─ flutter gen-l10n └─ uv run scripts/i18n_batch_replace.py --apply 3. 等級 B 處理 └─ 多代理人平行評估 └─ 決定各項目歸屬(A/C/保留) 4. 等級 C 處理 └─ 建立 Atomic Tickets └─ 按依賴順序排程 5. 等級 D 處理 └─ 逐案評估 └─ 不跳過,記錄評估結果
Ticket 派生策略
當發現等級 C(需架構重構)項目時:
| 情況 | 處理方式 |
|---|---|
| Domain 層包含 UI 文字 | 建立重構 Ticket(如 W2-001) |
| 默認參數硬編碼 | 建立策略 Ticket(如 W2-002) |
| 跨多檔案的模式 | 建立批量處理 Ticket |
實戰案例
v0.25.1 i18n 技術債務處理:
| 等級 | 數量 | 處理方式 | Ticket |
|---|---|---|---|
| A | 35 處 | 腳本替換 | W1-004 |
| B | 90 處 | 待評估 | W1-004 |
| C | 947 處 | 架構重構 | W2-001 |
| C | 3 處 | 默認參數 | W2-002 |
注意事項
- 不要急於替換:先分析、分類、再處理
- 保留評估紀錄:等級 B/D 項目需記錄評估結果
- 尊重架構分層:Domain 層不應直接包含 UI 文字
- 測試檔案特殊:測試中的硬編碼可能是有意為之
排除規則
腳本會自動排除以下模式:
- 註解(單行、多行、文檔)
- import 語句
- package 路徑
- ARB 檔案引用
- URL
- 生成的檔案 (.g.dart, generated/)
- l10n 目錄
建議鍵名邏輯
腳本會根據中文內容自動建議鍵名:
| 中文關鍵字 | 英文對應 |
|---|---|
| 成功 | success |
| 失敗 | failed |
| 錯誤 | error |
| 匯入 | import |
| 匯出 | export |
| 書籍 | book |
| 載入 | loading |
| 完成 | completed |
與其他工具整合
Style Guardian
# 先執行 style guardian 檢查 /style-guardian # 再執行 i18n 檢查 uv run scripts/i18n_hardcode_checker.py
CI/CD
可在 CI 中加入:
- name: Check i18n run: | result=$(uv run scripts/i18n_hardcode_checker.py --json) lib_count=$(echo $result | jq '.summary.lib') if [ $lib_count -gt 100 ]; then echo "Warning: $lib_count hardcoded strings in lib/" fi
相關資源
維護資訊
建立日期: 2026-01-14 更新日期: 2026-01-15 維護者: 主線程 腳本位置:
- 硬編碼檢查腳本scripts/i18n_hardcode_checker.py
- 批量替換腳本scripts/i18n_batch_replace.py