Skip to content

Conversation

yoyo930021
Copy link
Member

@yoyo930021 yoyo930021 commented Jul 19, 2025

Pull request type

Please check the type of change your PR introduces:

  • Bugfix
  • Feature
  • Code style update (formatting, renaming)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • Documentation content changes
  • Other (please describe):

問題描述

文件建置流程因 mkdocs 插件(特別是 mkdocs-static-i18nmkdocs-autorefs)的更新而失敗。

最初遇到的問題包括:

  1. mkdocs_autorefs: Multiple primary URLs found 警告:已透過調整插件順序並在 autorefs 中新增 resolve_closest: true 解決。
  2. 處理 zh-TW 語系檔案時,babel 函式庫回報 ValueError: expected only letters, got zh-tw。這是導致建置失敗的核心問題。

問題根源

mkdocs-static-i18n 插件在新版本(例如 1.3.0)中引入了重大變更,特別是在語系格式驗證方面。它現在嚴格要求語系代碼必須符合 babel 函式庫的規範,不允許在語系字串中使用連字號 (-)。這意味著 zh-TW 格式不再被接受,而 zh_TW 才是有效的格式。此變更也影響了插件產生輸出目錄的方式,若未明確處理,預設會從 zh-TW 轉為 zh-Hant

解決方案

為了解決這些相容性問題,並確保文件能夠成功建置,同時保持一致的檔案結構,我們進行了以下修改:

  1. mkdocs.yml 設定更新

    • 插件順序調整:將 autorefs 插件移至 i18n 之前,以確保在多語系設定中正確處理交叉引用。
    • autorefs 設定:為 autorefs 插件新增 resolve_closest: true,以更優雅地處理多個主要 URL 的情況。
    • i18n 語系設定調整:將 i18n 插件的 languages 設定更新為新的列表字典格式,並明確將 en 設定為預設語系。
    • 語系代碼修正:最關鍵的是,將 mkdocs.yml 中所有 zh-Hant 的設定明確改為 zh_TW,以符合 babel 的要求並維持繁體中文語系。
  2. 檔案與目錄重新命名

    • 所有 Markdown 檔案和相關靜態資源(例如圖片),其檔名中原包含 zh-TW 的部分(例如 index.zh-TW.md),都已重新命名為 zh_TW(例如 index.zh_TW.md)。
    • docs_dev/overrides/partials/languages/zh-TW.html 檔案也已重新命名為 zh_TW.html
  3. 內部連結更新

    • 所有 Markdown 檔案中指向 *.zh-TW.md 的內部連結,都已更新為指向 *.zh_TW.md,以確保所有導航和交叉引用功能正常。

影響 / 破壞性變更

此變更對繁體中文語系的路徑和檔案命名慣例引入了破壞性變更

  • 舊路徑/格式.../zh-TW/...檔名.zh-TW.md
  • 新路徑/格式.../zh_TW/...檔名.zh_TW.md

任何依賴舊 zh-TW 路徑的外部連結或自動化流程,都需要更新為 zh_TW

儘管如此,生成的文件在整體資料夾結構和內部連結方面,除了 zh-TW 轉換為 zh_TW 之外,與舊版建置保持一致。這確保了所有文件連結在變更後仍然有效。

驗證

文件現在可以在嚴格模式下成功建置,沒有任何錯誤。與舊版建置 (site_old) 的比較結果也證實,結構上的差異僅限於 zh-TWzh_TW 的語系轉換,而內容上的差異主要是由於主題/插件版本更新所致,這是可接受的。

BREAKING CHANGE: This commit adapts the documentation build process to a new version of `mkdocs-static-i18n` which enforces a new locale format.

The `zh-TW` locale is no longer supported and has been replaced with `zh_TW`.

This change includes:
- Renaming all `zh-TW` files to `zh_TW`.
- Updating all internal links to use the new `zh_TW` locale.
- Updating the `mkdocs.yml` to use the new `zh_TW` locale.
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