Repository navigation
Conversation
- Build and live-serve run Zensical 0.1.0 (pinned) instead of MkDocs. - Config moves to Zensical-native files: docs/zensical.toml plus per-language docs/zensical.<lang>.toml overrides, merged by docs-tools with the MkDocs INHERIT rule. Unexpected keys in a language file warn. - Navigation moves from literate-nav (SUMMARY.md) to native `nav`; existing nav-title translations are migrated in the PO files. - Add convert_mkdocs_config to convert downstream repos, with an equivalence check against the old YAML configuration. - Build-time defaults: classic theme variant, macros on_error_fail. - Theme fixes for Zensical: language selector links, header search, homepage title, TOC text, mkdocstrings locale. - Translated builds copy non-Markdown resources file by file. - Drop the MkDocs fallback and MkDocs-only dependencies.
…ration.
- Give navigation titles their own translation context ("navigation"),
so they keep the translations they had in SUMMARY.md instead of
sharing one with page headings of the same text. Untranslated
navigation entries are seeded from previous translations, so other
repos keep theirs on their next translation run.
- Re-migrate docs-tools' nav-title translations from main: all 760 now
match what main displayed.
- Port existing translations of the strings that changed in this
migration (style guide, translation guide, test bed), applying the
same substitutions; human translations whose meaning changed are kept
and marked for review.
- Keep mkdocstrings API directives out of the translation catalogs, and
restore them after po2md, which mangles their options blocks.
- Give translated builds their own site_url (with the language
directory), fixing their canonical links, sitemaps and 404 pages.
- Refer to Zensical in the style guide.
- Drop mkdocs-rss-plugin; Zensical handles RSS natively.
The converter is only needed once per repository, and relies on private Zensical APIs, so it isn't part of docs-tools. Repositories are converted from a separate branch before this is merged.
The nav-item override compared navigation items with the page object, which never matches under Zensical, so the current page's table of contents wasn't shown under its link in the sidebar, and the active link was only highlighted by JavaScript. Use .active, as Zensical's own template does, and import the language helpers into the TOC partial, which is now rendered there.
This was referenced Nov 6, 2026
…into tooling/zensical-migration # Conflicts: # docs/locales/ar/translations.po # docs/locales/cs/translations.po # docs/locales/da/translations.po # docs/locales/de/translations.po # docs/locales/es/translations.po # docs/locales/fa/translations.po # docs/locales/fr/translations.po # docs/locales/it/translations.po # docs/locales/ja/translations.po # docs/locales/ko/translations.po # docs/locales/pl/translations.po # docs/locales/pt/translations.po # docs/locales/ru/translations.po # docs/locales/ta/translations.po # docs/locales/tr/translations.po # docs/locales/uk/translations.po # docs/locales/vi/translations.po # docs/locales/zh_CN/translations.po # docs/locales/zh_TW/translations.po # pyproject.toml # src/beeware_docs_tools/shared_content/locales/ar/translations.po # src/beeware_docs_tools/shared_content/locales/cs/translations.po # src/beeware_docs_tools/shared_content/locales/da/translations.po # src/beeware_docs_tools/shared_content/locales/de/translations.po # src/beeware_docs_tools/shared_content/locales/es/translations.po # src/beeware_docs_tools/shared_content/locales/fa/translations.po # src/beeware_docs_tools/shared_content/locales/fr/translations.po # src/beeware_docs_tools/shared_content/locales/it/translations.po # src/beeware_docs_tools/shared_content/locales/ja/translations.po # src/beeware_docs_tools/shared_content/locales/ko/translations.po # src/beeware_docs_tools/shared_content/locales/pl/translations.po # src/beeware_docs_tools/shared_content/locales/pt/translations.po # src/beeware_docs_tools/shared_content/locales/ru/translations.po # src/beeware_docs_tools/shared_content/locales/ta/translations.po # src/beeware_docs_tools/shared_content/locales/tr/translations.po # src/beeware_docs_tools/shared_content/locales/uk/translations.po # src/beeware_docs_tools/shared_content/locales/vi/translations.po # src/beeware_docs_tools/shared_content/locales/zh_CN/translations.po # src/beeware_docs_tools/shared_content/locales/zh_TW/translations.po
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Migrates the BeeWare documentation tooling from MkDocs (with Material for MkDocs) to Zensical, and moves the configuration to Zensical's native file formats.
What changes
zensical build/zensical serve(Zensical 0.1.0, pinned exactly, as it's pre-1.0). The MkDocs build path is removed.docs/config.yml+docs/mkdocs.<lang>.yml(YAML withINHERITand!ENV) todocs/zensical.toml+ per-languagedocs/zensical.<lang>.toml:INHERITused: tables merge, lists and values replace.site_urlis filled in from Read the Docs when it isn't set.docs/en/SUMMARY.md) to the nativenavsetting.<title>, and the TOC text size.on_error_failare set by default at build time.site_url, including the language directory. This fixes canonical links, sitemaps and 404 pages that pointed at the English site. That problem predates this PR.:::blocks with anoptions:block are kept out of the translation catalogs and restored afterpo2md, which joins them onto one line and breaks the build. The docs-tools test page now exercises this.mkdocs-material, the macros plugin fork,mkdocs-literate-navandmkdocs-rss-pluginare dropped.mkdocsstays, with a comment explaining why: mkdocstrings imports it when it runs; it's not used to build anything. Droppingmkdocs-rss-pluginwas verified on the website: its feeds are byte-identical, apart from build timestamps, without the plugin installed.Translations
The translation workflow (
md2po/po2md, Weblate, DeepL) is unchanged.msgctxt "navigation"). This keeps them separate from page headings with the same text, which often had a different translation.maindisplays.Before merging: this PR edits every
translations.pofile, so lock Weblate and pull its pending changes first, as thetranslate.ymlworkflow does.Notes for reviewers
The conversion tooling isn't part of this PR. Each repository is converted once, using a converter kept on a separate branch, so it doesn't ship with docs-tools. That converter imports private
zensical.confignames, which is a further reason to keep it out.Downstream repositories: every repository that uses docs-tools needs converting before this merges. Once this merges, docs-tools no longer reads
config.ymlorSUMMARY.md, so any repository still using them stops building. Every one of them has an open migration PR:Each of these PRs pins docs-tools to this branch, so it builds before this merges. Each pin needs reverting to
mainonce this is merged.Verified locally:
tox -e docs-all(20 languages, strict).tox -e py.tox -e docs-lint.PR Checklist:
Assisted-by: Claude Code (Claude Opus 5.5)