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 a8f03c1..a9058e3 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- - uses: j178/prek-action@v1
+ - uses: j178/prek-action@4e14d07f9231acabce116ccfca13b13dd9755ece # v3.0.0
diff --git a/.github/workflows/pypi-package.yml b/.github/workflows/pypi-package.yml
index d3f6617..0c788ff 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- - uses: actions/setup-python@v6
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.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@2abe76da66d0a6a4a227101f9348ee855797cfa5 # v3.0.1
# 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@v7
+ 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@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index b0e3dbf..75f3844 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- - uses: actions/setup-python@v6
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.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@v6
+ 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- - uses: actions/setup-python@v6
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
diff --git a/.github/zizmor.yml b/.github/zizmor.yml
deleted file mode 100644
index 9b42b47..0000000
--- a/.github/zizmor.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-# Configuration for the zizmor static analysis tool, run via pre-commit in CI
-# https://woodruffw.github.io/zizmor/configuration/
-rules:
- dangerous-triggers:
- ignore:
- - documentation-links.yml
- unpinned-uses:
- config:
- policies:
- "*": ref-pin
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6ff7968..7124edc 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,12 +1,12 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.14.10
+ rev: v0.15.20
hooks:
- id: ruff-check
args: [--exit-non-zero-on-fix]
- repo: https://github.com/psf/black-pre-commit-mirror
- rev: 25.12.0
+ rev: 26.5.1
hooks:
- id: black
@@ -22,28 +22,28 @@ repos:
- id: trailing-whitespace
- repo: https://github.com/python-jsonschema/check-jsonschema
- rev: 0.36.0
+ rev: 0.37.4
hooks:
- id: check-dependabot
- id: check-github-workflows
- repo: https://github.com/rhysd/actionlint
- rev: v1.7.10
+ rev: v1.7.12
hooks:
- id: actionlint
- - repo: https://github.com/woodruffw/zizmor-pre-commit
- rev: v1.19.0
+ - repo: https://github.com/zizmorcore/zizmor-pre-commit
+ rev: v1.26.1
hooks:
- id: zizmor
- repo: https://github.com/tox-dev/pyproject-fmt
- rev: v2.11.1
+ rev: v2.25.1
hooks:
- id: pyproject-fmt
- repo: https://github.com/abravalheri/validate-pyproject
- rev: v0.24.1
+ rev: v0.25
hooks:
- id: validate-pyproject
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0c28c8f..dbf11f5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,22 @@
# Changelog
+## [2026.7](https://github.com/python/python-docs-theme/releases/tag/2026.7)
+
+* Add Vietnamese translation by @StanFromIreland in https://github.com/python/python-docs-theme/pull/309
+* Switch to Hatchling build hooks for i18n packaging and exclude .po from wheels by @StanFromIreland in https://github.com/python/python-docs-theme/pull/312
+
+## [2026.4](https://github.com/python/python-docs-theme/releases/tag/2026.4)
+
+* Add styling for the `soft-deprecated` class by @StanFromIreland
+ in https://github.com/python/python-docs-theme/pull/305
+* Add Tamil translation in https://github.com/python/python-docs-theme/pull/304
+* Fix the vertical alignment of `:Editor:` by @pradyunsg in
+ https://github.com/python/python-docs-theme/pull/303
+
+## [2026.3](https://github.com/python/python-docs-theme/releases/tag/2026.3)
+
+* Add colors for new thread-safety levels by @lysnikolaou in https://github.com/python/python-docs-theme/pull/299
+
## [2026.2](https://github.com/python/python-docs-theme/releases/tag/2026.2)
* Style codeblock `:caption:` by @StanFromIreland in https://github.com/python/python-docs-theme/pull/288
diff --git a/Makefile b/Makefile
index dda3c23..9588bfa 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,6 @@
# You can set these variables from the command line.
CPYTHON_PATH = ../cpython
PYTHON = python3
-PACKAGE_ABS_PATH = $(shell pwd)/$(shell find dist/python-docs-theme-*.tar.gz)
SPHINXOPTS =
@@ -15,10 +14,11 @@ help:
.PHONY: venv
venv:
$(PYTHON) -m pip install build
+ rm -rf dist/
$(PYTHON) -m build
cd $(CPYTHON_PATH)/Doc \
&& make venv \
- && ./venv/bin/pip install $(PACKAGE_ABS_PATH)
+ && ./venv/bin/pip install $(CURDIR)/dist/python_docs_theme-*.tar.gz
.PHONY: html
html: venv
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 b8598f5..7b81c4f 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]
@@ -27,26 +28,24 @@ classifiers = [
"Topic :: Software Development :: Documentation",
]
dynamic = [ "version" ]
-
dependencies = [
"sphinx>=7.3",
]
-
+urls."Issue tracker" = "https://github.com/python/python-docs-theme/issues"
urls.Code = "https://github.com/python/python-docs-theme"
urls.Download = "https://pypi.org/project/python-docs-theme/"
urls.Homepage = "https://github.com/python/python-docs-theme/"
-urls."Issue tracker" = "https://github.com/python/python-docs-theme/issues"
entry-points."sphinx.html_themes".python_docs_theme = "python_docs_theme"
-[tool.flit.module]
-name = "python_docs_theme"
-
-[tool.flit.sdist]
-include = [ "python_docs_theme/" ]
+[tool.hatch]
+version.path = "python_docs_theme/__init__.py"
+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" ]
[tool.ruff]
fix = true
-
lint.select = [
"C4", # flake8-comprehensions
"E", # pycodestyle errors
diff --git a/python_docs_theme/__init__.py b/python_docs_theme/__init__.py
index 026329b..f0ddc06 100644
--- a/python_docs_theme/__init__.py
+++ b/python_docs_theme/__init__.py
@@ -11,7 +11,7 @@
from sphinx.application import Sphinx
from sphinx.util.typing import ExtensionMetadata
-__version__ = "2026.2"
+__version__ = "2026.7"
THEME_PATH = Path(__file__).resolve().parent
LOCALE_DIR = THEME_PATH / "locale"
diff --git a/python_docs_theme/layout.html b/python_docs_theme/layout.html
index 1903fad..b0cfedf 100644
--- a/python_docs_theme/layout.html
+++ b/python_docs_theme/layout.html
@@ -14,7 +14,7 @@
{{ _('Navigation') }}
{%- endfor %}
{%- block rootrellink %}
-
+
{{theme_root_name}}{{ reldelim1 }}
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/fa/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/fa/LC_MESSAGES/python-docs-theme.po
new file mode 100644
index 0000000..d464abd
--- /dev/null
+++ b/python_docs_theme/locale/fa/LC_MESSAGES/python-docs-theme.po
@@ -0,0 +1,126 @@
+# Persian translations 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: python-docs-theme 2026.7\n"
+"Report-Msgid-Bugs-To: https://github.com/python/python-docs-theme/"
+"issues\n"
+"POT-Creation-Date: 2026-08-16 15:22+0330\n"
+"PO-Revision-Date: 2026-08-16 15:54+0330\n"
+"Last-Translator: Sepehr Rasouli , 2026\n"
+"Language-Team: Persian (https://github.com/revisto/python-docs-fa/)\n"
+"Language: fa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Generated-By: Babel 2.18.0\n"
+"X-Generator: Poedit 3.6\n"
+
+#: python_docs_theme/footerdonate.html:1
+msgid "The Python Software Foundation is a non-profit corporation."
+msgstr "بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است."
+
+#: python_docs_theme/footerdonate.html:2
+msgid "Please donate."
+msgstr "لطفاً کمک مالی کنید."
+
+#: python_docs_theme/layout.html:6
+msgid "Navigation"
+msgstr "ناوبری"
+
+#: python_docs_theme/layout.html:51 python_docs_theme/layout.html:111
+msgid "Quick search"
+msgstr "جستوجوی سریع"
+
+#: python_docs_theme/layout.html:52 python_docs_theme/layout.html:112
+msgid "Go"
+msgstr "برو"
+
+#: python_docs_theme/layout.html:60
+msgid "Theme"
+msgstr "پوسته"
+
+#: python_docs_theme/layout.html:62
+msgid "Auto"
+msgstr "خودکار"
+
+#: python_docs_theme/layout.html:63
+msgid "Light"
+msgstr "روشن"
+
+#: python_docs_theme/layout.html:64
+msgid "Dark"
+msgstr "تاریک"
+
+#: python_docs_theme/layout.html:96
+msgid "Menu"
+msgstr "منو"
+
+#: python_docs_theme/layout.html:142
+msgid "Copyright"
+msgstr "حق نشر"
+
+#: python_docs_theme/layout.html:147
+msgid ""
+"This page is licensed under the Python Software Foundation License "
+"Version 2."
+msgstr "این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است."
+
+#: 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 ""
+"مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز "
+"بدون بند BSD منتشر شدهاند."
+
+#: python_docs_theme/layout.html:152
+#, python-format
+msgid ""
+"See History and License for more "
+"information."
+msgstr ""
+"برای اطلاعات بیشتر به تاریخچه و مجوز "
+"مراجعه کنید."
+
+#: python_docs_theme/layout.html:155
+#, python-format
+msgid "Hosted on %(hosted_on)s."
+msgstr "میزبانی شده روی %(hosted_on)s."
+
+#: python_docs_theme/layout.html:163
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr "آخرین بهروزرسانی در %(last_updated)s."
+
+#: python_docs_theme/layout.html:166
+#, python-format
+msgid "Found a bug?"
+msgstr "آیا اشکالی یافتید؟"
+
+#: python_docs_theme/layout.html:170
+#, python-format
+msgid ""
+"Created using Sphinx "
+"%(sphinx_version)s."
+msgstr ""
+"ساخته شده با Sphinx "
+"%(sphinx_version)s."
+
+#: python_docs_theme/static/copybutton.js:30
+#: python_docs_theme/static/copybutton.js:55
+msgid "Copy"
+msgstr "کپی"
+
+#: python_docs_theme/static/copybutton.js:31
+msgid "Copy to clipboard"
+msgstr "کپی به تختهگیره"
+
+#: python_docs_theme/static/copybutton.js:53
+msgid "Copied!"
+msgstr "کپی شد!"
diff --git a/python_docs_theme/locale/ta/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/ta/LC_MESSAGES/python-docs-theme.po
new file mode 100644
index 0000000..f309d5c
--- /dev/null
+++ b/python_docs_theme/locale/ta/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:
+# Murugan Santhosh, 2026
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: python-docs-theme 2026.3\n"
+"Report-Msgid-Bugs-To: https://github.com/python/python-docs-theme/issues\n"
+"POT-Creation-Date: 2026-04-06 02:43+0000\n"
+"PO-Revision-Date: 2025-09-06 07:41+0000\n"
+"Last-Translator: Murugan Santhosh, 2026\n"
+"Language-Team: Tamil (https://app.transifex.com/python-doc/teams/5390/ta/)\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: ta\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: python_docs_theme/footerdonate.html:1
+msgid "The Python Software Foundation is a non-profit corporation."
+msgstr "Python Software Foundation ஒரு இலாப நோக்கம் இல்லாத நிறுவனமாகும்."
+
+#: python_docs_theme/footerdonate.html:2
+msgid "Please donate."
+msgstr "தயவுசெய்து நன்கொடை அளியுங்கள்."
+
+#: python_docs_theme/layout.html:6
+msgid "Navigation"
+msgstr "வழிநடத்தல்"
+
+#: python_docs_theme/layout.html:51 python_docs_theme/layout.html:111
+msgid "Quick search"
+msgstr "விரைவுத் தேடல்"
+
+#: python_docs_theme/layout.html:52 python_docs_theme/layout.html:112
+msgid "Go"
+msgstr "செல்"
+
+#: python_docs_theme/layout.html:60
+msgid "Theme"
+msgstr "தோற்றம்"
+
+#: python_docs_theme/layout.html:62
+msgid "Auto"
+msgstr "தானியங்கி"
+
+#: python_docs_theme/layout.html:63
+msgid "Light"
+msgstr "வெளிச்சமாக"
+
+#: python_docs_theme/layout.html:64
+msgid "Dark"
+msgstr "இருண்டதாக"
+
+#: python_docs_theme/layout.html:96
+msgid "Menu"
+msgstr "Menu"
+
+#: python_docs_theme/layout.html:142
+msgid "Copyright"
+msgstr "காப்புரிமை"
+
+#: python_docs_theme/layout.html:147
+msgid ""
+"This page is licensed under the Python Software Foundation License Version "
+"2."
+msgstr ""
+"இந்தப் பக்கம் Python Software Foundation Licence, பதிப்பு 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 ""
+"ஆவணங்களில் உள்ள எடுத்துக்காட்டுகள், செய்முறைகள் மற்றும் பிற குறியீடுகள் "
+"கூடுதலாக Zero Clause BSD Licence-இன் கீழ் உரிமம் பெறப்பட்டுள்ளன."
+
+#: python_docs_theme/layout.html:152
+#, python-format
+msgid ""
+"See History and License for more "
+"information."
+msgstr ""
+"மேலும் தகவல்களுக்கு வரலாறு மற்றும் "
+"உரிமத்தைப் பார்க்கவும்."
+
+#: python_docs_theme/layout.html:155
+#, python-format
+msgid "Hosted on %(hosted_on)s."
+msgstr "%(hosted_on)s-இல் வழங்கப்படுகிறது."
+
+#: python_docs_theme/layout.html:163
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr "கடைசியாகப் புதுப்பிக்கப்பட்டது %(last_updated)s அன்று."
+
+#: python_docs_theme/layout.html:166
+#, python-format
+msgid "Found a bug?"
+msgstr "பிழையை கண்டீர்களா?"
+
+#: python_docs_theme/layout.html:170
+#, python-format
+msgid ""
+"Created using Sphinx "
+"%(sphinx_version)s."
+msgstr ""
+"Sphinx பயன்படுத்தி "
+"உருவாக்கப்பட்டது %(sphinx_version)s."
+
+#: python_docs_theme/static/copybutton.js:30
+#: python_docs_theme/static/copybutton.js:55
+msgid "Copy"
+msgstr "Copy"
+
+#: python_docs_theme/static/copybutton.js:31
+msgid "Copy to clipboard"
+msgstr "Copy to clipboard"
+
+#: python_docs_theme/static/copybutton.js:53
+msgid "Copied!"
+msgstr "Copied!"
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/python_docs_theme/static/pydoctheme.css b/python_docs_theme/static/pydoctheme.css
index a83030a..f30aa3a 100644
--- a/python_docs_theme/static/pydoctheme.css
+++ b/python_docs_theme/static/pydoctheme.css
@@ -223,6 +223,9 @@ div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 {
border: 0;
padding: 0.3em 0;
}
+div.body dl.field-list > dt {
+ line-height: 1.6;
+}
div.body hr {
border: 0;
@@ -448,7 +451,9 @@ div.footer a:hover {
:root {
--threadsafety-incompatible: var(--bad-color);
--threadsafety-compatible: var(--middle-color);
- --threadsafety-safe: var(--good-color);
+ --threadsafety-distinct: var(--middle-color);
+ --threadsafety-shared: var(--good-color);
+ --threadsafety-atomic: var(--good-color);
}
.threadsafety.threadsafety-incompatible {
@@ -459,8 +464,16 @@ div.footer a:hover {
color: var(--threadsafety-compatible);
}
-.threadsafety.threadsafety-safe {
- color: var(--threadsafety-safe);
+.threadsafety.threadsafety-distinct {
+ color: var(--threadsafety-distinct);
+}
+
+.threadsafety.threadsafety-shared {
+ color: var(--threadsafety-shared);
+}
+
+.threadsafety.threadsafety-atomic {
+ color: var(--threadsafety-atomic);
}
@@ -551,10 +564,16 @@ div.genindex-jumpbox a {
margin-inline-start: 1rem;
margin-inline-end: 0;
}
- /* Remove sidebar and top related bar */
- div.related, div.sphinxsidebar {
+ /* Remove sidebar and desktop-only related controls */
+ div.related li.right, div.related li.switchers, div.sphinxsidebar {
display: none;
}
+ div.related .root-icon, div.related .root-icon + li {
+ display: none;
+ }
+ div.related {
+ line-height: 1.3;
+ }
/* Anchorlinks are not hidden by fixed-positioned navbar when scrolled to */
html {
scroll-padding-top: 40px;
@@ -776,10 +795,12 @@ div.genindex-jumpbox a {
--versionadded: var(--good-color);
--versionchanged: var(--middle-color);
--deprecated: var(--bad-color);
+ --soft-deprecated: rgb(175, 0, 255);
--versionadded-border: var(--good-border);
--versionchanged-border: var(--middle-border);
--deprecated-border: var(--bad-border);
+ --soft-deprecated-border: rgb(175, 0, 255);
}
div.versionadded,
@@ -804,6 +825,10 @@ div.versionremoved {
border-left-color: var(--deprecated-border);
}
+div.soft-deprecated {
+ border-left-color: var(--soft-deprecated-border);
+}
+
div.versionadded .versionmodified {
color: var(--versionadded);
}
@@ -818,6 +843,10 @@ div.versionremoved .versionmodified {
color: var(--deprecated);
}
+div.soft-deprecated .versionmodified {
+ color: var(--soft-deprecated);
+}
+
/* Hide header when printing */
@media print {
div.mobile-nav {
diff --git a/python_docs_theme/static/pydoctheme_dark.css b/python_docs_theme/static/pydoctheme_dark.css
index 909a296..2139108 100644
--- a/python_docs_theme/static/pydoctheme_dark.css
+++ b/python_docs_theme/static/pydoctheme_dark.css
@@ -49,7 +49,7 @@ div.body a {
}
div.body a:visited {
- color: #09e;
+ color: #bf95f9;
}
a.headerlink:hover {
@@ -181,6 +181,8 @@ img.invert-in-dark-mode {
--versionadded: var(--good-color);
--versionchanged: var(--middle-color);
--deprecated: var(--bad-color);
+ --soft-deprecated: rgb(206, 100, 255);
+ --soft-deprecated-border: rgb(206, 100, 255);
}
.copybutton {
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