diff --git a/.github/workflows/documentation-links.yml b/.github/workflows/documentation-links.yml deleted file mode 100644 index a4de7dc..0000000 --- a/.github/workflows/documentation-links.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Read the Docs PR preview -# Automatically edits a pull request's descriptions with a link -# to the documentation's preview on Read the Docs. - -on: - pull_request_target: - types: - - opened - -permissions: - pull-requests: write - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - documentation-links: - runs-on: ubuntu-latest - steps: - - uses: readthedocs/actions/preview@v1 - with: - project-slug: "python-docs-theme-previews" - single-version: "true" diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 2c301a8..9fd628a 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: j178/prek-action@v2 + - uses: j178/prek-action@bdca6f102f98e2b4c7029491a53dfd366469e33d # v2.0.4 diff --git a/.github/workflows/pypi-package.yml b/.github/workflows/pypi-package.yml index 2734399..d14da70 100644 --- a/.github/workflows/pypi-package.yml +++ b/.github/workflows/pypi-package.yml @@ -20,18 +20,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: actions/setup-python@v6 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 - - name: Compile translations - run: | - pip install --upgrade pip - pip install -r requirements.txt - python babel_runner.py compile - - - uses: hynek/build-and-inspect-python-package@v2 + - uses: hynek/build-and-inspect-python-package@d44ca7d91762de7a7d5436ddae667c6da6d1c3df # v2.18.0 # Upload to real PyPI on GitHub Releases. release-pypi: @@ -49,10 +43,10 @@ jobs: steps: - name: Download packages built by build-and-inspect-python-package - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages path: dist - name: Upload package to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6a10a67..fdd840d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,10 +19,10 @@ jobs: - python-version: "3.15" branch: "main" steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: actions/setup-python@v6 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{ matrix.python-version }} allow-prereleases: true @@ -52,7 +52,7 @@ jobs: run: | cat ./logs/docsbuild.log - name: Upload - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: doc-html-${{ matrix.python-version }} path: www/ @@ -66,10 +66,10 @@ jobs: # Test minimum supported and latest stable from 3.x series python-version: ["3.12", "3"] steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: actions/setup-python@v6 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{ matrix.python-version }} allow-prereleases: true diff --git a/.github/zizmor.yml b/.github/zizmor.yml index 9b42b47..7c776d5 100644 --- a/.github/zizmor.yml +++ b/.github/zizmor.yml @@ -1,10 +1,6 @@ -# Configuration for the zizmor static analysis tool, run via pre-commit in CI -# https://woodruffw.github.io/zizmor/configuration/ +# Configuration for the zizmor static analysis tool, run via prek in CI +# https://docs.zizmor.sh/configuration/ rules: dangerous-triggers: ignore: - documentation-links.yml - unpinned-uses: - config: - policies: - "*": ref-pin diff --git a/babel_runner.py b/babel_runner.py index 677f6da..f4c8122 100755 --- a/babel_runner.py +++ b/babel_runner.py @@ -8,6 +8,8 @@ import tomllib from pathlib import Path +from hatchling.builders.hooks.plugin.interface import BuildHookInterface + # Global variables used by pybabel below (paths relative to PROJECT_DIR) DOMAIN = "python-docs-theme" COPYRIGHT_HOLDER = "Python Software Foundation" @@ -106,6 +108,11 @@ def compile_catalogs(locale: str) -> None: subprocess.run(cmd, cwd=PROJECT_DIR, check=True) +class CustomBuildHook(BuildHookInterface): + def initialize(self, version: str, build_data: dict[str, object]) -> None: + compile_catalogs("") + + def main() -> None: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument( diff --git a/pyproject.toml b/pyproject.toml index ef39594..897ff85 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,8 @@ [build-system] -build-backend = "flit_core.buildapi" +build-backend = "hatchling.build" requires = [ - "flit-core>=3.7", + "babel", + "hatchling", ] [project] @@ -36,9 +37,12 @@ urls.Download = "https://pypi.org/project/python-docs-theme/" urls.Homepage = "https://github.com/python/python-docs-theme/" entry-points."sphinx.html_themes".python_docs_theme = "python_docs_theme" -[tool.flit] -module.name = "python_docs_theme" -sdist.include = [ "python_docs_theme/" ] +[tool.hatch] +build.artifacts = [ "python_docs_theme/locale/**/*.mo" ] +build.hooks.custom.path = "babel_runner.py" +build.targets.wheel.packages = [ "python_docs_theme" ] +build.targets.wheel.exclude = [ "python_docs_theme/locale/**/*.po" ] +version.path = "python_docs_theme/__init__.py" [tool.ruff] fix = true diff --git a/python_docs_theme/locale/de/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/de/LC_MESSAGES/python-docs-theme.po index 49dddf7..7ec069d 100644 --- a/python_docs_theme/locale/de/LC_MESSAGES/python-docs-theme.po +++ b/python_docs_theme/locale/de/LC_MESSAGES/python-docs-theme.po @@ -7,7 +7,6 @@ # Translators: # Cristián Maureira-Fredes, 2025 # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: python-docs-theme 2025.5\n" diff --git a/python_docs_theme/locale/vi/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/vi/LC_MESSAGES/python-docs-theme.po new file mode 100644 index 0000000..5e30147 --- /dev/null +++ b/python_docs_theme/locale/vi/LC_MESSAGES/python-docs-theme.po @@ -0,0 +1,129 @@ +# Translations template for python-docs-theme. +# Copyright (C) 2026 Python Software Foundation +# This file is distributed under the same license as the python-docs-theme +# project. +# FIRST AUTHOR , 2026. +# +# Translators: +# Nguyen Duc Tam, 2026 +# +msgid "" +msgstr "" +"Project-Id-Version: python-docs-theme 2026.4\n" +"Report-Msgid-Bugs-To: https://github.com/python/python-docs-theme/issues\n" +"POT-Creation-Date: 2026-04-27 03:20+0000\n" +"PO-Revision-Date: 2025-09-06 07:41+0000\n" +"Last-Translator: Nguyen Duc Tam, 2026\n" +"Language-Team: Vietnamese (https://app.transifex.com/python-doc/teams/5390/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.18.0\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: python_docs_theme/footerdonate.html:1 +msgid "The Python Software Foundation is a non-profit corporation." +msgstr "Python Software Foundation là một tổ chức phi lợi nhuận." + +#: python_docs_theme/footerdonate.html:2 +msgid "Please donate." +msgstr "Vui lòng quyên góp." + +#: python_docs_theme/layout.html:6 +msgid "Navigation" +msgstr "Điều hướng" + +#: python_docs_theme/layout.html:51 python_docs_theme/layout.html:111 +msgid "Quick search" +msgstr "Tìm kiếm nhanh" + +#: python_docs_theme/layout.html:52 python_docs_theme/layout.html:112 +msgid "Go" +msgstr "Đi tiếp" + +#: python_docs_theme/layout.html:60 +msgid "Theme" +msgstr "Theme" + +#: python_docs_theme/layout.html:62 +msgid "Auto" +msgstr "Tự động" + +#: python_docs_theme/layout.html:63 +msgid "Light" +msgstr "Sáng" + +#: python_docs_theme/layout.html:64 +msgid "Dark" +msgstr " Tối" + +#: python_docs_theme/layout.html:96 +msgid "Menu" +msgstr "Menu" + +#: python_docs_theme/layout.html:142 +msgid "Copyright" +msgstr "Bản quyền" + +#: python_docs_theme/layout.html:147 +msgid "" +"This page is licensed under the Python Software Foundation License Version " +"2." +msgstr "" +"Trang này được cấp phép theo Giấy phép của Tổ chức Phần mềm Python Phiên bản" +" 2." + +#: python_docs_theme/layout.html:149 +msgid "" +"Examples, recipes, and other code in the documentation are additionally " +"licensed under the Zero Clause BSD License." +msgstr "" +"Các ví dụ, hướng dẫn và mã nguồn khác trong tài liệu này còn được cấp phép " +"bổ sung theo Giấy phép BSD Không Điều khoản." + +#: python_docs_theme/layout.html:152 +#, python-format +msgid "" +"See History and License for more " +"information." +msgstr "" +"Xem Lịch sử và Giấy phép để biết thêm thông" +" tin." + +#: python_docs_theme/layout.html:155 +#, python-format +msgid "Hosted on %(hosted_on)s." +msgstr "Được lưu trữ trên %(hosted_on)s." + +#: python_docs_theme/layout.html:163 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Cập nhật lần cuối vào %(last_updated)s." + +#: python_docs_theme/layout.html:166 +#, python-format +msgid "Found a bug?" +msgstr "Tìm thấy lỗi?" + +#: python_docs_theme/layout.html:170 +#, python-format +msgid "" +"Created using Sphinx " +"%(sphinx_version)s." +msgstr "" +"Được tạo bằng Sphinx " +"%(sphinx_version)s. " + +#: python_docs_theme/static/copybutton.js:30 +#: python_docs_theme/static/copybutton.js:55 +msgid "Copy" +msgstr "Sao chép" + +#: python_docs_theme/static/copybutton.js:31 +msgid "Copy to clipboard" +msgstr "Sao chép vào clipboard" + +#: python_docs_theme/static/copybutton.js:53 +msgid "Copied!" +msgstr "Đã sao chép!" diff --git a/requirements.txt b/requirements.txt index bb631b5..ea5adbd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ # for babel_runner.py Babel +hatchling Jinja2