diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 88c0c7c..795f7b0 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-python@v5 with: python-version: "3.x" diff --git a/.github/workflows/pypi-package.yml b/.github/workflows/pypi-package.yml index 744d49b..bec94a2 100644 --- a/.github/workflows/pypi-package.yml +++ b/.github/workflows/pypi-package.yml @@ -21,7 +21,14 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 + - uses: actions/setup-python@v5 + + - 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 @@ -41,7 +48,7 @@ jobs: steps: - name: Download packages built by build-and-inspect-python-package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: Packages path: dist diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 23e6c7e..60257ee 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -14,7 +14,7 @@ jobs: matrix: branch: ["3.14", "3.13", "3.12"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-python@v5 with: python-version: ${{ matrix.branch }} @@ -59,7 +59,7 @@ jobs: # Test minimum supported and latest stable from 3.x series python-version: ["3.12", "3"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} @@ -71,7 +71,7 @@ jobs: pip install -r requirements.txt - name: Remove locale file for testing shell: bash - run: rm -rf locales/pt_BR/ + run: rm -rf python_docs_theme/locale/pt_BR/ - run: python babel_runner.py extract - run: python babel_runner.py init -l pt_BR - run: python babel_runner.py update @@ -80,10 +80,7 @@ jobs: - run: python babel_runner.py compile -l pt_BR - name: Print .pot file shell: bash - run: cat locales/messages.pot + run: cat python_docs_theme/locale/python-docs-theme.pot - name: Print .po file shell: bash - run: cat locales/pt_BR/LC_MESSAGES/messages.po - - name: list files in locales dir - shell: bash - run: ls -R locales/ + run: cat python_docs_theme/locale/pt_BR/LC_MESSAGES/python-docs-theme.po diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 07b2735..696bb88 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,14 @@ Changelog ========= +`2025.9 `_ +--------------------------------------------------------------------------- + +* Enable theme translation and add Polish by @StanFromIreland in https://github.com/python/python-docs-theme/pull/246 +* Add Greek translation by @lysnikolaou and @skpanagiotis in https://github.com/python/python-docs-theme/pull/256 and https://github.com/python/python-docs-theme/pull/257 +* Add Swedish translation by @yeager in https://github.com/python/python-docs-theme/pull/250 +* Pull Brazilian Portuguese, Simplified Chinese, Traditional Chinese, Japanese, Turkish and Spanish translations from `Transifex `_ in https://github.com/python/python-docs-theme/pull/253 and https://github.com/python/python-docs-theme/pull/259 + `2025.5 `_ --------------------------------------------------------------------------- diff --git a/babel_runner.py b/babel_runner.py index 0785ae2..677f6da 100755 --- a/babel_runner.py +++ b/babel_runner.py @@ -1,5 +1,5 @@ -#!/usr/bin/venv python3 """Script for handling translations with Babel""" + from __future__ import annotations import argparse @@ -8,18 +8,18 @@ import tomllib from pathlib import Path -PROJECT_DIR = Path(__file__).resolve().parent -PYPROJECT_TOML = PROJECT_DIR / "pyproject.toml" -INIT_PY = PROJECT_DIR / "python_docs_theme" / "__init__.py" - # Global variables used by pybabel below (paths relative to PROJECT_DIR) -DOMAIN = "messages" +DOMAIN = "python-docs-theme" COPYRIGHT_HOLDER = "Python Software Foundation" -LOCALES_DIR = "locales" -POT_FILE = Path(LOCALES_DIR, f"{DOMAIN}.pot") SOURCE_DIR = "python_docs_theme" MAPPING_FILE = ".babel.cfg" +PROJECT_DIR = Path(__file__).resolve().parent +PYPROJECT_TOML = Path(PROJECT_DIR, "pyproject.toml") +INIT_PY = PROJECT_DIR / SOURCE_DIR / "__init__.py" +LOCALES_DIR = Path(f"{SOURCE_DIR}", "locale") +POT_FILE = Path(LOCALES_DIR, f"{DOMAIN}.pot") + def get_project_info() -> dict: """Retrieve project's info to populate the message catalog template""" @@ -75,13 +75,24 @@ def init_locale(locale: str) -> None: if pofile.exists(): print(f"There is already a message catalog for locale {locale}, skipping.") return - cmd = ["pybabel", "init", "-i", POT_FILE, "-d", LOCALES_DIR, "-l", locale] + cmd = [ + "pybabel", + "init", + "-i", + POT_FILE, + "-d", + LOCALES_DIR, + "-D", + DOMAIN, + "-l", + locale, + ] subprocess.run(cmd, cwd=PROJECT_DIR, check=True) def update_catalogs(locale: str) -> None: """Update translations from existing message catalogs""" - cmd = ["pybabel", "update", "-i", POT_FILE, "-d", LOCALES_DIR] + cmd = ["pybabel", "update", "-i", POT_FILE, "-d", LOCALES_DIR, "-D", DOMAIN] if locale: cmd.extend(["-l", locale]) subprocess.run(cmd, cwd=PROJECT_DIR, check=True) @@ -89,7 +100,7 @@ def update_catalogs(locale: str) -> None: def compile_catalogs(locale: str) -> None: """Compile existing message catalogs""" - cmd = ["pybabel", "compile", "-d", LOCALES_DIR] + cmd = ["pybabel", "compile", "-d", LOCALES_DIR, "-D", DOMAIN] if locale: cmd.extend(["-l", locale]) subprocess.run(cmd, cwd=PROJECT_DIR, check=True) diff --git a/python_docs_theme/__init__.py b/python_docs_theme/__init__.py index 2336dc1..cc11f5e 100644 --- a/python_docs_theme/__init__.py +++ b/python_docs_theme/__init__.py @@ -2,20 +2,31 @@ from pathlib import Path +from sphinx.locale import get_translation + TYPE_CHECKING = False if TYPE_CHECKING: from sphinx.application import Sphinx from sphinx.util.typing import ExtensionMetadata -__version__ = "2025.5" +__version__ = "2025.9" THEME_PATH = Path(__file__).resolve().parent +LOCALE_DIR = THEME_PATH / "locale" +MESSAGE_CATALOG_NAME = "python-docs-theme" def setup(app: Sphinx) -> ExtensionMetadata: app.require_sphinx("7.3") app.add_html_theme("python_docs_theme", str(THEME_PATH)) + app.add_message_catalog(MESSAGE_CATALOG_NAME, LOCALE_DIR) + + def add_translation_to_context(app, pagename, templatename, context, doctree): + _ = get_translation(MESSAGE_CATALOG_NAME) + context["_"] = context["gettext"] = context["ngettext"] = _ + + app.connect("html-page-context", add_translation_to_context) return { "version": __version__, diff --git a/python_docs_theme/locale/el/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/el/LC_MESSAGES/python-docs-theme.po new file mode 100644 index 0000000..5ade8b8 --- /dev/null +++ b/python_docs_theme/locale/el/LC_MESSAGES/python-docs-theme.po @@ -0,0 +1,126 @@ +# Greek translations for python-docs-theme. +# Copyright (C) 2025 Python Software Foundation +# This file is distributed under the same license as the python-docs-theme +# project. +# Lysandros Nikolaou , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: python-docs-theme 2025.5\n" +"Report-Msgid-Bugs-To: https://github.com/python/python-docs-theme/issues\n" +"POT-Creation-Date: 2025-09-08 10:23+0300\n" +"PO-Revision-Date: 2025-09-08 10:23+0300\n" +"Last-Translator: Lysandros Nikolaou \n" +"Language: el\n" +"Language-Team: PyGreece \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\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 "Μενού" + +#: 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, 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." + +#: 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 "Βρήκες ένα bug?" + +#: 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/pl/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/pl/LC_MESSAGES/python-docs-theme.po new file mode 100644 index 0000000..cb74d91 --- /dev/null +++ b/python_docs_theme/locale/pl/LC_MESSAGES/python-docs-theme.po @@ -0,0 +1,127 @@ +# Polish (Poland) translations for python-docs-theme. +# Copyright (C) 2025 Python Software Foundation +# This file is distributed under the same license as the python-docs-theme +# project. +# Stan Ulbrych, 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: python-docs-theme 2025.5\n" +"Report-Msgid-Bugs-To: https://github.com/python/python-docs-theme/issues\n" +"POT-Creation-Date: 2025-08-07 19:09+0200\n" +"PO-Revision-Date: 2025-08-07 15:11+0200\n" +"Last-Translator: Stan Ulbrych \n" +"Language: pl\n" +"Language-Team: pl \n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " +"(n%100<10 || n%100>=20) ? 1 : 2);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: python_docs_theme/footerdonate.html:1 +msgid "The Python Software Foundation is a non-profit corporation." +msgstr "Python Software Foundation jest organizacją non-profit." + +#: python_docs_theme/footerdonate.html:2 +msgid "Please donate." +msgstr "Prosimy o wsparcie." + +#: python_docs_theme/layout.html:6 +msgid "Navigation" +msgstr "Nawigacja" + +#: python_docs_theme/layout.html:51 python_docs_theme/layout.html:111 +msgid "Quick search" +msgstr "Szybkie wyszukiwanie" + +#: python_docs_theme/layout.html:52 python_docs_theme/layout.html:112 +msgid "Go" +msgstr "Szukaj" + +#: python_docs_theme/layout.html:60 +msgid "Theme" +msgstr "Motyw" + +#: python_docs_theme/layout.html:62 +msgid "Auto" +msgstr "auto" + +#: python_docs_theme/layout.html:63 +msgid "Light" +msgstr "jasny" + +#: python_docs_theme/layout.html:64 +msgid "Dark" +msgstr "ciemny" + +#: python_docs_theme/layout.html:96 +msgid "Menu" +msgstr "Menu" + +#: python_docs_theme/layout.html:142 +msgid "Copyright" +msgstr "Prawa autorskie" + +#: python_docs_theme/layout.html:147 +msgid "" +"This page is licensed under the Python Software Foundation License " +"Version 2." +msgstr "" +"Ta strona jest objęta licencją Python Software " +"Foundation w wersji 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 "" +"Przykłady, przepisy i inny kod w dokumentacji są dodatkowo objęte " +"licencją Zero Clause BSD." + +#: python_docs_theme/layout.html:152 +#, python-format +msgid "" +"See History and License for more " +"information." +msgstr "" +"Zobacz Historię i licencję aby uzyskać " +"więcej informacji." + +#: python_docs_theme/layout.html:155 +#, python-format +msgid "Hosted on %(hosted_on)s." +msgstr "Hostowane na %(hosted_on)s." + +#: python_docs_theme/layout.html:163 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Ostatnia aktualizacja %(last_updated)s." + +#: python_docs_theme/layout.html:166 +#, python-format +msgid "Found a bug?" +msgstr "Znalazłeś(-aś) błąd?" + +#: python_docs_theme/layout.html:170 +#, python-format +msgid "" +"Created using Sphinx " +"%(sphinx_version)s." +msgstr "" +"Stworzone za pomocą Sphinx " +"%(sphinx_version)s." + +#: python_docs_theme/static/copybutton.js:30 +#: python_docs_theme/static/copybutton.js:55 +msgid "Copy" +msgstr "Kopiuj" + +#: python_docs_theme/static/copybutton.js:31 +msgid "Copy to clipboard" +msgstr "Skopiuj do schowka" + +#: python_docs_theme/static/copybutton.js:53 +msgid "Copied!" +msgstr "Skopiowano!" diff --git a/python_docs_theme/locale/pt_BR/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/pt_BR/LC_MESSAGES/python-docs-theme.po new file mode 100644 index 0000000..2ce0936 --- /dev/null +++ b/python_docs_theme/locale/pt_BR/LC_MESSAGES/python-docs-theme.po @@ -0,0 +1,131 @@ +# Translations template for python-docs-theme. +# Copyright (C) 2025 Python Software Foundation +# This file is distributed under the same license as the python-docs-theme +# project. +# FIRST AUTHOR , 2025. +# +# Translators: +# Alexsey Batista da Silva, 2025 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: python-docs-theme 2025.5\n" +"Report-Msgid-Bugs-To: https://github.com/python/python-docs-theme/issues\n" +"POT-Creation-Date: 2025-09-06 08:40+0100\n" +"PO-Revision-Date: 2025-09-06 07:41+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/python-doc/teams/5390/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: python_docs_theme/footerdonate.html:1 +msgid "The Python Software Foundation is a non-profit corporation." +msgstr "A Python Software Foundation é uma corporação sem fins lucrativos." + +#: python_docs_theme/footerdonate.html:2 +msgid "Please donate." +msgstr "Por favor, faça sua doação." + +#: python_docs_theme/layout.html:6 +msgid "Navigation" +msgstr "Navegação" + +#: python_docs_theme/layout.html:51 python_docs_theme/layout.html:111 +msgid "Quick search" +msgstr "Pesquisa rápida" + +#: python_docs_theme/layout.html:52 python_docs_theme/layout.html:112 +msgid "Go" +msgstr "Ir" + +#: python_docs_theme/layout.html:60 +msgid "Theme" +msgstr "Tema" + +#: python_docs_theme/layout.html:62 +msgid "Auto" +msgstr "Automático" + +#: python_docs_theme/layout.html:63 +msgid "Light" +msgstr "Claro" + +#: python_docs_theme/layout.html:64 +msgid "Dark" +msgstr "Escuro" + +#: python_docs_theme/layout.html:96 +msgid "Menu" +msgstr "Menu" + +#: python_docs_theme/layout.html:142 +msgid "Copyright" +msgstr "Direitos autorais" + +#: python_docs_theme/layout.html:147 +msgid "" +"This page is licensed under the Python Software Foundation License Version " +"2." +msgstr "" +"Esta página está licenciada sob a Licença da Python Software Foundation " +"Versão 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 "" +"Exemplos, receitas e outros códigos na documentação são licenciados " +"adicionalmente sob a licença BSD Zero Clause." + +#: python_docs_theme/layout.html:152 +#, python-format +msgid "" +"See History and License for more " +"information." +msgstr "" +"Consulte Histórico e licença para obter " +"mais informações." + +#: python_docs_theme/layout.html:155 +#, python-format +msgid "Hosted on %(hosted_on)s." +msgstr "Hospedado em %(hosted_on)s." + +#: python_docs_theme/layout.html:163 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Última atualização em %(last_updated)s." + +#: python_docs_theme/layout.html:166 +#, python-format +msgid "Found a bug?" +msgstr "Encontrou um erro?" + +#: python_docs_theme/layout.html:170 +#, python-format +msgid "" +"Created using Sphinx " +"%(sphinx_version)s." +msgstr "" +"Criado usando o Sphinx " +"%(sphinx_version)s." + +#: python_docs_theme/static/copybutton.js:30 +#: python_docs_theme/static/copybutton.js:55 +msgid "Copy" +msgstr "Copiar" + +#: python_docs_theme/static/copybutton.js:31 +msgid "Copy to clipboard" +msgstr "Copiar para a área de transferência" + +#: python_docs_theme/static/copybutton.js:53 +msgid "Copied!" +msgstr "Copiado!" diff --git a/python_docs_theme/locale/sv/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/sv/LC_MESSAGES/python-docs-theme.po new file mode 100644 index 0000000..7bf73ef --- /dev/null +++ b/python_docs_theme/locale/sv/LC_MESSAGES/python-docs-theme.po @@ -0,0 +1,128 @@ +# Swedish translations for python-docs-theme. +# Copyright (C) 2025 Python Software Foundation +# This file is distributed under the same license as the python-docs-theme +# project. +# Daniel Nylander, 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: python-docs-theme 2025.5\n" +"Report-Msgid-Bugs-To: https://github.com/python/python-docs-theme/" +"issues\n" +"POT-Creation-Date: 2025-08-07 19:09+0200\n" +"PO-Revision-Date: 2025-08-29 07:03+0200\n" +"Last-Translator: Daniel Nylander \n" +"Language-Team: sv\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.16.0\n" +"X-Generator: Poedit 3.7\n" + +#: python_docs_theme/footerdonate.html:1 +msgid "The Python Software Foundation is a non-profit corporation." +msgstr "Python Software Foundation är ett icke-vinstdrivande företag." + +#: python_docs_theme/footerdonate.html:2 +msgid "Please donate." +msgstr "Donera." + +#: python_docs_theme/layout.html:6 +msgid "Navigation" +msgstr "Navigering" + +#: python_docs_theme/layout.html:51 python_docs_theme/layout.html:111 +msgid "Quick search" +msgstr "Snabbsök" + +#: python_docs_theme/layout.html:52 python_docs_theme/layout.html:112 +msgid "Go" +msgstr "Start" + +#: python_docs_theme/layout.html:60 +msgid "Theme" +msgstr "Tema" + +#: python_docs_theme/layout.html:62 +msgid "Auto" +msgstr "Auto" + +#: python_docs_theme/layout.html:63 +msgid "Light" +msgstr "Ljus" + +#: python_docs_theme/layout.html:64 +msgid "Dark" +msgstr "Mörk" + +#: python_docs_theme/layout.html:96 +msgid "Menu" +msgstr "Meny" + +#: python_docs_theme/layout.html:142 +msgid "Copyright" +msgstr "Upphovsrätt" + +#: python_docs_theme/layout.html:147 +msgid "" +"This page is licensed under the Python Software Foundation License " +"Version 2." +msgstr "" +"Denna sida är licensierad enligt Python Software Foundation License " +"version 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 "" +"Exempel, recept och annan kod i dokumentationen är dessutom " +"licensierade under Zero Clause BSD-licensen." + +#: python_docs_theme/layout.html:152 +#, python-format +msgid "" +"See History and License for more " +"information." +msgstr "" +"Se Historik och licens för mer " +"information." + +#: python_docs_theme/layout.html:155 +#, python-format +msgid "Hosted on %(hosted_on)s." +msgstr "Hosting %(hosted_on)s." + +#: python_docs_theme/layout.html:163 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Senast uppdaterad %(last_updated)s." + +#: python_docs_theme/layout.html:166 +#, python-format +msgid "Found a bug?" +msgstr "Har du hittat ett fel?" + +#: python_docs_theme/layout.html:170 +#, python-format +msgid "" +"Created using Sphinx " +"%(sphinx_version)s." +msgstr "" +"Skapad med hjälp av Sphinx " +"%(sphinx_version)s." + +#: python_docs_theme/static/copybutton.js:30 +#: python_docs_theme/static/copybutton.js:55 +msgid "Copy" +msgstr "Kopiera" + +#: python_docs_theme/static/copybutton.js:31 +msgid "Copy to clipboard" +msgstr "Kopiera till urklipp" + +#: python_docs_theme/static/copybutton.js:53 +msgid "Copied!" +msgstr "Kopierad!" diff --git a/python_docs_theme/locale/zh_CN/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/zh_CN/LC_MESSAGES/python-docs-theme.po new file mode 100644 index 0000000..8fb52a4 --- /dev/null +++ b/python_docs_theme/locale/zh_CN/LC_MESSAGES/python-docs-theme.po @@ -0,0 +1,123 @@ +# Translations template for python-docs-theme. +# Copyright (C) 2025 Python Software Foundation +# This file is distributed under the same license as the python-docs-theme +# project. +# FIRST AUTHOR , 2025. +# +# Translators: +# 汇民 王 , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: python-docs-theme 2025.5\n" +"Report-Msgid-Bugs-To: https://github.com/python/python-docs-theme/issues\n" +"POT-Creation-Date: 2025-09-06 08:40+0100\n" +"PO-Revision-Date: 2025-09-06 07:41+0000\n" +"Last-Translator: 汇民 王 , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" +"Language: zh_CN\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 软件基金会是一家非营利性公司。" + +#: 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 软件基金会许可证第 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 "文档中的示例、代码片段及其他代码内容额外采用零条款 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/zh_TW/LC_MESSAGES/python-docs-theme.po b/python_docs_theme/locale/zh_TW/LC_MESSAGES/python-docs-theme.po new file mode 100644 index 0000000..719074c --- /dev/null +++ b/python_docs_theme/locale/zh_TW/LC_MESSAGES/python-docs-theme.po @@ -0,0 +1,123 @@ +# Translations template for python-docs-theme. +# Copyright (C) 2025 Python Software Foundation +# This file is distributed under the same license as the python-docs-theme +# project. +# FIRST AUTHOR , 2025. +# +# Translators: +# W. H. Wang , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: python-docs-theme 2025.5\n" +"Report-Msgid-Bugs-To: https://github.com/python/python-docs-theme/issues\n" +"POT-Creation-Date: 2025-09-06 08:40+0100\n" +"PO-Revision-Date: 2025-09-06 07:41+0000\n" +"Last-Translator: W. H. Wang , 2025\n" +"Language-Team: Chinese (Taiwan) (https://app.transifex.com/python-doc/teams/5390/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" +"Language: zh_TW\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 軟體基金會是一家非營利法人。" + +#: 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 "Go" + +#: 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 軟體基金會授權條款第 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 授權條款。" + +#: 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 "發現 bug?" + +#: 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 "已複製!"